aboutsummaryrefslogtreecommitdiff
path: root/nptl
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-02-08 01:45:26 +0000
committerJoseph Myers <joseph@codesourcery.com>2012-02-08 01:45:26 +0000
commit3add8e1353d62d77fdd9b4ca363cdfe7006b0efb (patch)
tree39d3a6907fc55059bf6705f1ea8a372a23bdeff5 /nptl
parenta22f12b477654522f5be86a0148c30b7a24bd507 (diff)
downloadglibc-3add8e1353d62d77fdd9b4ca363cdfe7006b0efb.zip
glibc-3add8e1353d62d77fdd9b4ca363cdfe7006b0efb.tar.gz
glibc-3add8e1353d62d77fdd9b4ca363cdfe7006b0efb.tar.bz2
Support crti.S and crtn.S provided directly by architectures.
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog16
-rw-r--r--nptl/Makefile19
-rw-r--r--nptl/pt-crti.S44
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/Makefile3
4 files changed, 79 insertions, 3 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 1470566..8ff14a9 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,19 @@
+2012-02-08 Joseph Myers <joseph@codesourcery.com>
+
+ Support crti.S and crtn.S provided directly by architectures.
+ * Makefile [crti.S in sysdirs] (omit-deps): Do not append.
+ [crti.S in sysdirs] (CFLAGS-pt-initfini.s): Do not define variable.
+ [crti.S in sysdirs] ($(objpfx)pt-initfini.s): Disable rule.
+ [crti.S in sysdirs] ($(objpfx)crti.S): Likewise.
+ [crti.S in sysdirs] ($(objpfx)crtn.S): Likewise.
+ [crti.S in sysdirs] ($(objpfx)defs.h): Likewise.
+ [crti.S in sysdirs] ($(objpfx)crti.o): Likewise.
+ [crti.S in sysdirs] ($(objpfx)crtn.o): Likewise.
+ [crti.S in sysdirs] (pt-initfini.c): Remove vpath directive.
+ [crti.S in sysdirs] ($(objpfx)crti.o): New rule.
+ * pt-crti.S: New file.
+ * sysdeps/unix/sysv/linux/i386/Makefile: Remove file.
+
2012-02-03 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Use
diff --git a/nptl/Makefile b/nptl/Makefile
index 0c317b0..81661b3 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -335,15 +335,23 @@ 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)
endif
+endif
CFLAGS-flockfile.c = -D_IO_MTSAFE_IO
CFLAGS-ftrylockfile.c = -D_IO_MTSAFE_IO
@@ -542,15 +550,24 @@ $(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
@@ -572,6 +589,8 @@ $(objpfx)crti.o: $(objpfx)crti.S $(objpfx)defs.h
$(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 $< $@
diff --git a/nptl/pt-crti.S b/nptl/pt-crti.S
new file mode 100644
index 0000000..3ea359d
--- /dev/null
+++ b/nptl/pt-crti.S
@@ -0,0 +1,44 @@
+/* Special .init and .fini section support for libpthread.
+ Copyright (C) 2012 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, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+/* Arrange for __pthread_initialize_minimal_internal to be called at
+ libpthread startup, instead of conditionally calling
+ __gmon_start__. */
+
+#define PREINIT_FUNCTION __pthread_initialize_minimal_internal
+#define PREINIT_FUNCTION_WEAK 0
+
+#include <crti.S>
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/Makefile b/nptl/sysdeps/unix/sysv/linux/i386/Makefile
deleted file mode 100644
index 48eef38..0000000
--- a/nptl/sysdeps/unix/sysv/linux/i386/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-ifeq ($(subdir),nptl)
-CFLAGS-pt-initfini.s += -fno-asynchronous-unwind-tables
-endif