Add new macro IN_MODULE to identify module in which source is built
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Wed, 19 Nov 2014 06:43:54 +0000 (12:13 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Wed, 19 Nov 2014 06:43:54 +0000 (12:13 +0530)
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 replace 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 binary 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.
(CPPFLAGS): Use $(in-module).
* 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.

18 files changed:
ChangeLog
Makeconfig
Makerules
elf/Makefile
elf/rtld-Rules
extra-modules.mk
iconv/Makefile
iconvdata/Makefile
include/libc-modules.h [new file with mode: 0644]
include/libc-symbols.h
locale/Makefile
malloc/Makefile
nscd/Makefile
nss/Makefile
stdlib/Makefile
sysdeps/gnu/Makefile
sysdeps/s390/s390-64/Makefile
sysdeps/unix/sysv/linux/Makefile

index 37b1459..038b134 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+2014-11-19  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+       * Makeconfig (in-module): Get value of libof set for the
+       translation unit.
+       (CPPFLAGS): Use $(in-module).
+       * 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.
+
 2014-11-18  Roland McGrath  <roland@hack.frob.com>
 
        * nptl/createthread.c: New file.
index 24a3b82..9f88f7c 100644 (file)
@@ -813,6 +813,11 @@ endif      # $(+cflags) == ""
 # of many little headers in the include directory.
 libio-include = -I$(..)libio
 
+in-module = $(subst -,_,$(firstword $(libof-$(basename $(@F))) \
+                                   $(libof-$(<F)) \
+                                   $(libof-$(@F)) \
+                                   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 $@)) -DIN_MODULE=MODULE_$(in-module) \
           $(foreach lib,$(libof-$(basename $(@F))) \
                         $(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
           $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))
index 4f2eec3..3cf4c40 100644 (file)
--- a/Makerules
+++ b/Makerules
@@ -1223,7 +1223,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
index 34f0b1f..f013c22 100644 (file)
@@ -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)))
 
index 0a5d6af..f2cc4a1 100644 (file)
@@ -138,6 +138,11 @@ ifdef rtld-depfiles
 -include $(rtld-depfiles)
 endif
 
+# Set libof-* for each routine.
+cpp-srcs-left := $(rtld-modules:%.os=%)
+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
 
index c7ed850..9c2e4d2 100644 (file)
@@ -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
index 48d17d7..8031a88 100644 (file)
@@ -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
index b6327d6..e0252ee 100644 (file)
@@ -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 (file)
index 0000000..029b600
--- /dev/null
@@ -0,0 +1,41 @@
+/* Valid values for the IN_MODULE macro, which is defined for each source file
+   during compilation to indicate which module it is to be built into.
+
+   TODO: This file should eventually be auto-generated.  */
+#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
index b1ac9db..58c3577 100644 (file)
 #ifndef _LIBC_SYMBOLS_H
 #define _LIBC_SYMBOLS_H        1
 
+/* Pull in definitions for the MODULE_* macros.  */
+#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.
 
@@ -448,7 +453,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
 
@@ -564,7 +569,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)
@@ -584,7 +589,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)
@@ -604,7 +609,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)
@@ -625,7 +630,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)
@@ -646,7 +651,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)
@@ -667,7 +672,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)
@@ -688,7 +693,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)
@@ -709,7 +714,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)
@@ -738,7 +743,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)
index e4c3878..bbbb3e5 100644 (file)
@@ -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))
+cpp-srcs-left := $(localedef-modules) $(localedef-aux) $(locale-modules) \
+                $(lib-modules)
 lib := locale-programs
 include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
index 9e93523..fbfada2 100644 (file)
@@ -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
 
index 639d87b..7ab4e9d 100644 (file)
@@ -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)
index 1fa7f1f..7114d74 100644 (file)
@@ -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
index 9b2271b..da6e076 100644 (file)
@@ -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)
index c05708d..b5b2cf0 100644 (file)
@@ -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)
index fe5030e..ce4f0c5 100644 (file)
@@ -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))
 
index 9ad6d22..2d6d8bb 100644 (file)
@@ -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