diff options
-rw-r--r-- | ChangeLog | 17 | ||||
-rw-r--r-- | Makeconfig | 40 | ||||
-rw-r--r-- | include/libc-modules.h | 41 | ||||
-rw-r--r-- | include/libc-symbols.h | 3 | ||||
-rw-r--r-- | scripts/gen-libc-modules.awk | 34 | ||||
-rw-r--r-- | sysdeps/unix/Makefile | 3 |
6 files changed, 91 insertions, 47 deletions
@@ -1,5 +1,22 @@ 2014-11-19 Siddhesh Poyarekar <siddhesh@redhat.com> + * Makeconfig (built-modules): List non-library modules to be + built. + (module-cppflags): Include libc-modules.h for + everything except shlib-versions.v.i. + (CPPFLAGS): Use it. + (before-compile): Add libc-modules.h. + ($(common-objpfx)libc-modules.h, + $(common-objpfx)libc-modules.stmp): New targets. + (common-generated): Add libc-modules.h and libc-modules.stmp. + ($(common-objpfx)Versions.v.i): Depend on libc-modules.h. + * include/libc-symbols.h: Don't include libc-modules.h. + * include/libc-modules.h: Remove file. + * scripts/gen-libc-modules.awk: New script to generate + libc-modules.h. + * sysdeps/unix/Makefile ($(common-objpfx)sysd-syscalls): + Depend on libc-modules.stmp. + * include/shlib-compat.h (_SHLIB_COMPAT): Use IS_IN. * Makeconfig (in-module): Get value of libof set for the @@ -813,20 +813,39 @@ endif # $(+cflags) == "" # of many little headers in the include directory. libio-include = -I$(..)libio +# List of non-library modules that we build. +built-modules = iconvprogs iconvdata ldconfig lddlibc4 libmemusage \ + libSegFault libpcprofile librpcsvc locale-programs \ + memusagestat nonlib nscd extramodules libnldbl + +# We don't include libc-modules.h when these targets are being built. These +# targets don't (and will likely never need to) use the IS_IN facility. In +# fact, shlib-versions should not use it because that will create a circular +# dependency as libc-modules.h is generated from shlib-versions. +skip-module-cppflags = shlib-versions.v.i Versions.v.i + in-module = $(subst -,_,$(firstword $(libof-$(basename $(@F))) \ $(libof-$(<F)) \ $(libof-$(@F)) \ libc)) +module-cppflags-real = -include $(common-objpfx)libc-modules.h \ + -DIN_MODULE=MODULE_$(in-module) + +# We don't need libc-modules.h and the IN_MODULE definition for +# shlib-version.v.i. +module-cppflags = $(if $(filter $(@F),$(skip-module-cppflags)), \ + ,$(module-cppflags-real)) + # 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 # it causes cpp to stop predefining __ASSEMBLER__. CPPFLAGS = $(config-extra-cppflags) $(CPPUNDEFS) $(CPPFLAGS-config) \ $($(subdir)-CPPFLAGS) \ - $(+includes) $(defines) \ + $(+includes) $(defines) $(module-cppflags) \ -include $(..)include/libc-symbols.h $(sysdep-CPPFLAGS) \ - $(CPPFLAGS-$(suffix $@)) -DIN_MODULE=MODULE_$(in-module) \ + $(CPPFLAGS-$(suffix $@)) \ $(foreach lib,$(libof-$(basename $(@F))) \ $(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \ $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F))) @@ -986,6 +1005,23 @@ endif postclean-generated += soversions.mk soversions.i \ shlib-versions.v shlib-versions.v.i +before-compile += $(common-objpfx)libc-modules.h +ifeq ($(soversions.mk-done),t) +# Generate a header with macro definitions for use with the IS_IN macro. +# These are the possible values for the IN_MODULE macro defined when building +# sources, to identify which module the translation unit is going to be built +# into. +$(common-objpfx)libc-modules.h: $(common-objpfx)libc-modules.stmp; @: +$(common-objpfx)libc-modules.stmp: $(..)scripts/gen-libc-modules.awk \ + $(common-objpfx)soversions.i + $(AWK) -v buildlist="$(subst -,_,$(built-modules))" -f $^ > ${@:stmp=T} + $(move-if-change) ${@:stmp=T} ${@:stmp=h} + touch $@ + +endif + +common-generated += libc-modules.h libc-modules.stmp + # The name under which the run-time dynamic linker is installed. # We are currently going for the convention that `/lib/ld.so.1' # names the SVR4/ELF ABI-compliant dynamic linker. diff --git a/include/libc-modules.h b/include/libc-modules.h deleted file mode 100644 index 029b600..0000000 --- a/include/libc-modules.h +++ /dev/null @@ -1,41 +0,0 @@ -/* 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 diff --git a/include/libc-symbols.h b/include/libc-symbols.h index 58c3577..9c5c9bb 100644 --- a/include/libc-symbols.h +++ b/include/libc-symbols.h @@ -20,9 +20,6 @@ #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 diff --git a/scripts/gen-libc-modules.awk b/scripts/gen-libc-modules.awk new file mode 100644 index 0000000..2f92cd4 --- /dev/null +++ b/scripts/gen-libc-modules.awk @@ -0,0 +1,34 @@ +# Generate a header file that defines the MODULE_* macros for each library and +# module we build in glibc. The library names are pulled in from soversions.i +# and the additional modules are passed in the BUILDLIST variable. +BEGIN { + # BUILDLIST is set from the build-list variable in Makeconfig and is a space + # separated list of non-library modules that we build in glibc. + num = split (buildlist, libs, " ") + # Separate the built modules from the libraries. + libs[++num] = "LIBS_BEGIN" +} + +# Skip over comments. +$1 == "#" { + next +} + +# We have only one special case in soversions.i parsing, which is to replace ld +# with rtld since that's what we call it throughout the sources. +match (FILENAME, ".*soversions.i") { + name = $2 + if (name == "ld") + name = "rtld" + + # Library names are not duplicated in soversions.i. + libs[++num] = name +} + +# Finally, print out the header file. +END { + printf ("/* AUTOGENERATED BY gen-libc-modules.awk, DO NOT EDIT. */\n\n") + for (l in libs) { + printf ("#define MODULE_%s %d\n", libs[l], l) + } +} diff --git a/sysdeps/unix/Makefile b/sysdeps/unix/Makefile index 0e535b6..573e90d 100644 --- a/sysdeps/unix/Makefile +++ b/sysdeps/unix/Makefile @@ -79,7 +79,8 @@ compile-syscall = $(COMPILE.S) -o $@ -x assembler-with-cpp - \ ifndef avoid-generated $(common-objpfx)sysd-syscalls: $(..)sysdeps/unix/make-syscalls.sh \ - $(wildcard $(+sysdep_dirs:%=%/syscalls.list)) + $(wildcard $(+sysdep_dirs:%=%/syscalls.list)) \ + $(common-objpfx)libc-modules.stmp for dir in $(+sysdep_dirs); do \ test -f $$dir/syscalls.list && \ { sysdirs='$(sysdirs)' \ |