diff options
| author | Mike Frysinger <vapier@gentoo.org> | 2005-08-09 04:54:18 +0000 | 
|---|---|---|
| committer | Mike Frysinger <vapier@gentoo.org> | 2005-08-09 04:54:18 +0000 | 
| commit | d501ad45e35b79af56b469fbd8a5bf9df0d16505 (patch) | |
| tree | 51cfe691d908b2b7e526252f087cac3ef8439cf1 /libc | |
| parent | 981799a70581dbb9740113cab23a26664e70e09d (diff) | |
update crt0 to crt1 based heavily on glibc start.S and to sync up with __uClibc_main changes
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/sysdeps/linux/sh/Makefile | 15 | ||||
| -rw-r--r-- | libc/sysdeps/linux/sh/crt1.S (renamed from libc/sysdeps/linux/sh/crt0.S) | 99 | 
2 files changed, 37 insertions, 77 deletions
diff --git a/libc/sysdeps/linux/sh/Makefile b/libc/sysdeps/linux/sh/Makefile index 11c40aa73..f224acdbf 100644 --- a/libc/sysdeps/linux/sh/Makefile +++ b/libc/sysdeps/linux/sh/Makefile @@ -20,8 +20,9 @@  TOPDIR=../../../../  include $(TOPDIR)Rules.mak -CRT0_SRC = crt0.S -CRT0_OBJ = crt0.o crt1.o +CRT_SRC = crt1.S +CRT_OBJ = crt1.o +SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ))  CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o  SSRC=setjmp.S __longjmp.S vfork.S clone.S ___fpscr_values.S @@ -36,15 +37,19 @@ OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH)  all: $(OBJ_LIST) -$(OBJ_LIST): $(OBJS) $(CRT0_OBJ) $(CTOR_TARGETS) +$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS)  	echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST)  	$(INSTALL) -d $(TOPDIR)lib/ -	cp $(CRT0_OBJ) $(TOPDIR)lib/ +	cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/ -$(CRT0_OBJ): $(CRT0_SRC) +$(CRT_OBJ): $(CRT_SRC)  	$(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o  	$(STRIPTOOL) -x -R .note -R .comment $*.o +$(SCRT_OBJ): $(CRT_SRC) +	$(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o +	$(STRIPTOOL) -x -R .note -R .comment $*.o +  $(SOBJS): %.o : %.S  	$(CC) $(ASFLAGS) -c $< -o $@  	$(STRIPTOOL) -x -R .note -R .comment $*.o diff --git a/libc/sysdeps/linux/sh/crt0.S b/libc/sysdeps/linux/sh/crt1.S index 9a3936750..fc0ce355d 100644 --- a/libc/sysdeps/linux/sh/crt0.S +++ b/libc/sysdeps/linux/sh/crt1.S @@ -36,96 +36,51 @@  #include <features.h> -	.file "crt0.S"  	.text  	.globl _start -	.type _start,@function -	.type main,@function -	.size _start,_start_end - _start +	.type _start,%function +	.type main,%function  _start:  	/* Clear the frame pointer since this is the outermost frame. */  	mov #0, r14  	/* Pop argc off the stack and save a pointer to argv */ -	mov.l @r15+,r4 -	mov r15, r5 - -#if defined L_crt0 || ! defined __UCLIBC_CTOR_DTOR__ -	/* -	 * Setup the value for the environment pointer: -	 * r6 = (argc + 1) * 4 -	 * r6 += argv (in delay slot) -	 */ -	mov r4,r6 -	add #1,r6 -	shll2 r6 - -	/* jump to __uClibc_main (argc, argv, envp) */ -	mov.l L_main, r0 -	jsr @r0 -	add r5, r6 /* delay slot */ +	mov.l @r15+,r5 +	mov r15, r6 -	/* We should not get here. */ -	mov.l L_abort, r0 -	jmp @r0 -	nop +	/* Push the fini func onto the stack */ +	mov.l r4,@-r15 +	mov.l L_fini,r0 +	mov.l r0,@-r15 -_start_end: -	.align	2 +	/* Set up the main/init funcs that go in registers */ +	mov.l L_main,r4 +	mov.l L_init,r7 -L_main: -	.long   __uClibc_main /* in libuClibc.*.so */ - -#else /* (L_crt1) && __UCLIBC_CTOR_DTOR__ */ -	/* Push the finip argument to __uClibc_start_main() onto the stack */ -	mov.l L_fini,r6 -	mov.l r6,@-r15 - -	/* Setup the value for the initp argument */ -	mov.l L_init, r7 - -	/* -	 * Setup the value for the environment pointer: -	 * r6 = (argc + 1) * 4 -	 * r6 += argv (in delay slot) -	 */ -	mov r4,r6 -	add #1,r6 -	shll2 r6 - -	/* jump to __uClibc_start_main (argc, argv, envp, app_init, app_fini) */ -	mov.l L_main, r0 -	jsr @r0 -	add r5, r6  /* delay slot */ +	/* __uClibc_main (main, argc, argv, init, fini) */ + +	/* Let the libc call main and exit with its return code.  */ +	mov.l L_uClibc_main,r1 +	jsr @r1 +	nop  	/* We should not get here. */ -	mov.l L_abort, r0 -	jmp @r0 +	mov.l L_abort,r1 +	jmp @r1  	nop -_start_end: + +	.size _start,.-_start  	.align	2  L_main: -	.long   __uClibc_start_main /* in libuClibc.*.so */ - -	.weak   _init -	.type   _init,@function -_init: -	rts -	nop - -	.size   _init,.-_init -	.weak   _fini -	.set    _fini,_init - +	.long   main  L_init: -      .long   _init +	.long   _init  L_fini: -      .long   _fini - -#endif - +	.long   _fini +L_uClibc_main: +	.long   __uClibc_main  L_abort: -      .long   abort +	.long   abort  /* Define a symbol for the first piece of initialized data.  */  	.data  | 
