[ping3,01/19,v2] Add new macro IN_MODULE to identify module in which source is built

Message ID 20141001081613.GG2217@spoyarek.pnq.redhat.com
State Committed
Headers

Commit Message

Siddhesh Poyarekar Oct. 1, 2014, 8:16 a.m. UTC
  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.
  

Comments

Siddhesh Poyarekar Oct. 14, 2014, 4:20 p.m. UTC | #1
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
  
Siddhesh Poyarekar Nov. 5, 2014, 11:02 a.m. UTC | #2
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
> 
>
  
Roland McGrath Nov. 7, 2014, 11:22 p.m. UTC | #3
>     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
  
Siddhesh Poyarekar Nov. 8, 2014, 2:09 a.m. UTC | #4
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
  
Roland McGrath Nov. 18, 2014, 6:48 p.m. UTC | #5
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 -.
  

Patch

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