summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2005-02-11 00:29:55 +0000
committerRoland McGrath <roland@gnu.org>2005-02-11 00:29:55 +0000
commit561bcb8086e326e06f295278dcdb13493636c61a (patch)
tree7140bccf8c9bbb4001d7b4e28a2a07c0376b6c0c
parent5d9e8991825aee911baff84d7aa0623a9df1122c (diff)
* include/libc-symbols.h (stub_warning): Emit a marker section called .gnu.glibc-stub.NAME. * Makerules ($(objpfx)stubs): Depend on object files, not dep files. Use objdump to collect those marker section names. ($(common-objpfx)shlib.lds): Discard .gnu.glibc-stub.* sections.
-rw-r--r--ChangeLog7
-rw-r--r--Makerules27
-rw-r--r--include/libc-symbols.h3
3 files changed, 21 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index a733043d47..25b0b8d9b6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2005-02-10 Roland McGrath <roland@redhat.com>
+ [BZ #157]
+ * include/libc-symbols.h (stub_warning): Emit a marker section called
+ .gnu.glibc-stub.NAME.
+ * Makerules ($(objpfx)stubs): Depend on object files, not dep files.
+ Use objdump to collect those marker section names.
+ ($(common-objpfx)shlib.lds): Discard .gnu.glibc-stub.* sections.
+
* Rules (subdir_objs, subdir_stubs): New phony targets.
* Makefile (+subdir_targets): Add them.
diff --git a/Makerules b/Makerules
index 1cc6809342..887d7275c3 100644
--- a/Makerules
+++ b/Makerules
@@ -492,7 +492,7 @@ $(common-objpfx)shlib.lds: $(common-objpfx)config.make $(..)Makerules
PROVIDE(__start___libc_freeres_ptrs = .); \
*(__libc_freeres_ptrs) \
PROVIDE(__stop___libc_freeres_ptrs = .);/'\
- -e 's/^.*\*(\.jcr).*$$/& \
+ -e 's@^.*\*(\.jcr).*$$@& \
PROVIDE(__start___libc_subfreeres = .);\
__libc_subfreeres : { *(__libc_subfreeres) }\
PROVIDE(__stop___libc_subfreeres = .);\
@@ -501,7 +501,8 @@ $(common-objpfx)shlib.lds: $(common-objpfx)config.make $(..)Makerules
PROVIDE(__stop___libc_atexit = .);\
PROVIDE(__start___libc_thread_subfreeres = .);\
__libc_thread_subfreeres : { *(__libc_thread_subfreeres) }\
- PROVIDE(__stop___libc_thread_subfreeres = .);/'
+ PROVIDE(__stop___libc_thread_subfreeres = .);\
+ /DISCARD/ : { *(.gnu.glibc-stub.*) }@'
mv -f $@T $@
common-generated += shlib.lds
@@ -1385,19 +1386,15 @@ ifdef objpfx
.PHONY: stubs # The parent Makefile calls this target.
stubs: $(objpfx)stubs
endif
-$(objpfx)stubs: $(+depfiles)
-ifneq (,$(strip $(+depfiles)))
-# Use /dev/null since `...` might expand to empty.
- c=`($(patsubst %/,cd % &&,$(objpfx)) \
- sed -n -e 's@\$$(common-objpfx)@$(common-objpfx)@g' \
- -e 's@\$$(objpfx)@$(objpfx)@g' \
- -e '/stub-tag\.h/{; g; s/./&/p; }' \
- -e '/:/{x; s/^.*$$//; x; }' \
- -e 's/^.*://;s/\\$$//;s/^ *\([^ ][^ ]*\) .*$$/\1/' \
- -e '/^[^ ][^ ]*$$/{G;s/^.*\n\(..*\)/\1/;s/\n//;h; }' \
- $(patsubst $(objpfx)%,%,$^)) | sort | uniq`; \
- sed -n 's/^stub_warning *(\([^)]*\).*$$/#define __stub_\1/p' \
- $$c /dev/null > $@T
+objs-for-stubs := $(foreach o,$(object-suffixes-for-libc),$(o-objects)) \
+ $(addprefix $(objpfx),$(extra-objs))
+$(objpfx)stubs: $(objs-for-stubs)
+ifneq (,$(strip $(objs-for-stubs)))
+ $(OBJDUMP) -h $^ | \
+ $(AWK) '/\.gnu\.glibc-stub\./ { \
+ sub(/\.gnu\.glibc-stub\./, "", $$2); \
+ stubs[$$2] = 1; } \
+ END { for (s in stubs) print "#define __stub_" s }' > $@T
mv -f $@T $@
else
> $@
diff --git a/include/libc-symbols.h b/include/libc-symbols.h
index dcc46cc80f..f3526ca053 100644
--- a/include/libc-symbols.h
+++ b/include/libc-symbols.h
@@ -1,6 +1,6 @@
/* Support macros for making weak and strong aliases for symbols,
and for using symbol sets and linker warnings with GNU ld.
- Copyright (C) 1995-1998,2000-2003,2004 Free Software Foundation, Inc.
+ Copyright (C) 1995-1998,2000-2003,2004, 2005 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
@@ -279,6 +279,7 @@
/* A canned warning for sysdeps/stub functions. */
#define stub_warning(name) \
+ __make_section_unallocated (".gnu.glibc-stub." #name) \
link_warning (name, \
"warning: " #name " is not implemented and will always fail")