Message ID | 20141001081613.GG2217@spoyarek.pnq.redhat.com |
---|---|
State | New |
Headers | show |
Ping! On Wed, Oct 01, 2014 at 01:46:13PM +0530, Siddhesh Poyarekar wrote: > Rebased on current master, the only change is an unnecessary > whitespace addition I had missed earlier. Ping! > > Siddhesh > > commit 3be0b793dc7e72fde3e2c728ca42541bd0a29c9c > Author: Siddhesh Poyarekar <siddhesh@redhat.com> > Date: Thu Aug 21 10:19:31 2014 +0530 > > Add new macro IN_MODULE to identify module in which source is built > > The current scheme to identify which module a translation unit is > built in depends on defining multiple macros IS_IN_* and also defining > NOT_IN_libc if we're building a non-libc module. In addition, there > is an IN_LIB macro that does effectively the same thing, but for > different modules (notably the systemtap probes). This macro scheme > unifies both ideas to use just one macro IN_MODULE and assign it a > value depending on the module it is being built into. If the module > is not defined, it defaults to MODULE_libc. > > Patches that follow will remove uses of IS_IN_* variables with the > IS_IN() macro. libc-symbols.h has been converted already to give an > example of how such a transition will look. > > Verified that there are no relevant source changes. One source change > that will crop up repeatedly is that of nscd_stat, since it uses the > build timestamp as a constant in its logic. > > * Makeconfig (in-module): Get value of libof set for the > translation unit. > (module-def): Set IN_MODULE based on value of libof-*. > (CPPFLAGS): Add $(module-def) to CPPFLAGS. > * Makerules: Don't suffix routine names for nonlib. > * include/libc-modules.h: New file. > * include/libc-symbols.h: Include libc-modules.h > (IS_IN): New macro to replace IS_IN_* macros. > * elf/Makefile: Set libof-* for each routine. > * elf/rtld-Rules: Likewise. > * extra-modules.mk: Likewise. > * iconv/Makefile: Likewise. > * iconvdata/Makefile: Likewise. > * locale/Makefile: Likewise. > * malloc/Makefile: Likewise. > * nss/Makefile: Likewise. > * sysdeps/gnu/Makefile: Likewise. > * sysdeps/ieee754/ldbl-opt/Makefile: Likewise. > * sysdeps/unix/sysv/linux/Makefile: Likewise. > * sysdeps/s390/s390-64/Makefile: Likewise. > * nscd/Makefile: Set libof-* for each routine. Set CFLAGS and > CPPFLAGS for nscd instead of nonlib. > > diff --git a/Makeconfig b/Makeconfig > index 24a3b82..671eceb 100644 > --- a/Makeconfig > +++ b/Makeconfig > @@ -813,6 +813,11 @@ endif # $(+cflags) == "" > # of many little headers in the include directory. > libio-include = -I$(..)libio > > +in-module = $(strip $(foreach lib,$(libof-$(basename $(@F))) $(libof-$(<F)) \ > + $(libof-$(@F)),-DIN_MODULE=MODULE_$(lib))) > + > +module-def = $(if $(in-module),$(in-module),-DIN_MODULE=MODULE_libc) > + > # These are the variables that the implicit compilation rules use. > # Note that we can't use -std=* in CPPFLAGS, because it overrides > # the implicit -lang-asm and breaks cpp behavior for .S files--notably > @@ -821,7 +826,7 @@ CPPFLAGS = $(config-extra-cppflags) $(CPPUNDEFS) $(CPPFLAGS-config) \ > $($(subdir)-CPPFLAGS) \ > $(+includes) $(defines) \ > -include $(..)include/libc-symbols.h $(sysdep-CPPFLAGS) \ > - $(CPPFLAGS-$(suffix $@)) \ > + $(CPPFLAGS-$(suffix $@)) $(module-def) \ > $(foreach lib,$(libof-$(basename $(@F))) \ > $(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \ > $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F))) > diff --git a/Makerules b/Makerules > index 3951bb1..3f4b55b 100644 > --- a/Makerules > +++ b/Makerules > @@ -1156,7 +1156,7 @@ xcheck: xtests > > all-nonlib = $(strip $(tests) $(xtests) $(test-srcs) $(test-extras) $(others)) > ifneq (,$(all-nonlib)) > -cpp-srcs-left = $(all-nonlib:=.c) $(all-nonlib:=.cc) > +cpp-srcs-left = $(all-nonlib) > lib := nonlib > include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > endif > diff --git a/elf/Makefile b/elf/Makefile > index 94074f3..6263a47 100644 > --- a/elf/Makefile > +++ b/elf/Makefile > @@ -436,7 +436,8 @@ $(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o) > > SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"' > CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \ > - -D'SLIBDIR="$(slibdir)"' -DIS_IN_ldconfig=1 > + -D'SLIBDIR="$(slibdir)"' -DIS_IN_ldconfig=1 -DNOT_IN_libc=1 > +libof-ldconfig = ldconfig > CFLAGS-dl-cache.c = $(SYSCONF-FLAGS) > CFLAGS-cache.c = $(SYSCONF-FLAGS) > CFLAGS-rtld.c = $(SYSCONF-FLAGS) > @@ -444,6 +445,10 @@ CFLAGS-rtld.c = $(SYSCONF-FLAGS) > CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ > -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld) > > +cpp-srcs-left := $(all-rtld-routines:=.os) > +lib := rtld > +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > + > test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names)))) > generated += $(addsuffix .so,$(strip $(modules-names))) > > diff --git a/elf/rtld-Rules b/elf/rtld-Rules > index 0a5d6af..4d78d90 100644 > --- a/elf/rtld-Rules > +++ b/elf/rtld-Rules > @@ -138,6 +138,11 @@ ifdef rtld-depfiles > -include $(rtld-depfiles) > endif > > +# Set libof-* for each routine. > +cpp-srcs-left := $(subst .os,,$(rtld-modules)) > +lib := rtld > +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > + > # This here is the whole point of all the shenanigans. > rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld > > diff --git a/extra-modules.mk b/extra-modules.mk > index c7ed850..9c2e4d2 100644 > --- a/extra-modules.mk > +++ b/extra-modules.mk > @@ -6,4 +6,5 @@ > module := $(firstword $(extra-modules-left)) > extra-modules-left := $(filter-out $(module),$(extra-modules-left)) > > +libof-$(notdir $(module)) := extramodules > CPPFLAGS-$(module).c += -DNOT_IN_libc > diff --git a/iconv/Makefile b/iconv/Makefile > index 48d17d7..8031a88 100644 > --- a/iconv/Makefile > +++ b/iconv/Makefile > @@ -52,11 +52,12 @@ CFLAGS-gconv_cache.c += -DGCONV_DIR='"$(gconvdir)"' > CFLAGS-gconv_conf.c = -DGCONV_PATH='"$(gconvdir)"' > CFLAGS-iconvconfig.c = -DGCONV_PATH='"$(gconvdir)"' -DGCONV_DIR='"$(gconvdir)"' > > -CPPFLAGS-iconv_charmap = -DNOT_IN_libc > -CPPFLAGS-linereader = -DNOT_IN_libc > -CPPFLAGS-strtab = -DNOT_IN_libc > -CPPFLAGS-charmap = -DNOT_IN_libc > -CPPFLAGS-charmap-dir = -DNOT_IN_libc > +CPPFLAGS-iconvprogs = -DNOT_IN_libc > + > +# Set libof-* for each routine. > +cpp-srcs-left := $(iconv_prog-modules) $(iconvconfig-modules) > +lib := iconvprogs > +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > > ifeq ($(run-built-tests),yes) > xtests-special += $(objpfx)test-iconvconfig.out > diff --git a/iconvdata/Makefile b/iconvdata/Makefile > index b6327d6..e0252ee 100644 > --- a/iconvdata/Makefile > +++ b/iconvdata/Makefile > @@ -211,6 +211,7 @@ $(objpfx)iconv-rules: Makefile > $(AWK) 'NR == 1 { \ > for (i = 1; i <= NF; i++) { \ > printf "%s-routines := %s\n", $$i, tolower($$i); \ > + printf "libof-%s := iconvdata\n", tolower($$i); \ > printf "%s-map := gconv.map\n", $$i; \ > } \ > }; \ > @@ -273,6 +274,11 @@ endif > > include ../Rules > > +# Set libof-* for each routine. > +cpp-srcs-left := $(modules) $(generated-modules) > +lib := iconvdata > +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > + > tst-loading-ENV = MALLOC_TRACE=$(objpfx)tst-loading.mtrace > $(objpfx)mtrace-tst-loading.out: $(objpfx)tst-loading.out > $(common-objpfx)malloc/mtrace $(objpfx)tst-loading.mtrace > $@; \ > diff --git a/include/libc-modules.h b/include/libc-modules.h > new file mode 100644 > index 0000000..d12fb90 > --- /dev/null > +++ b/include/libc-modules.h > @@ -0,0 +1,37 @@ > +#define MODULE_libc 1 > +#define MODULE_libpthread 2 > +#define MODULE_rtld 3 > +#define MODULE_libdl 4 > +#define MODULE_libm 5 > +#define MODULE_iconvprogs 6 > +#define MODULE_iconvdata 7 > +#define MODULE_lddlibc4 8 > +#define MODULE_locale_programs 9 > +#define MODULE_memusagestat 10 > +#define MODULE_libutil 12 > +#define MODULE_libBrokenLocale 13 > +#define MODULE_libmemusage 15 > +#define MODULE_libresolv 16 > +#define MODULE_libnss_db 17 > +#define MODULE_libnss_files 18 > +#define MODULE_libnss_dns 19 > +#define MODULE_libnss_compat 20 > +#define MODULE_libnss_hesiod 21 > +#define MODULE_libnss_nis 22 > +#define MODULE_libnss_nisplus 23 > +#define MODULE_libanl 24 > +#define MODULE_librt 25 > +#define MODULE_libSegFault 26 > +#define MODULE_libthread_db 27 > +#define MODULE_libcidn 28 > +#define MODULE_libcrypt 29 > +#define MODULE_libnsl 30 > +#define MODULE_libpcprofile 31 > +#define MODULE_librpcsvc 32 > +#define MODULE_nscd 33 > +#define MODULE_ldconfig 34 > +#define MODULE_libnldbl 35 > + > +/* Catch-all for test modules and other binaries. */ > +#define MODULE_nonlib 98 > +#define MODULE_extramodules 99 > diff --git a/include/libc-symbols.h b/include/libc-symbols.h > index d4ab1f3..131d7eb 100644 > --- a/include/libc-symbols.h > +++ b/include/libc-symbols.h > @@ -20,6 +20,10 @@ > #ifndef _LIBC_SYMBOLS_H > #define _LIBC_SYMBOLS_H 1 > > +#include "libc-modules.h" > + > +#define IS_IN(lib) (IN_MODULE == MODULE_##lib) > + > /* This file's macros are included implicitly in the compilation of every > file in the C library by -imacros. > > @@ -468,7 +472,7 @@ for linking") > If the function should be internal to multiple objects, say ld.so and > libc.so, the best way is to use: > > - #if !defined NOT_IN_libc || defined IS_IN_rtld > + #if IS_IN (libc) || IS_IN (rtld) > hidden_proto (foo) > #endif > > @@ -584,7 +588,7 @@ for linking") > # define libc_hidden_data_ver(local, name) > #endif > > -#ifdef IS_IN_rtld > +#if IS_IN (rtld) > # define rtld_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > # define rtld_hidden_tls_proto(name, attrs...) hidden_tls_proto (name, ##attrs) > # define rtld_hidden_def(name) hidden_def (name) > @@ -604,7 +608,7 @@ for linking") > # define rtld_hidden_data_ver(local, name) > #endif > > -#ifdef IS_IN_libm > +#if IS_IN (libm) > # define libm_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > # define libm_hidden_tls_proto(name, attrs...) hidden_tls_proto (name, ##attrs) > # define libm_hidden_def(name) hidden_def (name) > @@ -624,7 +628,7 @@ for linking") > # define libm_hidden_data_ver(local, name) > #endif > > -#ifdef IS_IN_libresolv > +#if IS_IN (libresolv) > # define libresolv_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > # define libresolv_hidden_tls_proto(name, attrs...) \ > hidden_tls_proto (name, ##attrs) > @@ -645,7 +649,7 @@ for linking") > # define libresolv_hidden_data_ver(local, name) > #endif > > -#ifdef IS_IN_librt > +#if IS_IN (librt) > # define librt_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > # define librt_hidden_tls_proto(name, attrs...) \ > hidden_tls_proto (name, ##attrs) > @@ -666,7 +670,7 @@ for linking") > # define librt_hidden_data_ver(local, name) > #endif > > -#ifdef IS_IN_libdl > +#if IS_IN (libdl) > # define libdl_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > # define libdl_hidden_tls_proto(name, attrs...) \ > hidden_tls_proto (name, ##attrs) > @@ -687,7 +691,7 @@ for linking") > # define libdl_hidden_data_ver(local, name) > #endif > > -#ifdef IS_IN_libnss_files > +#if IS_IN (libnss_files) > # define libnss_files_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > # define libnss_files_hidden_tls_proto(name, attrs...) \ > hidden_tls_proto (name, ##attrs) > @@ -708,7 +712,7 @@ for linking") > # define libnss_files_hidden_data_ver(local, name) > #endif > > -#ifdef IS_IN_libnsl > +#if IS_IN (libnsl) > # define libnsl_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > # define libnsl_hidden_tls_proto(name, attrs...) \ > hidden_tls_proto (name, ##attrs) > @@ -729,7 +733,7 @@ for linking") > # define libnsl_hidden_data_ver(local, name) > #endif > > -#ifdef IS_IN_libnss_nisplus > +#if IS_IN (libnss_nisplus) > # define libnss_nisplus_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > # define libnss_nisplus_hidden_tls_proto(name, attrs...) \ > hidden_tls_proto (name, ##attrs) > @@ -758,7 +762,7 @@ for linking") > # define HIDDEN_BUILTIN_JUMPTARGET(name) HIDDEN_JUMPTARGET(name) > #endif > > -#ifdef IS_IN_libutil > +#if IS_IN (libutil) > # define libutil_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > # define libutil_hidden_tls_proto(name, attrs...) \ > hidden_tls_proto (name, ##attrs) > diff --git a/locale/Makefile b/locale/Makefile > index e4c3878..5cd18e0 100644 > --- a/locale/Makefile > +++ b/locale/Makefile > @@ -85,7 +85,7 @@ locale-CPPFLAGS = -DLOCALEDIR='"$(localedir)"' \ > -DLOCALE_ALIAS_PATH='"$(msgcatdir)"' \ > -Iprograms > > -CPPFLAGS-locale-programs = -DLOCALE_PATH='$(localepath)' \ > +CPPFLAGS-locale_programs = -DLOCALE_PATH='$(localepath)' \ > -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \ > -DREPERTOIREMAP_PATH='"$(i18ndir)/repertoiremaps"' \ > -DLOCSRCDIR='"$(i18ndir)/locales"' \ > @@ -96,7 +96,7 @@ CFLAGS-locfile.c = -Wno-write-strings -Wno-char-subscripts > CFLAGS-charmap-dir.c = -Wno-write-strings > > # This makes sure -DNOT_IN_libc et al are passed for all these modules. > -cpp-srcs-left := $(addsuffix .c,$(localedef-modules) $(localedef-aux) \ > - $(locale-modules) $(lib-modules)) > -lib := locale-programs > +cpp-srcs-left := $(localedef-modules) $(localedef-aux) $(locale-modules) \ > + $(lib-modules) > +lib := locale_programs > include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > diff --git a/malloc/Makefile b/malloc/Makefile > index 9e93523..fbfada2 100644 > --- a/malloc/Makefile > +++ b/malloc/Makefile > @@ -89,6 +89,11 @@ endif > do-memusagestat: $(objpfx)memusagestat > > memusagestat-modules = memusagestat > + > +cpp-srcs-left := $(memusagestat-modules) > +lib := memusagestat > +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > + > $(objpfx)memusagestat: $(memusagestat-modules:%=$(objpfx)%.o) > $(LINK.o) -o $@ $^ $(libgd-LDFLAGS) -lgd -lpng -lz -lm > > diff --git a/nscd/Makefile b/nscd/Makefile > index 639d87b..7ab4e9d 100644 > --- a/nscd/Makefile > +++ b/nscd/Makefile > @@ -79,23 +79,22 @@ CFLAGS-nscd_gethst_r.c = -fexceptions > CFLAGS-nscd_getai.c = -fexceptions > CFLAGS-nscd_initgroups.c = -fexceptions > > -CPPFLAGS-nonlib += -DIS_IN_nscd=1 -D_FORTIFY_SOURCE=2 > +CPPFLAGS-nscd += -DIS_IN_nscd=1 -D_FORTIFY_SOURCE=2 -DNOT_IN_libc=1 > > ifeq (yesyes,$(have-fpie)$(build-shared)) > -CFLAGS-nonlib += $(pie-ccflag) > +CFLAGS-nscd += $(pie-ccflag) > endif > ifeq (yes,$(have-ssp)) > -CFLAGS-nonlib += -fstack-protector > +CFLAGS-nscd += -fstack-protector > endif > > ifeq (yesyes,$(have-fpie)$(build-shared)) > LDFLAGS-nscd = -Wl,-z,now > endif > > -# This makes sure CPPFLAGS-nonlib and CFLAGS-nonlib are passed > -# for all these modules. > -cpp-srcs-left := $(nscd-modules:=.c) > -lib := nonlib > +# Set libof-nscd. > +cpp-srcs-left := $(nscd-modules) > +lib := nscd > include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > > $(objpfx)nscd: $(nscd-modules:%=$(objpfx)%.o) > diff --git a/nss/Makefile b/nss/Makefile > index 1fa7f1f..7114d74 100644 > --- a/nss/Makefile > +++ b/nss/Makefile > @@ -105,7 +105,8 @@ $(objpfx)makedb: $(makedb-modules:%=$(objpfx)%.o) > $(inst_vardbdir)/Makefile: db-Makefile $(+force) > $(do-install) > > -CFLAGS-nss_test1.c = -DNOT_IN_libc=1 > +libof-nss_test1 = extramodules > +CPPFLAGS-nss_test1 = -DNOT_IN_libc=1 > $(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(link-libc-deps) > $(build-module) > ifdef libnss_test1.so-version > diff --git a/stdlib/Makefile b/stdlib/Makefile > index 9b2271b..da6e076 100644 > --- a/stdlib/Makefile > +++ b/stdlib/Makefile > @@ -145,6 +145,7 @@ LDFLAGS-tst-putenv = $(no-as-needed) > > $(objpfx)tst-putenvmod.so: $(objpfx)tst-putenvmod.os $(link-libc-deps) > $(build-module) > +libof-tst-putenvmod = extramodules > CFLAGS-tst-putenvmod.c = -DNOT_IN_libc=1 > > $(objpfx)bug-getcontext: $(libm) > diff --git a/sysdeps/gnu/Makefile b/sysdeps/gnu/Makefile > index c05708d..b5b2cf0 100644 > --- a/sysdeps/gnu/Makefile > +++ b/sysdeps/gnu/Makefile > @@ -29,6 +29,8 @@ ifeq ($(subdir),stdio-common) > > errlist-c = $(firstword $(wildcard $(addsuffix /errlist.c,$(sysdirs) .))) > > +libof-errlist-compat = extramodules > + > ifeq ($(build-shared),yes) > $(objpfx)errlist-compat.c: $(errlist-c) $(..)sysdeps/gnu/errlist-compat.awk \ > $(common-objpfx)Versions.v.i $(before-compile) > diff --git a/sysdeps/s390/s390-64/Makefile b/sysdeps/s390/s390-64/Makefile > index fe5030e..ce4f0c5 100644 > --- a/sysdeps/s390/s390-64/Makefile > +++ b/sysdeps/s390/s390-64/Makefile > @@ -28,6 +28,10 @@ s390x-iconv-modules = ISO-8859-1_CP037_Z900 UTF8_UTF16_Z9 UTF16_UTF32_Z9 UTF8_UT > extra-modules-left += $(s390x-iconv-modules) > include extra-module.mk > > +cpp-srcs-left := $(foreach mod,$(s390x-iconv-modules),$($(mod)-routines)) > +lib := iconvdata > +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > + > extra-objs += $(addsuffix .so, $(s390x-iconv-modules)) > install-others += $(patsubst %, $(inst_gconvdir)/%.so, $(s390x-iconv-modules)) > > diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile > index 9ad6d22..2d6d8bb 100644 > --- a/sysdeps/unix/sysv/linux/Makefile > +++ b/sysdeps/unix/sysv/linux/Makefile > @@ -178,6 +178,7 @@ ifeq ($(subdir),elf) > sysdep-rtld-routines += dl-brk dl-sbrk dl-getcwd dl-openat64 dl-opendir \ > dl-fxstatat64 > > +libof-lddlibc4 = lddlibc4 > CPPFLAGS-lddlibc4 += -DNOT_IN_libc > > others += pldd
Ping! On Tue, Oct 14, 2014 at 09:50:34PM +0530, Siddhesh Poyarekar wrote: > Ping! > > On Wed, Oct 01, 2014 at 01:46:13PM +0530, Siddhesh Poyarekar wrote: > > Rebased on current master, the only change is an unnecessary > > whitespace addition I had missed earlier. Ping! > > > > Siddhesh > > > > commit 3be0b793dc7e72fde3e2c728ca42541bd0a29c9c > > Author: Siddhesh Poyarekar <siddhesh@redhat.com> > > Date: Thu Aug 21 10:19:31 2014 +0530 > > > > Add new macro IN_MODULE to identify module in which source is built > > > > The current scheme to identify which module a translation unit is > > built in depends on defining multiple macros IS_IN_* and also defining > > NOT_IN_libc if we're building a non-libc module. In addition, there > > is an IN_LIB macro that does effectively the same thing, but for > > different modules (notably the systemtap probes). This macro scheme > > unifies both ideas to use just one macro IN_MODULE and assign it a > > value depending on the module it is being built into. If the module > > is not defined, it defaults to MODULE_libc. > > > > Patches that follow will remove uses of IS_IN_* variables with the > > IS_IN() macro. libc-symbols.h has been converted already to give an > > example of how such a transition will look. > > > > Verified that there are no relevant source changes. One source change > > that will crop up repeatedly is that of nscd_stat, since it uses the > > build timestamp as a constant in its logic. > > > > * Makeconfig (in-module): Get value of libof set for the > > translation unit. > > (module-def): Set IN_MODULE based on value of libof-*. > > (CPPFLAGS): Add $(module-def) to CPPFLAGS. > > * Makerules: Don't suffix routine names for nonlib. > > * include/libc-modules.h: New file. > > * include/libc-symbols.h: Include libc-modules.h > > (IS_IN): New macro to replace IS_IN_* macros. > > * elf/Makefile: Set libof-* for each routine. > > * elf/rtld-Rules: Likewise. > > * extra-modules.mk: Likewise. > > * iconv/Makefile: Likewise. > > * iconvdata/Makefile: Likewise. > > * locale/Makefile: Likewise. > > * malloc/Makefile: Likewise. > > * nss/Makefile: Likewise. > > * sysdeps/gnu/Makefile: Likewise. > > * sysdeps/ieee754/ldbl-opt/Makefile: Likewise. > > * sysdeps/unix/sysv/linux/Makefile: Likewise. > > * sysdeps/s390/s390-64/Makefile: Likewise. > > * nscd/Makefile: Set libof-* for each routine. Set CFLAGS and > > CPPFLAGS for nscd instead of nonlib. > > > > diff --git a/Makeconfig b/Makeconfig > > index 24a3b82..671eceb 100644 > > --- a/Makeconfig > > +++ b/Makeconfig > > @@ -813,6 +813,11 @@ endif # $(+cflags) == "" > > # of many little headers in the include directory. > > libio-include = -I$(..)libio > > > > +in-module = $(strip $(foreach lib,$(libof-$(basename $(@F))) $(libof-$(<F)) \ > > + $(libof-$(@F)),-DIN_MODULE=MODULE_$(lib))) > > + > > +module-def = $(if $(in-module),$(in-module),-DIN_MODULE=MODULE_libc) > > + > > # These are the variables that the implicit compilation rules use. > > # Note that we can't use -std=* in CPPFLAGS, because it overrides > > # the implicit -lang-asm and breaks cpp behavior for .S files--notably > > @@ -821,7 +826,7 @@ CPPFLAGS = $(config-extra-cppflags) $(CPPUNDEFS) $(CPPFLAGS-config) \ > > $($(subdir)-CPPFLAGS) \ > > $(+includes) $(defines) \ > > -include $(..)include/libc-symbols.h $(sysdep-CPPFLAGS) \ > > - $(CPPFLAGS-$(suffix $@)) \ > > + $(CPPFLAGS-$(suffix $@)) $(module-def) \ > > $(foreach lib,$(libof-$(basename $(@F))) \ > > $(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \ > > $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F))) > > diff --git a/Makerules b/Makerules > > index 3951bb1..3f4b55b 100644 > > --- a/Makerules > > +++ b/Makerules > > @@ -1156,7 +1156,7 @@ xcheck: xtests > > > > all-nonlib = $(strip $(tests) $(xtests) $(test-srcs) $(test-extras) $(others)) > > ifneq (,$(all-nonlib)) > > -cpp-srcs-left = $(all-nonlib:=.c) $(all-nonlib:=.cc) > > +cpp-srcs-left = $(all-nonlib) > > lib := nonlib > > include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > > endif > > diff --git a/elf/Makefile b/elf/Makefile > > index 94074f3..6263a47 100644 > > --- a/elf/Makefile > > +++ b/elf/Makefile > > @@ -436,7 +436,8 @@ $(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o) > > > > SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"' > > CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \ > > - -D'SLIBDIR="$(slibdir)"' -DIS_IN_ldconfig=1 > > + -D'SLIBDIR="$(slibdir)"' -DIS_IN_ldconfig=1 -DNOT_IN_libc=1 > > +libof-ldconfig = ldconfig > > CFLAGS-dl-cache.c = $(SYSCONF-FLAGS) > > CFLAGS-cache.c = $(SYSCONF-FLAGS) > > CFLAGS-rtld.c = $(SYSCONF-FLAGS) > > @@ -444,6 +445,10 @@ CFLAGS-rtld.c = $(SYSCONF-FLAGS) > > CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ > > -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld) > > > > +cpp-srcs-left := $(all-rtld-routines:=.os) > > +lib := rtld > > +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > > + > > test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names)))) > > generated += $(addsuffix .so,$(strip $(modules-names))) > > > > diff --git a/elf/rtld-Rules b/elf/rtld-Rules > > index 0a5d6af..4d78d90 100644 > > --- a/elf/rtld-Rules > > +++ b/elf/rtld-Rules > > @@ -138,6 +138,11 @@ ifdef rtld-depfiles > > -include $(rtld-depfiles) > > endif > > > > +# Set libof-* for each routine. > > +cpp-srcs-left := $(subst .os,,$(rtld-modules)) > > +lib := rtld > > +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > > + > > # This here is the whole point of all the shenanigans. > > rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld > > > > diff --git a/extra-modules.mk b/extra-modules.mk > > index c7ed850..9c2e4d2 100644 > > --- a/extra-modules.mk > > +++ b/extra-modules.mk > > @@ -6,4 +6,5 @@ > > module := $(firstword $(extra-modules-left)) > > extra-modules-left := $(filter-out $(module),$(extra-modules-left)) > > > > +libof-$(notdir $(module)) := extramodules > > CPPFLAGS-$(module).c += -DNOT_IN_libc > > diff --git a/iconv/Makefile b/iconv/Makefile > > index 48d17d7..8031a88 100644 > > --- a/iconv/Makefile > > +++ b/iconv/Makefile > > @@ -52,11 +52,12 @@ CFLAGS-gconv_cache.c += -DGCONV_DIR='"$(gconvdir)"' > > CFLAGS-gconv_conf.c = -DGCONV_PATH='"$(gconvdir)"' > > CFLAGS-iconvconfig.c = -DGCONV_PATH='"$(gconvdir)"' -DGCONV_DIR='"$(gconvdir)"' > > > > -CPPFLAGS-iconv_charmap = -DNOT_IN_libc > > -CPPFLAGS-linereader = -DNOT_IN_libc > > -CPPFLAGS-strtab = -DNOT_IN_libc > > -CPPFLAGS-charmap = -DNOT_IN_libc > > -CPPFLAGS-charmap-dir = -DNOT_IN_libc > > +CPPFLAGS-iconvprogs = -DNOT_IN_libc > > + > > +# Set libof-* for each routine. > > +cpp-srcs-left := $(iconv_prog-modules) $(iconvconfig-modules) > > +lib := iconvprogs > > +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > > > > ifeq ($(run-built-tests),yes) > > xtests-special += $(objpfx)test-iconvconfig.out > > diff --git a/iconvdata/Makefile b/iconvdata/Makefile > > index b6327d6..e0252ee 100644 > > --- a/iconvdata/Makefile > > +++ b/iconvdata/Makefile > > @@ -211,6 +211,7 @@ $(objpfx)iconv-rules: Makefile > > $(AWK) 'NR == 1 { \ > > for (i = 1; i <= NF; i++) { \ > > printf "%s-routines := %s\n", $$i, tolower($$i); \ > > + printf "libof-%s := iconvdata\n", tolower($$i); \ > > printf "%s-map := gconv.map\n", $$i; \ > > } \ > > }; \ > > @@ -273,6 +274,11 @@ endif > > > > include ../Rules > > > > +# Set libof-* for each routine. > > +cpp-srcs-left := $(modules) $(generated-modules) > > +lib := iconvdata > > +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > > + > > tst-loading-ENV = MALLOC_TRACE=$(objpfx)tst-loading.mtrace > > $(objpfx)mtrace-tst-loading.out: $(objpfx)tst-loading.out > > $(common-objpfx)malloc/mtrace $(objpfx)tst-loading.mtrace > $@; \ > > diff --git a/include/libc-modules.h b/include/libc-modules.h > > new file mode 100644 > > index 0000000..d12fb90 > > --- /dev/null > > +++ b/include/libc-modules.h > > @@ -0,0 +1,37 @@ > > +#define MODULE_libc 1 > > +#define MODULE_libpthread 2 > > +#define MODULE_rtld 3 > > +#define MODULE_libdl 4 > > +#define MODULE_libm 5 > > +#define MODULE_iconvprogs 6 > > +#define MODULE_iconvdata 7 > > +#define MODULE_lddlibc4 8 > > +#define MODULE_locale_programs 9 > > +#define MODULE_memusagestat 10 > > +#define MODULE_libutil 12 > > +#define MODULE_libBrokenLocale 13 > > +#define MODULE_libmemusage 15 > > +#define MODULE_libresolv 16 > > +#define MODULE_libnss_db 17 > > +#define MODULE_libnss_files 18 > > +#define MODULE_libnss_dns 19 > > +#define MODULE_libnss_compat 20 > > +#define MODULE_libnss_hesiod 21 > > +#define MODULE_libnss_nis 22 > > +#define MODULE_libnss_nisplus 23 > > +#define MODULE_libanl 24 > > +#define MODULE_librt 25 > > +#define MODULE_libSegFault 26 > > +#define MODULE_libthread_db 27 > > +#define MODULE_libcidn 28 > > +#define MODULE_libcrypt 29 > > +#define MODULE_libnsl 30 > > +#define MODULE_libpcprofile 31 > > +#define MODULE_librpcsvc 32 > > +#define MODULE_nscd 33 > > +#define MODULE_ldconfig 34 > > +#define MODULE_libnldbl 35 > > + > > +/* Catch-all for test modules and other binaries. */ > > +#define MODULE_nonlib 98 > > +#define MODULE_extramodules 99 > > diff --git a/include/libc-symbols.h b/include/libc-symbols.h > > index d4ab1f3..131d7eb 100644 > > --- a/include/libc-symbols.h > > +++ b/include/libc-symbols.h > > @@ -20,6 +20,10 @@ > > #ifndef _LIBC_SYMBOLS_H > > #define _LIBC_SYMBOLS_H 1 > > > > +#include "libc-modules.h" > > + > > +#define IS_IN(lib) (IN_MODULE == MODULE_##lib) > > + > > /* This file's macros are included implicitly in the compilation of every > > file in the C library by -imacros. > > > > @@ -468,7 +472,7 @@ for linking") > > If the function should be internal to multiple objects, say ld.so and > > libc.so, the best way is to use: > > > > - #if !defined NOT_IN_libc || defined IS_IN_rtld > > + #if IS_IN (libc) || IS_IN (rtld) > > hidden_proto (foo) > > #endif > > > > @@ -584,7 +588,7 @@ for linking") > > # define libc_hidden_data_ver(local, name) > > #endif > > > > -#ifdef IS_IN_rtld > > +#if IS_IN (rtld) > > # define rtld_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > > # define rtld_hidden_tls_proto(name, attrs...) hidden_tls_proto (name, ##attrs) > > # define rtld_hidden_def(name) hidden_def (name) > > @@ -604,7 +608,7 @@ for linking") > > # define rtld_hidden_data_ver(local, name) > > #endif > > > > -#ifdef IS_IN_libm > > +#if IS_IN (libm) > > # define libm_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > > # define libm_hidden_tls_proto(name, attrs...) hidden_tls_proto (name, ##attrs) > > # define libm_hidden_def(name) hidden_def (name) > > @@ -624,7 +628,7 @@ for linking") > > # define libm_hidden_data_ver(local, name) > > #endif > > > > -#ifdef IS_IN_libresolv > > +#if IS_IN (libresolv) > > # define libresolv_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > > # define libresolv_hidden_tls_proto(name, attrs...) \ > > hidden_tls_proto (name, ##attrs) > > @@ -645,7 +649,7 @@ for linking") > > # define libresolv_hidden_data_ver(local, name) > > #endif > > > > -#ifdef IS_IN_librt > > +#if IS_IN (librt) > > # define librt_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > > # define librt_hidden_tls_proto(name, attrs...) \ > > hidden_tls_proto (name, ##attrs) > > @@ -666,7 +670,7 @@ for linking") > > # define librt_hidden_data_ver(local, name) > > #endif > > > > -#ifdef IS_IN_libdl > > +#if IS_IN (libdl) > > # define libdl_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > > # define libdl_hidden_tls_proto(name, attrs...) \ > > hidden_tls_proto (name, ##attrs) > > @@ -687,7 +691,7 @@ for linking") > > # define libdl_hidden_data_ver(local, name) > > #endif > > > > -#ifdef IS_IN_libnss_files > > +#if IS_IN (libnss_files) > > # define libnss_files_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > > # define libnss_files_hidden_tls_proto(name, attrs...) \ > > hidden_tls_proto (name, ##attrs) > > @@ -708,7 +712,7 @@ for linking") > > # define libnss_files_hidden_data_ver(local, name) > > #endif > > > > -#ifdef IS_IN_libnsl > > +#if IS_IN (libnsl) > > # define libnsl_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > > # define libnsl_hidden_tls_proto(name, attrs...) \ > > hidden_tls_proto (name, ##attrs) > > @@ -729,7 +733,7 @@ for linking") > > # define libnsl_hidden_data_ver(local, name) > > #endif > > > > -#ifdef IS_IN_libnss_nisplus > > +#if IS_IN (libnss_nisplus) > > # define libnss_nisplus_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > > # define libnss_nisplus_hidden_tls_proto(name, attrs...) \ > > hidden_tls_proto (name, ##attrs) > > @@ -758,7 +762,7 @@ for linking") > > # define HIDDEN_BUILTIN_JUMPTARGET(name) HIDDEN_JUMPTARGET(name) > > #endif > > > > -#ifdef IS_IN_libutil > > +#if IS_IN (libutil) > > # define libutil_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) > > # define libutil_hidden_tls_proto(name, attrs...) \ > > hidden_tls_proto (name, ##attrs) > > diff --git a/locale/Makefile b/locale/Makefile > > index e4c3878..5cd18e0 100644 > > --- a/locale/Makefile > > +++ b/locale/Makefile > > @@ -85,7 +85,7 @@ locale-CPPFLAGS = -DLOCALEDIR='"$(localedir)"' \ > > -DLOCALE_ALIAS_PATH='"$(msgcatdir)"' \ > > -Iprograms > > > > -CPPFLAGS-locale-programs = -DLOCALE_PATH='$(localepath)' \ > > +CPPFLAGS-locale_programs = -DLOCALE_PATH='$(localepath)' \ > > -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \ > > -DREPERTOIREMAP_PATH='"$(i18ndir)/repertoiremaps"' \ > > -DLOCSRCDIR='"$(i18ndir)/locales"' \ > > @@ -96,7 +96,7 @@ CFLAGS-locfile.c = -Wno-write-strings -Wno-char-subscripts > > CFLAGS-charmap-dir.c = -Wno-write-strings > > > > # This makes sure -DNOT_IN_libc et al are passed for all these modules. > > -cpp-srcs-left := $(addsuffix .c,$(localedef-modules) $(localedef-aux) \ > > - $(locale-modules) $(lib-modules)) > > -lib := locale-programs > > +cpp-srcs-left := $(localedef-modules) $(localedef-aux) $(locale-modules) \ > > + $(lib-modules) > > +lib := locale_programs > > include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > > diff --git a/malloc/Makefile b/malloc/Makefile > > index 9e93523..fbfada2 100644 > > --- a/malloc/Makefile > > +++ b/malloc/Makefile > > @@ -89,6 +89,11 @@ endif > > do-memusagestat: $(objpfx)memusagestat > > > > memusagestat-modules = memusagestat > > + > > +cpp-srcs-left := $(memusagestat-modules) > > +lib := memusagestat > > +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > > + > > $(objpfx)memusagestat: $(memusagestat-modules:%=$(objpfx)%.o) > > $(LINK.o) -o $@ $^ $(libgd-LDFLAGS) -lgd -lpng -lz -lm > > > > diff --git a/nscd/Makefile b/nscd/Makefile > > index 639d87b..7ab4e9d 100644 > > --- a/nscd/Makefile > > +++ b/nscd/Makefile > > @@ -79,23 +79,22 @@ CFLAGS-nscd_gethst_r.c = -fexceptions > > CFLAGS-nscd_getai.c = -fexceptions > > CFLAGS-nscd_initgroups.c = -fexceptions > > > > -CPPFLAGS-nonlib += -DIS_IN_nscd=1 -D_FORTIFY_SOURCE=2 > > +CPPFLAGS-nscd += -DIS_IN_nscd=1 -D_FORTIFY_SOURCE=2 -DNOT_IN_libc=1 > > > > ifeq (yesyes,$(have-fpie)$(build-shared)) > > -CFLAGS-nonlib += $(pie-ccflag) > > +CFLAGS-nscd += $(pie-ccflag) > > endif > > ifeq (yes,$(have-ssp)) > > -CFLAGS-nonlib += -fstack-protector > > +CFLAGS-nscd += -fstack-protector > > endif > > > > ifeq (yesyes,$(have-fpie)$(build-shared)) > > LDFLAGS-nscd = -Wl,-z,now > > endif > > > > -# This makes sure CPPFLAGS-nonlib and CFLAGS-nonlib are passed > > -# for all these modules. > > -cpp-srcs-left := $(nscd-modules:=.c) > > -lib := nonlib > > +# Set libof-nscd. > > +cpp-srcs-left := $(nscd-modules) > > +lib := nscd > > include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > > > > $(objpfx)nscd: $(nscd-modules:%=$(objpfx)%.o) > > diff --git a/nss/Makefile b/nss/Makefile > > index 1fa7f1f..7114d74 100644 > > --- a/nss/Makefile > > +++ b/nss/Makefile > > @@ -105,7 +105,8 @@ $(objpfx)makedb: $(makedb-modules:%=$(objpfx)%.o) > > $(inst_vardbdir)/Makefile: db-Makefile $(+force) > > $(do-install) > > > > -CFLAGS-nss_test1.c = -DNOT_IN_libc=1 > > +libof-nss_test1 = extramodules > > +CPPFLAGS-nss_test1 = -DNOT_IN_libc=1 > > $(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(link-libc-deps) > > $(build-module) > > ifdef libnss_test1.so-version > > diff --git a/stdlib/Makefile b/stdlib/Makefile > > index 9b2271b..da6e076 100644 > > --- a/stdlib/Makefile > > +++ b/stdlib/Makefile > > @@ -145,6 +145,7 @@ LDFLAGS-tst-putenv = $(no-as-needed) > > > > $(objpfx)tst-putenvmod.so: $(objpfx)tst-putenvmod.os $(link-libc-deps) > > $(build-module) > > +libof-tst-putenvmod = extramodules > > CFLAGS-tst-putenvmod.c = -DNOT_IN_libc=1 > > > > $(objpfx)bug-getcontext: $(libm) > > diff --git a/sysdeps/gnu/Makefile b/sysdeps/gnu/Makefile > > index c05708d..b5b2cf0 100644 > > --- a/sysdeps/gnu/Makefile > > +++ b/sysdeps/gnu/Makefile > > @@ -29,6 +29,8 @@ ifeq ($(subdir),stdio-common) > > > > errlist-c = $(firstword $(wildcard $(addsuffix /errlist.c,$(sysdirs) .))) > > > > +libof-errlist-compat = extramodules > > + > > ifeq ($(build-shared),yes) > > $(objpfx)errlist-compat.c: $(errlist-c) $(..)sysdeps/gnu/errlist-compat.awk \ > > $(common-objpfx)Versions.v.i $(before-compile) > > diff --git a/sysdeps/s390/s390-64/Makefile b/sysdeps/s390/s390-64/Makefile > > index fe5030e..ce4f0c5 100644 > > --- a/sysdeps/s390/s390-64/Makefile > > +++ b/sysdeps/s390/s390-64/Makefile > > @@ -28,6 +28,10 @@ s390x-iconv-modules = ISO-8859-1_CP037_Z900 UTF8_UTF16_Z9 UTF16_UTF32_Z9 UTF8_UT > > extra-modules-left += $(s390x-iconv-modules) > > include extra-module.mk > > > > +cpp-srcs-left := $(foreach mod,$(s390x-iconv-modules),$($(mod)-routines)) > > +lib := iconvdata > > +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) > > + > > extra-objs += $(addsuffix .so, $(s390x-iconv-modules)) > > install-others += $(patsubst %, $(inst_gconvdir)/%.so, $(s390x-iconv-modules)) > > > > diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile > > index 9ad6d22..2d6d8bb 100644 > > --- a/sysdeps/unix/sysv/linux/Makefile > > +++ b/sysdeps/unix/sysv/linux/Makefile > > @@ -178,6 +178,7 @@ ifeq ($(subdir),elf) > > sysdep-rtld-routines += dl-brk dl-sbrk dl-getcwd dl-openat64 dl-opendir \ > > dl-fxstatat64 > > > > +libof-lddlibc4 = lddlibc4 > > CPPFLAGS-lddlibc4 += -DNOT_IN_libc > > > > others += pldd > >
> Patches that follow will remove uses of IS_IN_* variables with the s/remove/replace/ > Verified that there are no relevant source changes. One source change > that will crop up repeatedly is that of nscd_stat, since it uses the > build timestamp as a constant in its logic. s/source/binary/ > +in-module = $(strip $(foreach lib,$(libof-$(basename $(@F))) $(libof-$(<F)) \ > + $(libof-$(@F)),-DIN_MODULE=MODULE_$(lib))) I think you can make this: in-module = $(firstword $(libof-$(basename $(@F))) \ $(libof-$(<F)) \ $(libof-$(@F)) libc) There should never be more than one nonempty libof-* expansion unless it's multiple that are the same. Also don't repeat the fixed parts (i.e. -DIN_MODULE=MODULE_). > - $(CPPFLAGS-$(suffix $@)) \ > + $(CPPFLAGS-$(suffix $@)) $(module-def) \ Here just use -DIN_MODULE=MODULE_$(in-module) directly. > diff --git a/elf/rtld-Rules b/elf/rtld-Rules > index 0a5d6af..4d78d90 100644 > --- a/elf/rtld-Rules > +++ b/elf/rtld-Rules > @@ -138,6 +138,11 @@ ifdef rtld-depfiles > -include $(rtld-depfiles) > endif > > +# Set libof-* for each routine. > +cpp-srcs-left := $(subst .os,,$(rtld-modules)) Use $(rtld-modules:%.os=%) (or patsubst if you prefer). Plain subst will eat .os out of the middle of a name, which is wrong. > --- /dev/null > +++ b/include/libc-modules.h Even though it's just for a brief window of the revision history, please put a comment in this file saying it should/will be generated. > +#include "libc-modules.h" Use <>. Add a short comment saying that is defines the MODULE_* macros. > -CPPFLAGS-locale-programs = -DLOCALE_PATH='$(localepath)' \ > +CPPFLAGS-locale_programs = -DLOCALE_PATH='$(localepath)' \ Rather than changing this name, I think the libc-modules.h generation should just turn all nonidentifier characters into _. OK with those changes. Thanks, Roland
On Fri, Nov 07, 2014 at 03:22:10PM -0800, Roland McGrath wrote: > > +# Set libof-* for each routine. > > -CPPFLAGS-locale-programs = -DLOCALE_PATH='$(localepath)' \ > > +CPPFLAGS-locale_programs = -DLOCALE_PATH='$(localepath)' \ > > Rather than changing this name, I think the libc-modules.h generation > should just turn all nonidentifier characters into _. Doing that for libc-modules.h is easy, but it will be hard to do that in Makeconfig to set -DIN_MODULE=MODULE_* because I don't think there is a straightforward way to do regex substitutions in GNU make. I could just use subst to just replace the - with _, but then wouldn't it make sense to just restrict module names to always have only valid identifier characters instead? Siddhesh
We don't use _ as a separator in makefile variable names. I don't think we want to start. Using subst to just replace - with _ is fine. We can restrict the module names to the C identifier characters and -.
diff --git a/Makeconfig b/Makeconfig index 24a3b82..671eceb 100644 --- a/Makeconfig +++ b/Makeconfig @@ -813,6 +813,11 @@ endif # $(+cflags) == "" # of many little headers in the include directory. libio-include = -I$(..)libio +in-module = $(strip $(foreach lib,$(libof-$(basename $(@F))) $(libof-$(<F)) \ + $(libof-$(@F)),-DIN_MODULE=MODULE_$(lib))) + +module-def = $(if $(in-module),$(in-module),-DIN_MODULE=MODULE_libc) + # These are the variables that the implicit compilation rules use. # Note that we can't use -std=* in CPPFLAGS, because it overrides # the implicit -lang-asm and breaks cpp behavior for .S files--notably @@ -821,7 +826,7 @@ CPPFLAGS = $(config-extra-cppflags) $(CPPUNDEFS) $(CPPFLAGS-config) \ $($(subdir)-CPPFLAGS) \ $(+includes) $(defines) \ -include $(..)include/libc-symbols.h $(sysdep-CPPFLAGS) \ - $(CPPFLAGS-$(suffix $@)) \ + $(CPPFLAGS-$(suffix $@)) $(module-def) \ $(foreach lib,$(libof-$(basename $(@F))) \ $(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \ $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F))) diff --git a/Makerules b/Makerules index 3951bb1..3f4b55b 100644 --- a/Makerules +++ b/Makerules @@ -1156,7 +1156,7 @@ xcheck: xtests all-nonlib = $(strip $(tests) $(xtests) $(test-srcs) $(test-extras) $(others)) ifneq (,$(all-nonlib)) -cpp-srcs-left = $(all-nonlib:=.c) $(all-nonlib:=.cc) +cpp-srcs-left = $(all-nonlib) lib := nonlib include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) endif diff --git a/elf/Makefile b/elf/Makefile index 94074f3..6263a47 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -436,7 +436,8 @@ $(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o) SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"' CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \ - -D'SLIBDIR="$(slibdir)"' -DIS_IN_ldconfig=1 + -D'SLIBDIR="$(slibdir)"' -DIS_IN_ldconfig=1 -DNOT_IN_libc=1 +libof-ldconfig = ldconfig CFLAGS-dl-cache.c = $(SYSCONF-FLAGS) CFLAGS-cache.c = $(SYSCONF-FLAGS) CFLAGS-rtld.c = $(SYSCONF-FLAGS) @@ -444,6 +445,10 @@ CFLAGS-rtld.c = $(SYSCONF-FLAGS) CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld) +cpp-srcs-left := $(all-rtld-routines:=.os) +lib := rtld +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) + test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names)))) generated += $(addsuffix .so,$(strip $(modules-names))) diff --git a/elf/rtld-Rules b/elf/rtld-Rules index 0a5d6af..4d78d90 100644 --- a/elf/rtld-Rules +++ b/elf/rtld-Rules @@ -138,6 +138,11 @@ ifdef rtld-depfiles -include $(rtld-depfiles) endif +# Set libof-* for each routine. +cpp-srcs-left := $(subst .os,,$(rtld-modules)) +lib := rtld +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) + # This here is the whole point of all the shenanigans. rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld diff --git a/extra-modules.mk b/extra-modules.mk index c7ed850..9c2e4d2 100644 --- a/extra-modules.mk +++ b/extra-modules.mk @@ -6,4 +6,5 @@ module := $(firstword $(extra-modules-left)) extra-modules-left := $(filter-out $(module),$(extra-modules-left)) +libof-$(notdir $(module)) := extramodules CPPFLAGS-$(module).c += -DNOT_IN_libc diff --git a/iconv/Makefile b/iconv/Makefile index 48d17d7..8031a88 100644 --- a/iconv/Makefile +++ b/iconv/Makefile @@ -52,11 +52,12 @@ CFLAGS-gconv_cache.c += -DGCONV_DIR='"$(gconvdir)"' CFLAGS-gconv_conf.c = -DGCONV_PATH='"$(gconvdir)"' CFLAGS-iconvconfig.c = -DGCONV_PATH='"$(gconvdir)"' -DGCONV_DIR='"$(gconvdir)"' -CPPFLAGS-iconv_charmap = -DNOT_IN_libc -CPPFLAGS-linereader = -DNOT_IN_libc -CPPFLAGS-strtab = -DNOT_IN_libc -CPPFLAGS-charmap = -DNOT_IN_libc -CPPFLAGS-charmap-dir = -DNOT_IN_libc +CPPFLAGS-iconvprogs = -DNOT_IN_libc + +# Set libof-* for each routine. +cpp-srcs-left := $(iconv_prog-modules) $(iconvconfig-modules) +lib := iconvprogs +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) ifeq ($(run-built-tests),yes) xtests-special += $(objpfx)test-iconvconfig.out diff --git a/iconvdata/Makefile b/iconvdata/Makefile index b6327d6..e0252ee 100644 --- a/iconvdata/Makefile +++ b/iconvdata/Makefile @@ -211,6 +211,7 @@ $(objpfx)iconv-rules: Makefile $(AWK) 'NR == 1 { \ for (i = 1; i <= NF; i++) { \ printf "%s-routines := %s\n", $$i, tolower($$i); \ + printf "libof-%s := iconvdata\n", tolower($$i); \ printf "%s-map := gconv.map\n", $$i; \ } \ }; \ @@ -273,6 +274,11 @@ endif include ../Rules +# Set libof-* for each routine. +cpp-srcs-left := $(modules) $(generated-modules) +lib := iconvdata +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) + tst-loading-ENV = MALLOC_TRACE=$(objpfx)tst-loading.mtrace $(objpfx)mtrace-tst-loading.out: $(objpfx)tst-loading.out $(common-objpfx)malloc/mtrace $(objpfx)tst-loading.mtrace > $@; \ diff --git a/include/libc-modules.h b/include/libc-modules.h new file mode 100644 index 0000000..d12fb90 --- /dev/null +++ b/include/libc-modules.h @@ -0,0 +1,37 @@ +#define MODULE_libc 1 +#define MODULE_libpthread 2 +#define MODULE_rtld 3 +#define MODULE_libdl 4 +#define MODULE_libm 5 +#define MODULE_iconvprogs 6 +#define MODULE_iconvdata 7 +#define MODULE_lddlibc4 8 +#define MODULE_locale_programs 9 +#define MODULE_memusagestat 10 +#define MODULE_libutil 12 +#define MODULE_libBrokenLocale 13 +#define MODULE_libmemusage 15 +#define MODULE_libresolv 16 +#define MODULE_libnss_db 17 +#define MODULE_libnss_files 18 +#define MODULE_libnss_dns 19 +#define MODULE_libnss_compat 20 +#define MODULE_libnss_hesiod 21 +#define MODULE_libnss_nis 22 +#define MODULE_libnss_nisplus 23 +#define MODULE_libanl 24 +#define MODULE_librt 25 +#define MODULE_libSegFault 26 +#define MODULE_libthread_db 27 +#define MODULE_libcidn 28 +#define MODULE_libcrypt 29 +#define MODULE_libnsl 30 +#define MODULE_libpcprofile 31 +#define MODULE_librpcsvc 32 +#define MODULE_nscd 33 +#define MODULE_ldconfig 34 +#define MODULE_libnldbl 35 + +/* Catch-all for test modules and other binaries. */ +#define MODULE_nonlib 98 +#define MODULE_extramodules 99 diff --git a/include/libc-symbols.h b/include/libc-symbols.h index d4ab1f3..131d7eb 100644 --- a/include/libc-symbols.h +++ b/include/libc-symbols.h @@ -20,6 +20,10 @@ #ifndef _LIBC_SYMBOLS_H #define _LIBC_SYMBOLS_H 1 +#include "libc-modules.h" + +#define IS_IN(lib) (IN_MODULE == MODULE_##lib) + /* This file's macros are included implicitly in the compilation of every file in the C library by -imacros. @@ -468,7 +472,7 @@ for linking") If the function should be internal to multiple objects, say ld.so and libc.so, the best way is to use: - #if !defined NOT_IN_libc || defined IS_IN_rtld + #if IS_IN (libc) || IS_IN (rtld) hidden_proto (foo) #endif @@ -584,7 +588,7 @@ for linking") # define libc_hidden_data_ver(local, name) #endif -#ifdef IS_IN_rtld +#if IS_IN (rtld) # define rtld_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) # define rtld_hidden_tls_proto(name, attrs...) hidden_tls_proto (name, ##attrs) # define rtld_hidden_def(name) hidden_def (name) @@ -604,7 +608,7 @@ for linking") # define rtld_hidden_data_ver(local, name) #endif -#ifdef IS_IN_libm +#if IS_IN (libm) # define libm_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) # define libm_hidden_tls_proto(name, attrs...) hidden_tls_proto (name, ##attrs) # define libm_hidden_def(name) hidden_def (name) @@ -624,7 +628,7 @@ for linking") # define libm_hidden_data_ver(local, name) #endif -#ifdef IS_IN_libresolv +#if IS_IN (libresolv) # define libresolv_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) # define libresolv_hidden_tls_proto(name, attrs...) \ hidden_tls_proto (name, ##attrs) @@ -645,7 +649,7 @@ for linking") # define libresolv_hidden_data_ver(local, name) #endif -#ifdef IS_IN_librt +#if IS_IN (librt) # define librt_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) # define librt_hidden_tls_proto(name, attrs...) \ hidden_tls_proto (name, ##attrs) @@ -666,7 +670,7 @@ for linking") # define librt_hidden_data_ver(local, name) #endif -#ifdef IS_IN_libdl +#if IS_IN (libdl) # define libdl_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) # define libdl_hidden_tls_proto(name, attrs...) \ hidden_tls_proto (name, ##attrs) @@ -687,7 +691,7 @@ for linking") # define libdl_hidden_data_ver(local, name) #endif -#ifdef IS_IN_libnss_files +#if IS_IN (libnss_files) # define libnss_files_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) # define libnss_files_hidden_tls_proto(name, attrs...) \ hidden_tls_proto (name, ##attrs) @@ -708,7 +712,7 @@ for linking") # define libnss_files_hidden_data_ver(local, name) #endif -#ifdef IS_IN_libnsl +#if IS_IN (libnsl) # define libnsl_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) # define libnsl_hidden_tls_proto(name, attrs...) \ hidden_tls_proto (name, ##attrs) @@ -729,7 +733,7 @@ for linking") # define libnsl_hidden_data_ver(local, name) #endif -#ifdef IS_IN_libnss_nisplus +#if IS_IN (libnss_nisplus) # define libnss_nisplus_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) # define libnss_nisplus_hidden_tls_proto(name, attrs...) \ hidden_tls_proto (name, ##attrs) @@ -758,7 +762,7 @@ for linking") # define HIDDEN_BUILTIN_JUMPTARGET(name) HIDDEN_JUMPTARGET(name) #endif -#ifdef IS_IN_libutil +#if IS_IN (libutil) # define libutil_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) # define libutil_hidden_tls_proto(name, attrs...) \ hidden_tls_proto (name, ##attrs) diff --git a/locale/Makefile b/locale/Makefile index e4c3878..5cd18e0 100644 --- a/locale/Makefile +++ b/locale/Makefile @@ -85,7 +85,7 @@ locale-CPPFLAGS = -DLOCALEDIR='"$(localedir)"' \ -DLOCALE_ALIAS_PATH='"$(msgcatdir)"' \ -Iprograms -CPPFLAGS-locale-programs = -DLOCALE_PATH='$(localepath)' \ +CPPFLAGS-locale_programs = -DLOCALE_PATH='$(localepath)' \ -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \ -DREPERTOIREMAP_PATH='"$(i18ndir)/repertoiremaps"' \ -DLOCSRCDIR='"$(i18ndir)/locales"' \ @@ -96,7 +96,7 @@ CFLAGS-locfile.c = -Wno-write-strings -Wno-char-subscripts CFLAGS-charmap-dir.c = -Wno-write-strings # This makes sure -DNOT_IN_libc et al are passed for all these modules. -cpp-srcs-left := $(addsuffix .c,$(localedef-modules) $(localedef-aux) \ - $(locale-modules) $(lib-modules)) -lib := locale-programs +cpp-srcs-left := $(localedef-modules) $(localedef-aux) $(locale-modules) \ + $(lib-modules) +lib := locale_programs include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) diff --git a/malloc/Makefile b/malloc/Makefile index 9e93523..fbfada2 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -89,6 +89,11 @@ endif do-memusagestat: $(objpfx)memusagestat memusagestat-modules = memusagestat + +cpp-srcs-left := $(memusagestat-modules) +lib := memusagestat +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) + $(objpfx)memusagestat: $(memusagestat-modules:%=$(objpfx)%.o) $(LINK.o) -o $@ $^ $(libgd-LDFLAGS) -lgd -lpng -lz -lm diff --git a/nscd/Makefile b/nscd/Makefile index 639d87b..7ab4e9d 100644 --- a/nscd/Makefile +++ b/nscd/Makefile @@ -79,23 +79,22 @@ CFLAGS-nscd_gethst_r.c = -fexceptions CFLAGS-nscd_getai.c = -fexceptions CFLAGS-nscd_initgroups.c = -fexceptions -CPPFLAGS-nonlib += -DIS_IN_nscd=1 -D_FORTIFY_SOURCE=2 +CPPFLAGS-nscd += -DIS_IN_nscd=1 -D_FORTIFY_SOURCE=2 -DNOT_IN_libc=1 ifeq (yesyes,$(have-fpie)$(build-shared)) -CFLAGS-nonlib += $(pie-ccflag) +CFLAGS-nscd += $(pie-ccflag) endif ifeq (yes,$(have-ssp)) -CFLAGS-nonlib += -fstack-protector +CFLAGS-nscd += -fstack-protector endif ifeq (yesyes,$(have-fpie)$(build-shared)) LDFLAGS-nscd = -Wl,-z,now endif -# This makes sure CPPFLAGS-nonlib and CFLAGS-nonlib are passed -# for all these modules. -cpp-srcs-left := $(nscd-modules:=.c) -lib := nonlib +# Set libof-nscd. +cpp-srcs-left := $(nscd-modules) +lib := nscd include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) $(objpfx)nscd: $(nscd-modules:%=$(objpfx)%.o) diff --git a/nss/Makefile b/nss/Makefile index 1fa7f1f..7114d74 100644 --- a/nss/Makefile +++ b/nss/Makefile @@ -105,7 +105,8 @@ $(objpfx)makedb: $(makedb-modules:%=$(objpfx)%.o) $(inst_vardbdir)/Makefile: db-Makefile $(+force) $(do-install) -CFLAGS-nss_test1.c = -DNOT_IN_libc=1 +libof-nss_test1 = extramodules +CPPFLAGS-nss_test1 = -DNOT_IN_libc=1 $(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(link-libc-deps) $(build-module) ifdef libnss_test1.so-version diff --git a/stdlib/Makefile b/stdlib/Makefile index 9b2271b..da6e076 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -145,6 +145,7 @@ LDFLAGS-tst-putenv = $(no-as-needed) $(objpfx)tst-putenvmod.so: $(objpfx)tst-putenvmod.os $(link-libc-deps) $(build-module) +libof-tst-putenvmod = extramodules CFLAGS-tst-putenvmod.c = -DNOT_IN_libc=1 $(objpfx)bug-getcontext: $(libm) diff --git a/sysdeps/gnu/Makefile b/sysdeps/gnu/Makefile index c05708d..b5b2cf0 100644 --- a/sysdeps/gnu/Makefile +++ b/sysdeps/gnu/Makefile @@ -29,6 +29,8 @@ ifeq ($(subdir),stdio-common) errlist-c = $(firstword $(wildcard $(addsuffix /errlist.c,$(sysdirs) .))) +libof-errlist-compat = extramodules + ifeq ($(build-shared),yes) $(objpfx)errlist-compat.c: $(errlist-c) $(..)sysdeps/gnu/errlist-compat.awk \ $(common-objpfx)Versions.v.i $(before-compile) diff --git a/sysdeps/s390/s390-64/Makefile b/sysdeps/s390/s390-64/Makefile index fe5030e..ce4f0c5 100644 --- a/sysdeps/s390/s390-64/Makefile +++ b/sysdeps/s390/s390-64/Makefile @@ -28,6 +28,10 @@ s390x-iconv-modules = ISO-8859-1_CP037_Z900 UTF8_UTF16_Z9 UTF16_UTF32_Z9 UTF8_UT extra-modules-left += $(s390x-iconv-modules) include extra-module.mk +cpp-srcs-left := $(foreach mod,$(s390x-iconv-modules),$($(mod)-routines)) +lib := iconvdata +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) + extra-objs += $(addsuffix .so, $(s390x-iconv-modules)) install-others += $(patsubst %, $(inst_gconvdir)/%.so, $(s390x-iconv-modules)) diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 9ad6d22..2d6d8bb 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -178,6 +178,7 @@ ifeq ($(subdir),elf) sysdep-rtld-routines += dl-brk dl-sbrk dl-getcwd dl-openat64 dl-opendir \ dl-fxstatat64 +libof-lddlibc4 = lddlibc4 CPPFLAGS-lddlibc4 += -DNOT_IN_libc others += pldd