diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | Makerules | 27 | ||||
-rw-r--r-- | include/libc-symbols.h | 3 |
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") |