From d1b0dffff4be58782a15ebec6595de2447f63dc2 Mon Sep 17 00:00:00 2001 From: Joakim Tjernlund Date: Sat, 28 May 2005 23:44:06 +0000 Subject: Add Peter Mazinger fini/crt compat patch. Select DL_FINI_CRT_COMPAT to be able to run apps built with 0.9.27. This also renames __uClibc_start_main to __uClibc_main. This compat option should be removed some time after 0.9.28 is released. Let me know if you don't like this change. --- libc/sysdeps/linux/arm/Makefile | 7 +------ libc/sysdeps/linux/arm/crt0.S | 10 +--------- libc/sysdeps/linux/i386/crt1.S | 6 +++--- libc/sysdeps/linux/mips/crt1.S | 9 ++++----- libc/sysdeps/linux/powerpc/crt1.S | 9 ++++----- 5 files changed, 13 insertions(+), 28 deletions(-) (limited to 'libc/sysdeps/linux') diff --git a/libc/sysdeps/linux/arm/Makefile b/libc/sysdeps/linux/arm/Makefile index 1a11e43ef..ca41ff6e7 100644 --- a/libc/sysdeps/linux/arm/Makefile +++ b/libc/sysdeps/linux/arm/Makefile @@ -20,7 +20,7 @@ TOPDIR=../../../../ include $(TOPDIR)Rules.mak CRT0_SRC = crt0.S -CRT0_OBJ = crt0.o crt1.o +CRT0_OBJ = crt1.o SCRT0_OBJ = $(patsubst %,S%, $(CRT0_OBJ)) CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o @@ -41,11 +41,6 @@ $(OBJ_LIST): $(OBJS) $(CRT0_OBJ) $(SCRT0_OBJ) $(CTOR_TARGETS) echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST) $(INSTALL) -d $(TOPDIR)lib/ cp $(CRT0_OBJ) $(SCRT0_OBJ) $(TOPDIR)lib/ -ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y) - $(RM) $(TOPDIR)lib/Scrt0.o -else - mv $(TOPDIR)lib/Scrt0.o $(TOPDIR)lib/Scrt1.o -endif $(CRT0_OBJ): $(CRT0_SRC) $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o diff --git a/libc/sysdeps/linux/arm/crt0.S b/libc/sysdeps/linux/arm/crt0.S index f58885d17..4f4a8cefd 100644 --- a/libc/sysdeps/linux/arm/crt0.S +++ b/libc/sysdeps/linux/arm/crt0.S @@ -51,13 +51,9 @@ ARM register quick reference: .text .global _start .type _start,%function -#if defined L_crt0 || ! defined __UCLIBC_CTOR_DTOR__ - .type __uClibc_main,%function -#else .weak _init .weak _fini .type __uClibc_start_main,%function -#endif /* Stick in a dummy reference to main(), so that if an application * is linking when the main() function is in a static library (.a) * we can be sure that main() actually gets linked in */ @@ -92,7 +88,6 @@ _start: ldr r2,[sp, #8] #endif -#if (defined L_crt1 ) && defined __UCLIBC_CTOR_DTOR__ #ifdef __PIC__ /* Store the address of _init in r3 as an argument to main() */ adr r5, .L_init @@ -113,14 +108,11 @@ _start: /* Ok, now run uClibc's main() -- shouldn't return */ bl __uClibc_start_main -#else - bl __uClibc_main -#endif /* Crash if somehow `exit' returns anyways. */ bl abort -#if (defined L_crt1 ) && defined __UCLIBC_CTOR_DTOR__ && defined __PIC__ +#ifdef __PIC__ .L_init: .word _init - .L_init .word _fini - .L_init diff --git a/libc/sysdeps/linux/i386/crt1.S b/libc/sysdeps/linux/i386/crt1.S index 47de89d9a..fe927d9eb 100644 --- a/libc/sysdeps/linux/i386/crt1.S +++ b/libc/sysdeps/linux/i386/crt1.S @@ -60,7 +60,7 @@ .type _init,%function .type _fini,%function .type main,%function - .type __uClibc_start_main,%function + .type __uClibc_main,%function _start: /* Clear the frame pointer. The ABI suggests this be done, to mark the outermost frame obviously. */ @@ -105,7 +105,7 @@ _start: /* Call the user's main function, and exit with its value. But let the libc call main. */ - call __uClibc_start_main@PLT + call __uClibc_main@PLT #else /* Push address of our own entry points to .fini and .init. */ pushl $_fini @@ -118,7 +118,7 @@ _start: /* Call the user's main function, and exit with its value. But let the libc call main. */ - call __uClibc_start_main + call __uClibc_main #endif hlt /* Crash if somehow `exit' does return. */ diff --git a/libc/sysdeps/linux/mips/crt1.S b/libc/sysdeps/linux/mips/crt1.S index 93f3b5e42..82090ae15 100644 --- a/libc/sysdeps/linux/mips/crt1.S +++ b/libc/sysdeps/linux/mips/crt1.S @@ -36,7 +36,6 @@ 02111-1307 USA. */ -#include #include @@ -65,7 +64,7 @@ /* We need to call: - __uClibc_start_main (int (*main) (int, char **, char **), int argc, + __uClibc_main (int (*main) (int, char **, char **), int argc, char **argv, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void *stack_end) */ @@ -76,7 +75,7 @@ .type _init,%function .type _fini,%function .type main,%function - .type __uClibc_start_main,%function + .type __uClibc_main,%function __start: #ifdef __PIC__ @@ -108,9 +107,9 @@ __start: sw $8, 16($29) /* fini */ sw $2, 20($29) /* rtld_fini */ sw $29, 24($29) /* stack_end */ - jal __uClibc_start_main + jal __uClibc_main hlt: - /* Crash if somehow `__uClibc_start_main' returns anyway. */ + /* Crash if somehow `__uClibc_main' returns anyway. */ b hlt .size __start,.-__start diff --git a/libc/sysdeps/linux/powerpc/crt1.S b/libc/sysdeps/linux/powerpc/crt1.S index 6a3e0000b..a912481ef 100644 --- a/libc/sysdeps/linux/powerpc/crt1.S +++ b/libc/sysdeps/linux/powerpc/crt1.S @@ -31,15 +31,13 @@ #define r13 13 #define r31 31 -#include - .text .globl _start .type _start,%function .type _init,%function .type _fini,%function .type main,%function - .type __uClibc_start_main,%function + .type __uClibc_main,%function _start: mr r10,r1 /* Save the stack pointer */ @@ -64,7 +62,7 @@ _start: lwz r6,_init@got(r31) lwz r7,_fini@got(r31) lwz r3,main@got(r31) - b __uClibc_start_main@plt + b __uClibc_main@plt # else lis r6,_init@ha # load top 16 bits addi r6,r6,_init@l # load bottom 16 bits @@ -72,8 +70,9 @@ _start: addi r7,r7,_fini@l # load bottom 16 bits lis r3,main@ha # load top 16 bits addi r3,r3,main@l # load bottom 16 bits - b __uClibc_start_main + b __uClibc_main # endif + .size _start,.-_start /* Define a symbol for the first piece of initialized data. */ -- cgit v1.2.3