[BZ #157] cvs/fedora-glibc-20050211T0853
authorRoland McGrath <roland@gnu.org>
Fri, 11 Feb 2005 00:29:55 +0000 (00:29 +0000)
committerRoland McGrath <roland@gnu.org>
Fri, 11 Feb 2005 00:29:55 +0000 (00:29 +0000)
* 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.

ChangeLog
Makerules
include/libc-symbols.h

index a733043d47c2ccd132432d7a609439ef4071e4ac..25b0b8d9b6309e1323a00553e8cfafc76c1a4da1 100644 (file)
--- 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.
 
index 1cc6809342c21122e0d4cdd4c1204e495e69c359..887d7275c35fe6096c3ab554209ff5cc790acc01 100644 (file)
--- 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
        > $@
index dcc46cc80f481bf91bda8ada729378a23634d25a..f3526ca053d13089218f7eb9d1d26097531140c2 100644 (file)
@@ -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
 
 /* 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")