diff options
author | Eric Andersen <andersen@codepoet.org> | 2002-12-12 10:14:19 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2002-12-12 10:14:19 +0000 |
commit | 3628edc05e5b439aad08191ab220360f9d9f54bd (patch) | |
tree | ff8aaa7216e50019a7852d367bae3bae34fdb92d /libc/sysdeps/linux/sh | |
parent | f329b6fe2f16e16000bb648aa678c2a947258e87 (diff) |
Based on discussions with Stefan Allius, change it so that we always
build a crt0.o and a crt1.o. crt1.o will support ctors and dtors if
such support is enabled. One more gratuitous toolchain support issue
is thereby removed...
-Erik
Diffstat (limited to 'libc/sysdeps/linux/sh')
-rw-r--r-- | libc/sysdeps/linux/sh/Makefile | 14 | ||||
-rw-r--r-- | libc/sysdeps/linux/sh/crt0.S | 7 |
2 files changed, 9 insertions, 12 deletions
diff --git a/libc/sysdeps/linux/sh/Makefile b/libc/sysdeps/linux/sh/Makefile index e17838db9..f43c83096 100644 --- a/libc/sysdeps/linux/sh/Makefile +++ b/libc/sysdeps/linux/sh/Makefile @@ -25,12 +25,10 @@ TOPDIR=../../../../ include $(TOPDIR)Rules.mak CFLAGS+= -I../ -SFLAGS= $(CFLAGS) -D__ASSEMBLER__ -DASM_GLOBAL_DIRECTIVE=.globl +SFLAGS= $(CFLAGS) -D__ASSEMBLER__ -TARGET_MACHINE_TYPE=$(shell $(CC) -dumpmachine) - -CRT0=crt0.S -CRT0_OBJ=$(patsubst %.S,%.o, $(CRT0)) +CRT0_SRC = crt0.S +CRT0_OBJ = crt0.o crt1.o SSRC=setjmp.S __longjmp.S vfork.S clone.S SOBJS=$(patsubst %.S,%.o, $(SSRC)) @@ -47,10 +45,10 @@ $(LIBC): ar-target ar-target: $(OBJS) $(CRT0_OBJ) $(AR) $(ARFLAGS) $(LIBC) $(OBJS) - cp $(CRT0_OBJ) $(TOPDIR)lib/$(CRT0_OBJ) + cp $(CRT0_OBJ) $(TOPDIR)lib/ -$(CRT0_OBJ): %.o : %.S - $(CC) $(SFLAGS) -c $< -o $@ +$(CRT0_OBJ): $(CRT0_SRC) + $(CC) $(CFLAGS) -DL_$* $< -c -o $*.o $(STRIPTOOL) -x -R .note -R .comment $*.o $(SOBJS): %.o : %.S diff --git a/libc/sysdeps/linux/sh/crt0.S b/libc/sysdeps/linux/sh/crt0.S index cf2b7a6a3..90fba8d34 100644 --- a/libc/sysdeps/linux/sh/crt0.S +++ b/libc/sysdeps/linux/sh/crt0.S @@ -49,7 +49,7 @@ _start: mov.l @r15+,r4 mov r15, r5 -#if ! defined __UCLIBC_CTOR_DTOR__ +#if defined L_crt0 || ! defined __UCLIBC_CTOR_DTOR__ /* * Setup the value for the environment pointer: * r6 = (argc + 1) * 4 @@ -58,12 +58,11 @@ _start: mov r4,r6 add #1,r6 shll2 r6 - add r5, r6 /* jump to __uClibc_main (argc, argv, envp) */ mov.l L_main, r0 jsr @r0 - nop /* delay slot */ + add r5, r6 /* delay slot */ /* We should not get here. */ mov.l L_abort, r0 @@ -76,7 +75,7 @@ _start_end: L_main: .long __uClibc_main /* in libuClibc.*.so */ -#else /* __UCLIBC_CTOR_DTOR__ */ +#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 |