From 9ae10332179e1f3c4fafa2f93f27276ea4974b19 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 15 Jan 2003 08:08:20 +0000 Subject: [PATCH] * 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. --- ChangeLog | 27 +++++++ Makerules | 133 +++++++++++++++++++++++++++++------ Rules | 61 +--------------- elf/Makefile | 5 +- scripts/gen-as-const.awk | 3 + sysdeps/generic/init-first.c | 2 + 6 files changed, 149 insertions(+), 82 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7dd6e43545..c11f6e3e6e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,30 @@ +2003-01-14 Roland McGrath + + * 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 * manual/install.texi: Correct description of header preparation for diff --git a/Makerules b/Makerules index 8dc2282f46..97c20fd9dd 100644 --- 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' # 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 .PHONY: TAGS TAGS: $(objpfx)distinfo $(..)MakeTAGS diff --git a/Rules b/Rules index c2b3f79016..29370c8256 100644 --- 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: diff --git a/elf/Makefile b/elf/Makefile index 38819a3884..c6320d8867 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -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 diff --git a/scripts/gen-as-const.awk b/scripts/gen-as-const.awk index b29656ee71..a315066422 100644 --- a/scripts/gen-as-const.awk +++ b/scripts/gen-as-const.awk @@ -17,6 +17,9 @@ NF >= 1 && !started { started = 1; } +# Separator. +$1 == "--" { next } + NF == 1 { sub(/^.*$/, "& &"); } NF > 1 { diff --git a/sysdeps/generic/init-first.c b/sysdeps/generic/init-first.c index 61e974fdf6..fa21274c73 100644 --- a/sysdeps/generic/init-first.c +++ b/sysdeps/generic/init-first.c @@ -20,6 +20,8 @@ #include #include +/* 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 **);