From: Joseph Myers Date: Tue, 21 Feb 2012 00:46:01 +0000 (+0000) Subject: Remove old initfini mechanism. X-Git-Tag: glibc-2.16-tps~970 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0e7dfaef514bbb3ec08934c6f7f42953bc149257;p=platform%2Fupstream%2Fglibc.git Remove old initfini mechanism. --- diff --git a/ChangeLog b/ChangeLog index 87f84f6..5ea30b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,25 @@ +2012-02-21 Joseph Myers + + [BZ #13695] + * csu/Makefile (distribute): Remove initfini.c and defs.awk. + [crti.S not in sysdirs] (generated): Do not append. + [crti.S not in sysdirs] (omit-deps): Likewise. + [crti.S not in sysdirs] ($(crtstuff:%=$(objpfx)%.o)): Remove rule. + [crti.S not in sysdirs] ($(objpfx)initfini.s): Likewise. + [crti.S not in sysdirs] ($(objpfx)crti.S): Likewise. + [crti.S not in sysdirs] ($(objpfx)crtn.S): Likewise. + [crti.S not in sysdirs] ($(patsubst %,$(objpfx)crt%.o,i n)): + Likewise. + [crti.S not in sysdirs] ($(objpfx)defs.h): Likewise. + [crti.S not in sysdirs] (CFLAGS-initfini.s): Remove variable. + [crti.S not in sysdirs] (initfini.c): Remove vpath directive. + * csu/defs.awk: Remove file. + * sysdeps/generic/initfini.c: Likewise. + * sysdeps/powerpc/powerpc32/Makefile (CFLAGS-initfini.s): Remove + variable. + * sysdeps/powerpc/powerpc64/Makefile (CFLAGS-initfini.s): + Likewise. + 2012-02-20 Joseph Myers * sysdeps/unix/sysv/linux/bits/epoll.h: New file. diff --git a/csu/Makefile b/csu/Makefile index c36c42c..8e8a41e 100644 --- a/csu/Makefile +++ b/csu/Makefile @@ -20,8 +20,7 @@ # consists of the startfile, built from start.c and installed as crt0.o # (traditionally) or crt1.o (for ELF). In ELF we also install crti.o and # crtn.o, special "initializer" and "finalizer" files used in the link -# to make the .init and .fini sections work right; both these files are -# built (in an arcane manner) from initfini.c. +# to make the .init and .fini sections work right. subdir := csu @@ -38,7 +37,7 @@ omit-deps = $(patsubst %.o,%,$(start-installed-name) g$(start-installed-name) \ b$(start-installed-name) $(csu-dummies) \ S$(start-installed-name)) install-lib = $(start-installed-name) g$(start-installed-name) $(csu-dummies) -distribute = initfini.c gmon-start.c start.c defs.awk \ +distribute = gmon-start.c start.c \ abi-note.S init.c c not-cancel.h generated = version-info.h before-compile = $(objpfx)version-info.h @@ -80,50 +79,6 @@ crtstuff = crti crtn install-lib += $(crtstuff:=.o) extra-objs += $(crtstuff:=.o) -# Conditionals on the existence of a sysdeps version of crti.S are -# temporary until all targets either have such a file or have been -# removed, after which the old approach of postprocessing compiler -# output will be removed. -ifeq (,$(wildcard $(sysdirs:%=%/crti.S))) - -generated += $(crtstuff:=.S) initfini.s defs.h -omit-deps += $(crtstuff) - -# Special rules for the building of crti.o and crtn.o -$(crtstuff:%=$(objpfx)%.o): %.o: %.S $(objpfx)defs.h - $(compile.S) -g0 $(ASFLAGS-.os) -o $@ - -CFLAGS-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time) - -vpath initfini.c $(sysdirs) - -$(objpfx)initfini.s: initfini.c $(before-compile) - $(compile.c) -S $(CFLAGS-initfini.s) -finhibit-size-directive \ - $(patsubst -f%,-fno-%,$(exceptions)) -o $@ - -# We only have one kind of startup code files. Static binaries and -# shared libraries are build using the PIC version. -$(objpfx)crti.S: $(objpfx)initfini.s - sed -n -e '1,/@HEADER_ENDS/p' \ - -e '/@_.*_PROLOG_BEGINS/,/@_.*_PROLOG_ENDS/p' \ - -e '/@TRAILER_BEGINS/,$$p' $< > $@ - -$(objpfx)crtn.S: $(objpfx)initfini.s - sed -n -e '1,/@HEADER_ENDS/p' \ - -e '/@_.*_EPILOG_BEGINS/,/@_.*_EPILOG_ENDS/p' \ - -e '/@TRAILER_BEGINS/,$$p' $< > $@ - -# These explicit rules are necessary when the $(objpfx) subdirectory -# did not exist at the time make considered the implicit rules using it. -# This comes up with a fresh build using no_deps=t. -$(patsubst %,$(objpfx)crt%.o,i n): %.o: %.S - -$(objpfx)defs.h: $(objpfx)initfini.s - sed -n -e '/@TESTS_BEGIN/,/@TESTS_END/p' $< | \ - $(AWK) -f defs.awk > $@ - -endif - extra-objs += abi-note.o init.o asm-CPPFLAGS += -I$(objpfx). diff --git a/csu/defs.awk b/csu/defs.awk deleted file mode 100644 index 7ca5a33..0000000 --- a/csu/defs.awk +++ /dev/null @@ -1,27 +0,0 @@ -/^[ ]*\.endp/ { need_endp = 1 } -/^[ ]*\.end/ { need_end = 1 } -/^[ ]*\.align/ { if($2 > max) max = $2; } - -END { - if(need_endp) - { - print "#define END_INIT .endp _init"; - print "#define END_FINI .endp _fini"; - } else if(need_end) - { - print "#define END_INIT .end _init"; - print "#define END_FINI .end _fini"; - } - else - { - print "#define END_INIT"; - print "#define END_FINI"; - } - if(max) - print "#define ALIGN .align", max; - else - print "#define ALIGN"; - - print "#include "; - print "weak_extern (__gmon_start__)"; -} diff --git a/nptl/ChangeLog b/nptl/ChangeLog index b8e1e4a..f7400ff 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,21 @@ +2012-02-21 Joseph Myers + + [BZ #13695] + * Makefile (generated): Remove crti.S, crtn.S, defs.h and + pt-initfini.s. + [crti.S not in sysdirs] (omit-deps): Do not append. + [crti.S not in sysdirs] (CFLAGS-pt-initfini.s): Remove variable. + [crti.S not in sysdirs] (pt-initfini.c): Remove vpath directive. + [crti.S not in sysdirs] ($(objpfx)crti.S): Remove rule. + [crti.S not in sysdirs] ($(objpfx)crtn.S): Likewise. + [crti.S not in sysdirs] ($(objpfx)defs.h): Likewise. + [crti.S not in sysdirs] ($(objpfx)crti.o): Likewise. + [crti.S not in sysdirs] ($(objpfx)crtn.o): Likewise. + [crti.S in sysdirs] (extra-objs): Append unconditionally. + [crti.S in sysdirs] ($(objpfx)crti.o): Define rule + unconditionally. + * sysdeps/pthread/pt-initfini.c: Remove file. + 2012-02-16 Richard Henderson * nptl/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c: Remove file. diff --git a/nptl/Makefile b/nptl/Makefile index b43e448..c39230d 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -334,25 +334,12 @@ ifneq (,$(patsubst .,,$(multidir))) generated-dirs := $(firstword $(subst /, , $(multidir))) crti-objs += $(multidir)/crti.o crtn-objs += $(multidir)/crtn.o -# Conditionals on the existence of a sysdeps version of crti.S are -# temporary until all targets either have such a file or have been -# removed, after which the old approach of postprocessing compiler -# output will be removed. -ifeq (,$(wildcard $(sysdirs:%=%/crti.S))) -omit-deps += $(multidir)/crti $(multidir)/crtn -endif $(objpfx)$(multidir): mkdir -p $@ endif extra-objs += $(crti-objs) $(crtn-objs) -ifeq (,$(wildcard $(sysdirs:%=%/crti.S))) -omit-deps += crti crtn - -CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time) -else extra-objs += pt-crti.o endif -endif CFLAGS-flockfile.c = -D_IO_MTSAFE_IO CFLAGS-ftrylockfile.c = -D_IO_MTSAFE_IO @@ -551,47 +538,13 @@ $(addprefix $(objpfx),$(tests) $(test-srcs)): $(objpfx)libpthread.a endif ifeq ($(build-shared),yes) -ifeq (,$(wildcard $(sysdirs:%=%/crti.S))) -vpath pt-initfini.c $(sysdirs) - -$(objpfx)pt-initfini.s: pt-initfini.c - $(compile.c) -S $(CFLAGS-pt-initfini.s) -finhibit-size-directive \ - $(patsubst -f%,-fno-%,$(exceptions)) -o $@ -endif $(objpfx)tst-cleanup0.out: /dev/null $(objpfx)tst-cleanup0 $(make-test-out) 2>&1 | cmp - tst-cleanup0.expect > $@ -ifneq (,$(wildcard $(sysdirs:%=%/crti.S))) - $(objpfx)crti.o: $(objpfx)pt-crti.o ln -f $< $@ -else - -# We only have one kind of startup code files. Static binaries and -# shared libraries are build using the PIC version. -$(objpfx)crti.S: $(objpfx)pt-initfini.s - sed -n -e '1,/@HEADER_ENDS/p' \ - -e '/@_.*_PROLOG_BEGINS/,/@_.*_PROLOG_ENDS/p' \ - -e '/@TRAILER_BEGINS/,$$p' $< > $@ -$(objpfx)crtn.S: $(objpfx)pt-initfini.s - sed -n -e '1,/@HEADER_ENDS/p' \ - -e '/@_.*_EPILOG_BEGINS/,/@_.*_EPILOG_ENDS/p' \ - -e '/@TRAILER_BEGINS/,$$p' $< > $@ - -$(objpfx)defs.h: $(objpfx)pt-initfini.s - sed -n -e '/@TESTS_BEGIN/,/@TESTS_END/p' $< | \ - $(AWK) -f ../csu/defs.awk > $@ - -$(objpfx)crti.o: $(objpfx)crti.S $(objpfx)defs.h - $(compile.S) -g0 $(ASFLAGS-.os) -o $@ - -$(objpfx)crtn.o: $(objpfx)crtn.S $(objpfx)defs.h - $(compile.S) -g0 $(ASFLAGS-.os) -o $@ - -endif - ifneq ($(multidir),.) $(objpfx)$(multidir)/crti.o: $(objpfx)crti.o $(objpfx)$(multidir)/ ln -f $< $@ @@ -600,7 +553,7 @@ $(objpfx)$(multidir)/crtn.o: $(objpfx)crtn.o $(objpfx)$(multidir)/ ln -f $< $@ endif -generated += crti.S crtn.S defs.h pt-initfini.s libpthread_nonshared.a \ +generated += libpthread_nonshared.a \ multidir.mk tst-atfork2.mtrace tst-cancel-wrappers.out \ tst-tls6.out diff --git a/nptl/sysdeps/pthread/pt-initfini.c b/nptl/sysdeps/pthread/pt-initfini.c deleted file mode 100644 index 00cde5c..0000000 --- a/nptl/sysdeps/pthread/pt-initfini.c +++ /dev/null @@ -1,124 +0,0 @@ -/* Special .init and .fini section support. Linuxthread version. - Copyright (C) 1995,1996,1997,2000,2001,2002 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it - and/or modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The Library General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - The GNU C Library is distributed in the hope that it will be - useful, but WITHOUT ANY WARRANTY; without even the implied warranty - of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -/* This file is compiled into assembly code which is then munged by a sed - script into two files: crti.s and crtn.s. - - * crti.s puts a function prologue at the beginning of the - .init and .fini sections and defines global symbols for - those addresses, so they can be called as functions. - - * crtn.s puts the corresponding function epilogues - in the .init and .fini sections. */ - -#include - -/* We use embedded asm for .section unconditionally, as this makes it - easier to insert the necessary directives into crtn.S. */ -#define SECTION(x) asm (".section " x ) - -/* Embed an #include to pull in the alignment and .end directives. */ -asm ("\n#include \"defs.h\""); - -/* The initial common code ends here. */ -asm ("\n/*@HEADER_ENDS*/"); - -/* To determine whether we need .end and .align: */ -asm ("\n/*@TESTS_BEGIN*/"); -extern void dummy (void (*foo) (void)); -void -dummy (void (*foo) (void)) -{ - if (foo) - (*foo) (); -} -asm ("\n/*@TESTS_END*/"); - -/* The beginning of _init: */ -asm ("\n/*@_init_PROLOG_BEGINS*/"); - -static void -call_initialize_minimal (void) -{ - extern void __pthread_initialize_minimal_internal (void) - __attribute ((visibility ("hidden"))); - - __pthread_initialize_minimal_internal (); -} - -SECTION (".init"); -extern void __attribute__ ((section (".init"))) _init (void); -void -_init (void) -{ - /* The very first thing we must do is to set up the registers. */ - call_initialize_minimal (); - - asm ("ALIGN"); - asm("END_INIT"); - /* Now the epilog. */ - asm ("\n/*@_init_PROLOG_ENDS*/"); - asm ("\n/*@_init_EPILOG_BEGINS*/"); - SECTION(".init"); -} -asm ("END_INIT"); - -/* End of the _init epilog, beginning of the _fini prolog. */ -asm ("\n/*@_init_EPILOG_ENDS*/"); -asm ("\n/*@_fini_PROLOG_BEGINS*/"); - -SECTION (".fini"); -extern void __attribute__ ((section (".fini"))) _fini (void); -void -_fini (void) -{ - - /* End of the _fini prolog. */ - asm ("ALIGN"); - asm ("END_FINI"); - asm ("\n/*@_fini_PROLOG_ENDS*/"); - - { - /* Let GCC know that _fini is not a leaf function by having a dummy - function call here. We arrange for this call to be omitted from - either crt file. */ - extern void i_am_not_a_leaf (void); - i_am_not_a_leaf (); - } - - /* Beginning of the _fini epilog. */ - asm ("\n/*@_fini_EPILOG_BEGINS*/"); - SECTION (".fini"); -} -asm ("END_FINI"); - -/* End of the _fini epilog. Any further generated assembly (e.g. .ident) - is shared between both crt files. */ -asm ("\n/*@_fini_EPILOG_ENDS*/"); -asm ("\n/*@TRAILER_BEGINS*/"); - -/* End of file. */ diff --git a/sysdeps/generic/initfini.c b/sysdeps/generic/initfini.c deleted file mode 100644 index 9b3763d..0000000 --- a/sysdeps/generic/initfini.c +++ /dev/null @@ -1,138 +0,0 @@ -/* Special .init and .fini section support. - Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file is compiled into assembly code which is then munged by a sed - script into two files: crti.s and crtn.s. - - * crti.s puts a function prologue at the beginning of the - .init and .fini sections and defines global symbols for - those addresses, so they can be called as functions. - - * crtn.s puts the corresponding function epilogues - in the .init and .fini sections. */ - -#include - -/* We use embedded asm for .section unconditionally, as this makes it - easier to insert the necessary directives into crtn.S. */ -#define SECTION(x) asm (".section " x ) - -/* Embed an #include to pull in the alignment and .end directives. */ -asm ("\n#include \"defs.h\""); - -/* The initial common code ends here. */ -asm ("\n/*@HEADER_ENDS*/"); - -/* To determine whether we need .end and .align: */ -asm ("\n/*@TESTS_BEGIN*/"); -extern void dummy (void (*foo) (void)); -void -dummy (void (*foo) (void)) -{ - if (foo) - (*foo) (); -} -asm ("\n/*@TESTS_END*/"); - -/* The beginning of _init: */ -asm ("\n/*@_init_PROLOG_BEGINS*/"); - -static void -call_gmon_start(void) -{ - extern void __gmon_start__ (void) __attribute__ ((weak)); /*weak_extern (__gmon_start__);*/ - void (*gmon_start) (void) = __gmon_start__; - - if (gmon_start) - gmon_start (); -} - -SECTION (".init"); -extern void __attribute__ ((section (".init"))) _init (void); -void -_init (void) -{ - /* We cannot use the normal constructor mechanism in gcrt1.o because it - appears before crtbegin.o in the link, so the header elt of .ctors - would come after the elt for __gmon_start__. One approach is for - gcrt1.o to reference a symbol which would be defined by some library - module which has a constructor; but then user code's constructors - would come first, and not be profiled. */ - call_gmon_start (); - - asm ("ALIGN"); - asm("END_INIT"); - /* Now the epilog. */ - asm ("\n/*@_init_PROLOG_ENDS*/"); - asm ("\n/*@_init_EPILOG_BEGINS*/"); - SECTION(".init"); -} -asm ("END_INIT"); - -/* End of the _init epilog, beginning of the _fini prolog. */ -asm ("\n/*@_init_EPILOG_ENDS*/"); -asm ("\n/*@_fini_PROLOG_BEGINS*/"); - -SECTION (".fini"); -extern void __attribute__ ((section (".fini"))) _fini (void); -void -_fini (void) -{ - - /* End of the _fini prolog. */ - asm ("ALIGN"); - asm ("END_FINI"); - asm ("\n/*@_fini_PROLOG_ENDS*/"); - - { - /* Let GCC know that _fini is not a leaf function by having a dummy - function call here. We arrange for this call to be omitted from - either crt file. */ - extern void i_am_not_a_leaf (void); - i_am_not_a_leaf (); - } - - /* Beginning of the _fini epilog. */ - asm ("\n/*@_fini_EPILOG_BEGINS*/"); - SECTION (".fini"); -} -asm ("END_FINI"); - -/* End of the _fini epilog. Any further generated assembly (e.g. .ident) - is shared between both crt files. */ -asm ("\n/*@_fini_EPILOG_ENDS*/"); -asm ("\n/*@TRAILER_BEGINS*/"); - -/* End of file. */ diff --git a/sysdeps/powerpc/powerpc32/Makefile b/sysdeps/powerpc/powerpc32/Makefile index 84a9841..aa2d0b9 100644 --- a/sysdeps/powerpc/powerpc32/Makefile +++ b/sysdeps/powerpc/powerpc32/Makefile @@ -23,10 +23,6 @@ pic-ccflag = -fpic endif ifeq ($(subdir),csu) -# The initfini generation code doesn't work in the presence of -fPIC, so -# we use -fpic instead which is much better. -CFLAGS-initfini.s += -fpic -O1 - # There is no benefit to using sdata for these objects, and the user # of the library should be able to control what goes into sdata. CFLAGS-init.o = -G0 diff --git a/sysdeps/powerpc/powerpc64/Makefile b/sysdeps/powerpc/powerpc64/Makefile index efaa296..01889e1 100644 --- a/sysdeps/powerpc/powerpc64/Makefile +++ b/sysdeps/powerpc/powerpc64/Makefile @@ -28,9 +28,6 @@ no-special-regs := $(sort $(foreach n,40 41 50 51 60 61 62 63 \ ifeq ($(subdir),csu) sysdep_routines += hp-timing elide-routines.os += hp-timing -# The initfini generation code doesn't work in the presence of -fPIC, so -# we use -fpic instead which is much better. -CFLAGS-initfini.s += -fpic -O1 endif ifeq ($(subdir),elf)