[ping,01/19,v2] Add new macro IN_MODULE to identify module in which source is built
Commit Message
Resending patch after rebasing on top of latest master. There are no
changes to the patch. Verified once again that the generated code is
unchanged on x86_64.
Siddhesh
On Wed, Aug 27, 2014 at 10:49:16PM +0530, Siddhesh Poyarekar wrote:
> Here's a second version of this patch with the useless boilerplate
> code removed since extra-lib should have taken care of it. I couldn't
> replace the remaining instances of cppflags-iterator inclusions with
> simple variable assignments because there were a couple of cases that
> would make it hard to implement.
>
> Verified that the generated code remains the same on x86_64. I have
> build tests for other architectures running (for all patches) but
> they'll probably take till tomorrow to complete.
From 92c41887b588cb3a3bed8538d2f6b903c1db3715 Mon Sep 17 00:00:00 2001
From: Siddhesh Poyarekar <siddhesh@redhat.com>
Date: Thu, 21 Aug 2014 10:19:31 +0530
Subject: [PATCH] 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.
---
Makeconfig | 7 ++++++-
Makerules | 2 +-
elf/Makefile | 7 ++++++-
elf/rtld-Rules | 5 +++++
extra-modules.mk | 1 +
iconv/Makefile | 11 ++++++-----
iconvdata/Makefile | 6 ++++++
include/libc-modules.h | 37 +++++++++++++++++++++++++++++++++++++
include/libc-symbols.h | 24 ++++++++++++++----------
locale/Makefile | 8 ++++----
mach/Machrules | 1 +
malloc/Makefile | 5 +++++
nscd/Makefile | 13 ++++++-------
nss/Makefile | 3 ++-
stdlib/Makefile | 1 +
sysdeps/gnu/Makefile | 2 ++
sysdeps/s390/s390-64/Makefile | 4 ++++
sysdeps/unix/sysv/linux/Makefile | 1 +
18 files changed, 108 insertions(+), 30 deletions(-)
create mode 100644 include/libc-modules.h
Comments
Ping!
On Wed, Sep 17, 2014 at 06:08:35PM +0530, Siddhesh Poyarekar wrote:
> Resending patch after rebasing on top of latest master. There are no
> changes to the patch. Verified once again that the generated code is
> unchanged on x86_64.
>
> Siddhesh
>
> On Wed, Aug 27, 2014 at 10:49:16PM +0530, Siddhesh Poyarekar wrote:
> > Here's a second version of this patch with the useless boilerplate
> > code removed since extra-lib should have taken care of it. I couldn't
> > replace the remaining instances of cppflags-iterator inclusions with
> > simple variable assignments because there were a couple of cases that
> > would make it hard to implement.
> >
> > Verified that the generated code remains the same on x86_64. I have
> > build tests for other architectures running (for all patches) but
> > they'll probably take till tomorrow to complete.
>
>
>
> From 92c41887b588cb3a3bed8538d2f6b903c1db3715 Mon Sep 17 00:00:00 2001
> From: Siddhesh Poyarekar <siddhesh@redhat.com>
> Date: Thu, 21 Aug 2014 10:19:31 +0530
> Subject: [PATCH] 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.
> ---
> Makeconfig | 7 ++++++-
> Makerules | 2 +-
> elf/Makefile | 7 ++++++-
> elf/rtld-Rules | 5 +++++
> extra-modules.mk | 1 +
> iconv/Makefile | 11 ++++++-----
> iconvdata/Makefile | 6 ++++++
> include/libc-modules.h | 37 +++++++++++++++++++++++++++++++++++++
> include/libc-symbols.h | 24 ++++++++++++++----------
> locale/Makefile | 8 ++++----
> mach/Machrules | 1 +
> malloc/Makefile | 5 +++++
> nscd/Makefile | 13 ++++++-------
> nss/Makefile | 3 ++-
> stdlib/Makefile | 1 +
> sysdeps/gnu/Makefile | 2 ++
> sysdeps/s390/s390-64/Makefile | 4 ++++
> sysdeps/unix/sysv/linux/Makefile | 1 +
> 18 files changed, 108 insertions(+), 30 deletions(-)
> create mode 100644 include/libc-modules.h
>
> diff --git a/Makeconfig b/Makeconfig
> index fad2971..5c85b81 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 12d01ee..4594d3b 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/mach/Machrules b/mach/Machrules
> index 8b35cf6..632f5f4 100644
> --- a/mach/Machrules
> +++ b/mach/Machrules
> @@ -226,6 +226,7 @@ extra-libs += $(interface-library)
> extra-libs-others += $(interface-library)
>
> ifeq (yes,$(build-shared))
> +
> interface.so = $(interface-library:=.so)
>
> # Depend on libc.so so a DT_NEEDED is generated in the shared objects.
> 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
> --
> 1.9.3
@@ -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)))
@@ -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
@@ -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)))
@@ -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
@@ -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
@@ -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
@@ -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 > $@; \
new file mode 100644
@@ -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
@@ -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)
@@ -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))
@@ -226,6 +226,7 @@ extra-libs += $(interface-library)
extra-libs-others += $(interface-library)
ifeq (yes,$(build-shared))
+
interface.so = $(interface-library:=.so)
# Depend on libc.so so a DT_NEEDED is generated in the shared objects.
@@ -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
@@ -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)
@@ -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
@@ -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)
@@ -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)
@@ -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))
@@ -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