diff options
Diffstat (limited to 'csu')
-rw-r--r-- | csu/Makefile | 11 | ||||
-rw-r--r-- | csu/initfini.c | 15 |
2 files changed, 7 insertions, 19 deletions
diff --git a/csu/Makefile b/csu/Makefile index 4943087203..31b0f0ab7c 100644 --- a/csu/Makefile +++ b/csu/Makefile @@ -50,12 +50,9 @@ else start-installed-name = crt1.o # These are the special initializer/finalizer files. They are always the -# first and last file in the link. crti.o ... crtn.o are used for normal -# linking; they define the global "functions" _init and _fini to run the -# .init and .fini sections. crti_s.o ... crtn_s.o are for making shared -# library objects; they put the prologue/epilogue code into the .init and -# .fini sections, but define no global symbols. -crtstuff = crti crtn crti_s crtn_s +# first and last file in the link. crti.o ... crtn.o define the global +# "functions" _init and _fini to run the .init and .fini sections. +crtstuff = crti crtn install-lib += $(crtstuff:=.o) extra-objs += $(crtstuff:=.o) @@ -67,13 +64,11 @@ omit-deps += $(crtstuff) # disable emission of .size directives and debugging information, since # they will get confused by the splitting of the output we do. $(objpfx)cr%i.s $(objpfx)cr%n.s: initfini.c; $(initfini) -$(objpfx)cr%i_s.s $(objpfx)cr%n_s.s: initfini.c; $(initfini) define initfini -rm -f $(objpfx)crtcommon.tmp (echo 'cat > crtcommon.tmp <<\EOF_common'; \ $(CC) $< $(CPPFLAGS) $(CFLAGS) \ - $(patsubst %,-DGLOBAL=static,$(filter %_s.s,$@)) \ -finhibit-size-directive -g0 -S -o -; \ echo 'EOF_common') | (cd $(@D); $(SHELL)) cat $(objpfx)crtcommon.tmp >> $(objpfx)crti.s-new diff --git a/csu/initfini.c b/csu/initfini.c index bfd120b7ef..1da5e2721a 100644 --- a/csu/initfini.c +++ b/csu/initfini.c @@ -34,18 +34,11 @@ Cambridge, MA 02139, USA. */ #include <stdlib.h> -/* We are compiled with -DGLOBAL=static to generate the versions used for - shared libraries' .init and .fini sections, which do not have entry - point symbols. */ -#ifndef GLOBAL -#define GLOBAL -#endif - /* These declarations make the functions go in the right sections when we define them below. GCC syntax does not allow the attribute specifications to be in the function definitions themselves. */ -GLOBAL void _init (void) __attribute__ ((section (".init"))); -GLOBAL void _fini (void) __attribute__ ((section (".fini"))); +void _init (void) __attribute__ ((section (".init"))); +void _fini (void) __attribute__ ((section (".fini"))); /* End the here document containing the initial common code. Then move the output file crtcommon.tmp to crti.s-new and crtn.s-new. */ @@ -55,7 +48,7 @@ cp -f crti.s-new crtn.s-new"); /* Append the .init prologue to crti.s-new. */ asm ("cat >> crti.s-new <<\\EOF.crti.init"); -GLOBAL void +void _init (void) { (void) &_init; /* Don't optimize out the function! */ @@ -74,7 +67,7 @@ asm ("\nEOF.crtn.init\ \n\ cat >> crti.s-new <<\\EOF.crti.fini"); -GLOBAL void +void _fini (void) { (void) &_fini; /* Don't optimize out the function! */ |