* Makerules (check-abi-%): Use two rules for $(common-objpfx) and
authorRoland McGrath <roland@gnu.org>
Wed, 15 Jan 2003 08:08:20 +0000 (08:08 +0000)
committerRoland McGrath <roland@gnu.org>
Wed, 15 Jan 2003 08:08:20 +0000 (08:08 +0000)
$(objpfx) directories, and get rid of vpath directives.  The previous
arrangement resulted in files being written to the source directories
when run in a clean build.  Find all .abilist files in $(..)abilist/.
(update-abi-%): Likewise.
(generated): Don't add .symlist files, they'll be intermediates.

* sysdeps/generic/init-first.c: Add a comment.

* elf/Makefile ($(objpfx)ld.so): Pass -z defs in link.

* scripts/gen-as-const.awk: Grok lone "--" as a separator between
#includes and expressions.

* scripts/merge-abilist.awk: Omit cpu-.*-os.*/modifier from merged
config list when it already contains cpu-.*-os.* without / part.

* Makerules (sed-remove-dotdot): New variable.
($(common-objpfx)%.make): Use it.  Depend on $(before-compile).
($(common-objpfx)%.h $(common-objpfx)%.h.d): Likewise.
(check-abi-config): New variable, append /tls or /notls to the tuple.
(check-abi-%): Use that for -v config value.
Find .abilist files in abilist/libfoo.abilist, not in subdir.
* Rules: Move bits/stdio_lim.h generation rules to Makerules.

ChangeLog
Makerules
Rules
elf/Makefile
scripts/gen-as-const.awk
sysdeps/generic/init-first.c

index 7dd6e43..c11f6e3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,30 @@
+2003-01-14  Roland McGrath  <roland@redhat.com>
+
+       * Makerules (check-abi-%): Use two rules for $(common-objpfx) and
+       $(objpfx) directories, and get rid of vpath directives.  The previous
+       arrangement resulted in files being written to the source directories
+       when run in a clean build.  Find all .abilist files in $(..)abilist/.
+       (update-abi-%): Likewise.
+       (generated): Don't add .symlist files, they'll be intermediates.
+
+       * sysdeps/generic/init-first.c: Add a comment.
+
+       * elf/Makefile ($(objpfx)ld.so): Pass -z defs in link.
+
+       * scripts/gen-as-const.awk: Grok lone "--" as a separator between
+       #includes and expressions.
+
+       * scripts/merge-abilist.awk: Omit cpu-.*-os.*/modifier from merged
+       config list when it already contains cpu-.*-os.* without / part.
+
+       * Makerules (sed-remove-dotdot): New variable.
+       ($(common-objpfx)%.make): Use it.  Depend on $(before-compile).
+       ($(common-objpfx)%.h $(common-objpfx)%.h.d): Likewise.
+       (check-abi-config): New variable, append /tls or /notls to the tuple.
+       (check-abi-%): Use that for -v config value.
+       Find .abilist files in abilist/libfoo.abilist, not in subdir.
+       * Rules: Move bits/stdio_lim.h generation rules to Makerules.
+
 2003-01-14  Ulrich Drepper  <drepper@redhat.com>
 
        * manual/install.texi: Correct description of header preparation for
index 8dc2282..97c20fd 100644 (file)
--- a/Makerules
+++ b/Makerules
@@ -151,15 +151,19 @@ endif
 # can only be figured out from headers, write a FOO.make.c input
 # file that uses cpp contructs and contains @@@ LINE @@@ for each LINE
 # to emit in the generated makefile, and use -include $(common-objpfx)FOO.make.
-$(common-objpfx)%.make: $(..)%.make.c $(..)Makerules
+$(common-objpfx)%.make: $(..)%.make.c $(..)Makerules $(before-compile)
        rm -f $@T $@.dT
        (echo '# Generated from $*.make.c by Makerules.'; \
         SUNPRO_DEPENDENCIES='$@.dT $$(common-objpfx)$*.make' \
         $(CC) $(CFLAGS) $(CPPFLAGS) -E $< \
         | sed -n '/@@@/{s/@@@[  ]*\(.*\)@@@/\1/;s/[     ]*$$//p;}'; \
         echo 'common-generated += $(@F)'; \
-        sed $(sed-remove-objpfx) $@.dT; rm -f $@.dT) > $@T
+        sed $(sed-remove-objpfx) $(sed-remove-dotdot) $@.dT; \
+        rm -f $@.dT) > $@T
        mv -f $@T $@
+
+sed-remove-dotdot := -e 's@  *\([^     \/$$][^         \]*\)@ $$(..)\1@g' \
+                    -e 's@  *\.\.\/\([^        \]*\)@ $$(..)\1@g'
 \f
 # Generate an ordered list of implicit rules which find the source files in
 # each sysdep directory.  The old method was to use vpath to search all the
@@ -662,8 +666,13 @@ ifeq ($(build-programs),yes)
 endif
 +depfiles := $(addprefix $(objpfx),\
                         $(filter-out $(addsuffix .d,$(omit-deps)),\
-                                     $(+depfiles))) \
-            $(addprefix $(common-objpfx),$(gen-as-const-headers:.sym=.h.d))
+                                     $(+depfiles)))
+
+# Avoid the .h.d files for any .sym files whose .h files don't exist yet.
+# They will be generated when they're needed, and trying too early won't work.
++gen-as-const := $(gen-as-const-headers:%.sym=$(common-objpfx)%.h)
++depfiles += $(addsuffix .d,$(filter $(wildcard $(+gen-as-const)),\
+                                               $(+gen-as-const)))
 
 ifdef +depfiles
 ifneq ($(no_deps),t)
@@ -1137,24 +1146,48 @@ ifeq ($(versioning),yes)
        $(OBJDUMP) --dynamic-syms $< > $@T
        mv -f $@T $@
 
-vpath %.symlist $(objpfx) $(common-objpfx)
-vpath %.dynsym $(objpfx) $(common-objpfx)
-vpath %.so $(objpfx) $(common-objpfx)
 check-abi-%: $(..)scripts/extract-abilist.awk $(common-objpfx)config.make \
-            %.abilist %.symlist
+            $(..)abilist/%.abilist $(objpfx)%.symlist
+       $(check-abi)
+check-abi-%: $(..)scripts/extract-abilist.awk $(common-objpfx)config.make \
+            $(..)abilist/%.abilist $(common-objpfx)%.symlist
+       $(check-abi)
+define check-abi
        LC_ALL=C \
-       $(AWK) -f $< \
-              -v 'config=$(config-machine)-$(config-vendor)-$(config-os)' \
+       $(AWK) -f $< -v 'config=$(check-abi-config)' \
               $(filter %.abilist,$^) \
        | diff -pu0 - $(filter %.symlist,$^)
+endef
 
-update-abi-%: $(..)scripts/merge-abilist.awk %.abilist %.symlist
+ifeq ($(sysd-sorted-done),t)
+include $(common-objpfx)tls.make
+config-tls-yes := tls
+config-tls-no := notls
+check-abi-config := \
+  $(config-machine)-$(config-vendor)-$(config-os)/$(config-tls-$(use-thread))
+endif
+
+update-abi-%: $(..)scripts/merge-abilist.awk $(..)abilist/%.abilist \
+             $(objpfx)%.symlist
+       $(update-abi)
+update-abi-%: $(..)scripts/merge-abilist.awk $(..)abilist/%.abilist \
+             $(common-objpfx)%.symlist
+       $(update-abi)
 ifndef update-abi-config
+define update-abi
        @echo 'Run $(MAKE) $@ update-abi-config=REGEXP'; exit 2
+endef
 else
-       LC_ALL=C $(AWK) -v config=$(update-abi-config) -f $^ > $*.abilist.new
-       mv -f $*.abilist.new $*.abilist
-       @echo '*** Now check $*.abilist changes for correctness ***'
+define update-abi
+LC_ALL=C $(AWK) -v config=$(update-abi-config) -f $^ \
+        > $(..)abilist/$*.abilist.new
+@if cmp -s $(..)abilist/$*.abilist.new $(..)abilist/$*.abilist 2> /dev/null; \
+ then rm -f $(..)abilist/$*.abilist.new; \
+      echo '+++ $(..)abilist/$*.abilist is unchanged'; \
+ else mv -f $(..)abilist/$*.abilist.new $(..)abilist/$*.abilist; \
+      echo '*** Now check $*.abilist changes for correctness ***'; \
+ fi
+endef
 endif
 
 .PHONY: update-abi check-abi
@@ -1168,9 +1201,8 @@ check-abi: subdir_check-abi
 update-abi: subdir_update-abi
 endif
 
-# Enable this well all the .abilist files are in place.
+# Enable this when all the .abilist files are in place.
 #tests: check-abi
-generated += $(install-lib.so-versioned:.so=.symlist)
 
 ifeq ($(subdir),elf)
 check-abi: check-abi-libc
@@ -1181,21 +1213,82 @@ endif
 endif
 
 # Generating headers for assembly constants.
-$(common-objpfx)%.h $(common-objpfx)%.h.d: $(..)scripts/gen-as-const.awk %.sym
+$(common-objpfx)%.h $(common-objpfx)%.h.d: $(..)scripts/gen-as-const.awk \
+                                          %.sym $(before-compile)
        $(AWK) -f $< $(filter %.sym,$^) \
        | $(CC) -S -o - $(CFLAGS) $(CPPFLAGS) -x c - \
                -MD -MF $(@:.h=.h.d)T -MT '$(@:.h=.h.d) $(@:.h.d=.h)' \
        | sed -n 's/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$$/#define \1 \2/p' > $(@:.h.d=.h)T
-       sed $(sed-remove-objpfx) \
-           -e 's@  *\([^       \/$$][^         \]*\)@ $$(..)\1@g' \
-           -e 's@  *\.\.\/\([^         \]*\)@ $$(..)\1@g' \
+       sed $(sed-remove-objpfx) $(sed-remove-dotdot) \
            $(@:.h=.h.d)T > $(@:.h=.h.d)T2
        rm -f $(@:.h=.h.d)T
        mv -f $(@:.h=.h.d)T2 $(@:.h=.h.d)
        mv -f $(@:.h.d=.h)T $(@:.h.d=.h)
 vpath %.sym $(sysdirs)
 
+ifeq (,$(wildcard $(gen-as-const-headers:%.sym=$(common-objpfx)%.h)))
 before-compile += $(gen-as-const-headers:%.sym=$(common-objpfx)%.h)
+endif
+
+
+# There's no good place to put this - here will do.
+# The dependencies are wrong if it's run from the top level.
+ifeq ($(filter %posix, $(sysdirs)),)
+L_tmpnam  = 1
+TMP_MAX   = 0
+L_ctermid = 1
+L_cuserid = 1
+else
+L_tmpnam  = 20
+TMP_MAX   = 238328
+L_ctermid = 9
+L_cuserid = 9
+endif
+stdio_lim = $(common-objpfx)bits/stdio_lim.h
+
+$(stdio_lim:lim.h=%.h) $(stdio_lim:lim.h=%.d): $(stdio_lim:lim.h=%.st); @:
+$(stdio_lim:h=st): $(..)stdio-common/stdio_lim.h.in $(..)Rules \
+                  $(common-objpfx)config.make
+       $(make-target-directory)
+       echo '#include "$(..)posix/bits/posix1_lim.h"' |                \
+       SUNPRO_DEPENDENCIES='$(@:st=dT) $@'                             \
+       $(CC) $(+includes) -E -dM -xc - -o $(@:st=hT)
+       echo '#include "$(..)misc/sys/uio.h"' |                         \
+       SUNPRO_DEPENDENCIES='$(@:st=dT) $@'                             \
+       $(CC) -D_LIBC=1 $(+includes) -E -dM -xc - | cat - >> $(@:st=hT)
+ifdef sed-remove-objpfx
+       sed $(sed-remove-objpfx) $(@:st=dT) > $(@:st=dt)
+       cat $(@:st=dt) >> $(@:st=d)
+else
+       cat $(@:st=dT) >> $(@:st=d)
+endif
+       fopen_max=`sed -n 's/^#define OPEN_MAX //1p' $(@:st=hT)`;       \
+       filename_max=`sed -n 's/^#define PATH_MAX //1p' $(@:st=hT)`;    \
+       iov_max=`sed -n 's/^#define UIO_MAXIOV //p' $(@:st=hT)`;        \
+       fopen_max=$${fopen_max:-16};                                    \
+       filename_max=$${filename_max:-1024};                            \
+       if [ -z $$iov_max ]; then                                       \
+         define_iov_max="# undef IOV_MAX";                             \
+       else                                                            \
+         define_iov_max="# define IOV_MAX $$iov_max";                  \
+       fi;                                                             \
+       sed -e "s/@FOPEN_MAX@/$$fopen_max/"                             \
+           -e "s/@FILENAME_MAX@/$$filename_max/"                       \
+           -e "s/@L_tmpnam@/$(L_tmpnam)/"                              \
+           -e "s/@TMP_MAX@/$(TMP_MAX)/"                                \
+           -e "s/@L_ctermid@/$(L_ctermid)/"                            \
+           -e "s/@L_cuserid@/$(L_cuserid)/"                            \
+           -e "s/@define_IOV_MAX@/$$define_iov_max/"                   \
+           $< > $(@:st=h.new)
+       $(move-if-change) $(@:st=h.new) $(@:st=h)
+# Remove these last so that they can be examined if something went wrong.
+       rm -f $(@:st=hT) $(@:st=dT) $(@:st=dt)
+       touch $@
+# Get dependencies.
+ifndef no_deps
+-include $(stdio_lim:h=d)
+endif
+common-generated += bits/stdio_lim.h bits/stdio_lim.d bits/stdio_lim.st
 \f
 .PHONY: TAGS
 TAGS: $(objpfx)distinfo $(..)MakeTAGS
diff --git a/Rules b/Rules
index c2b3f79..29370c8 100644 (file)
--- a/Rules
+++ b/Rules
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2000, 2002 Free Software Foundation, Inc.
+# Copyright (C) 1991-2000,2002,2003 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
@@ -185,65 +185,6 @@ before-compile: $(before-compile)
 $(common-objpfx)dummy.o: $(common-objpfx)dummy.c $(before-compile);
        $(compile-command.c)
 
-# There's no good place to put this - here will do.
-# The dependencies are wrong if it's run from the top level.
-ifeq ($(filter %posix, $(sysdirs)),)
-L_tmpnam  = 1
-TMP_MAX   = 0
-L_ctermid = 1
-L_cuserid = 1
-else
-L_tmpnam  = 20
-TMP_MAX   = 238328
-L_ctermid = 9
-L_cuserid = 9
-endif
-stdio_lim = $(common-objpfx)bits/stdio_lim.h
-
-$(stdio_lim:lim.h=%.h) $(stdio_lim:lim.h=%.d): $(stdio_lim:lim.h=%.st); @:
-$(stdio_lim:h=st): $(..)stdio-common/stdio_lim.h.in $(..)Rules \
-                  $(common-objpfx)config.make
-       $(make-target-directory)
-       echo '#include "$(..)posix/bits/posix1_lim.h"' |                \
-       SUNPRO_DEPENDENCIES='$(@:st=dT) $@'                             \
-       $(CC) $(+includes) -E -dM -xc - -o $(@:st=hT)
-       echo '#include "$(..)misc/sys/uio.h"' |                         \
-       SUNPRO_DEPENDENCIES='$(@:st=dT) $@'                             \
-       $(CC) -D_LIBC=1 $(+includes) -E -dM -xc - | cat - >> $(@:st=hT)
-ifdef sed-remove-objpfx
-       sed $(sed-remove-objpfx) $(@:st=dT) > $(@:st=dt)
-       cat $(@:st=dt) >> $(@:st=d)
-else
-       cat $(@:st=dT) >> $(@:st=d)
-endif
-       fopen_max=`sed -n 's/^#define OPEN_MAX //1p' $(@:st=hT)`;       \
-       filename_max=`sed -n 's/^#define PATH_MAX //1p' $(@:st=hT)`;    \
-       iov_max=`sed -n 's/^#define UIO_MAXIOV //p' $(@:st=hT)`;        \
-       fopen_max=$${fopen_max:-16};                                    \
-       filename_max=$${filename_max:-1024};                            \
-       if [ -z $$iov_max ]; then                                       \
-         define_iov_max="# undef IOV_MAX";                             \
-       else                                                            \
-         define_iov_max="# define IOV_MAX $$iov_max";                  \
-       fi;                                                             \
-       sed -e "s/@FOPEN_MAX@/$$fopen_max/"                             \
-           -e "s/@FILENAME_MAX@/$$filename_max/"                       \
-           -e "s/@L_tmpnam@/$(L_tmpnam)/"                              \
-           -e "s/@TMP_MAX@/$(TMP_MAX)/"                                \
-           -e "s/@L_ctermid@/$(L_ctermid)/"                            \
-           -e "s/@L_cuserid@/$(L_cuserid)/"                            \
-           -e "s/@define_IOV_MAX@/$$define_iov_max/"                   \
-           $< > $(@:st=h.new)
-       $(move-if-change) $(@:st=h.new) $(@:st=h)
-# Remove these last so that they can be examined if something went wrong.
-       rm -f $(@:st=hT) $(@:st=dT) $(@:st=dt)
-       touch $@
-# Get dependencies.
-ifndef no_deps
--include $(stdio_lim:h=d)
-endif
-common-generated += bits/stdio_lim.h bits/stdio_lim.d bits/stdio_lim.st
-
 # Local Variables:
 # mode: makefile
 # End:
index 38819a3..c6320d8 100644 (file)
@@ -235,11 +235,12 @@ $(objpfx)librtld.os: $(objpfx)dl-allobjs.os $(objpfx)rtld-libc.a
 $(objpfx)ld.so: $(objpfx)librtld.os $(ld-map)
        @rm -f $@.lds
        $(LINK.o) -nostdlib -nostartfiles -shared                       \
-                 $(LDFLAGS-rtld) -Wl,--verbose 2>&1 |                  \
+                 $(LDFLAGS-rtld) -Wl,-z,defs -Wl,--verbose 2>&1 |      \
                  sed -e '/^=========/,/^=========/!d;/^=========/d'    \
                      -e 's/\. = 0 + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \
                  > $@.lds
-       $(LINK.o) -nostdlib -nostartfiles -shared -o $@ $(LDFLAGS-rtld) \
+       $(LINK.o) -nostdlib -nostartfiles -shared -o $@                 \
+                 $(LDFLAGS-rtld) -Wl,-z,defs                           \
                  $(filter-out $(map-file),$^) $(load-map-file)         \
                  -Wl,-soname=$(rtld-installed-name) -T $@.lds
        rm -f $@.lds
index b29656e..a315066 100644 (file)
@@ -17,6 +17,9 @@ NF >= 1 && !started {
   started = 1;
 }
 
+# Separator.
+$1 == "--" { next }
+
 NF == 1 { sub(/^.*$/, "& &"); }
 
 NF > 1 {
index 61e974f..fa21274 100644 (file)
@@ -20,6 +20,8 @@
 #include <unistd.h>
 #include <sys/types.h>
 
+/* Set nonzero if we have to be prepared for more then one libc being
+   used in the process.  Safe assumption if initializer never runs.  */
 int __libc_multiple_libcs attribute_hidden = 1;
 
 extern void __libc_init (int, char **, char **);