aboutsummaryrefslogtreecommitdiff
path: root/nptl
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-02-21 00:46:01 +0000
committerJoseph Myers <joseph@codesourcery.com>2012-02-21 00:46:01 +0000
commit0e7dfaef514bbb3ec08934c6f7f42953bc149257 (patch)
tree3a2373ee1f9a7a0bc8d09b5e261e393a9fae2ae3 /nptl
parent599af3ca61ab0841bd968c8965e2efb2c1df2dd3 (diff)
downloadglibc-0e7dfaef514bbb3ec08934c6f7f42953bc149257.zip
glibc-0e7dfaef514bbb3ec08934c6f7f42953bc149257.tar.gz
glibc-0e7dfaef514bbb3ec08934c6f7f42953bc149257.tar.bz2
Remove old initfini mechanism.
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog18
-rw-r--r--nptl/Makefile49
-rw-r--r--nptl/sysdeps/pthread/pt-initfini.c124
3 files changed, 19 insertions, 172 deletions
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 <joseph@codesourcery.com>
+
+ [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 <rth@twiddle.net>
* 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 <http://www.gnu.org/licenses/>. */
-
-/* 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 <stdlib.h>
-
-/* 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. */