From patchwork Wed Oct 1 08:17:50 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddhesh Poyarekar X-Patchwork-Id: 3044 Received: (qmail 26913 invoked by alias); 1 Oct 2014 08:18:00 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 26902 invoked by uid 89); 1 Oct 2014 08:17:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=AWL, BAYES_50, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Date: Wed, 1 Oct 2014 13:47:50 +0530 From: Siddhesh Poyarekar To: libc-alpha@sourceware.org Cc: Roland McGrath Subject: [ping3][PATCH 03/19 v2] Auto-generate libc-modules.h Message-ID: <20141001081750.GH2217@spoyarek.pnq.redhat.com> References: <1408618663-2281-1-git-send-email-siddhesh@redhat.com> <1408618663-2281-4-git-send-email-siddhesh@redhat.com> <20140828061128.GH8020@spoyarek.pnq.redhat.com> <20140917124329.GV6586@spoyarek.pnq.redhat.com> <20140924090632.GJ1716@spoyarek.pnq.redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20140924090632.GJ1716@spoyarek.pnq.redhat.com> User-Agent: Mutt/1.5.22.1-rc1 (2013-10-16) Rebased against current master and verified that the generated code is still unchanged. Siddhesh commit 33724079bde7aca8149fa9c2831578041cf7da03 Author: Siddhesh Poyarekar Date: Thu Aug 21 11:44:54 2014 +0530 Auto-generate libc-modules.h Remove libc-modules.h from the tree and auto-generate it from soversions.i and a new file build.list. Macros generated from soversions.i have lower values starting from 1, while those from build.list start from a special value MODULE_OTHER_BEGIN, which has a high enough value (1000). This allows us to conveniently differentiate between the versioned libraries and other built modules, which is needed in errno.h and netdb.h to decide whether to use an internal symbol or an external one. Verified that generated code remains unchanged on x86_64. * Makeconfig (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. * build.list: New file. * 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. diff --git a/Makeconfig b/Makeconfig index 671eceb..5ffbd92 100644 --- a/Makeconfig +++ b/Makeconfig @@ -813,10 +813,22 @@ endif # $(+cflags) == "" # of many little headers in the include directory. libio-include = -I$(..)libio +# 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 = $(strip $(foreach lib,$(libof-$(basename $(@F))) $(libof-$( ${@: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/build.list b/build.list new file mode 100644 index 0000000..eab57c7 --- /dev/null +++ b/build.list @@ -0,0 +1,15 @@ +iconvprogs +iconvdata +ldconfig +lddlibc4 +libmemusage +libSegFault +libpcprofile +librpcsvc +libutil +locale_programs +memusagestat +nonlib +nscd +extramodules +libnldbl diff --git a/include/libc-modules.h b/include/libc-modules.h deleted file mode 100644 index d12fb90..0000000 --- a/include/libc-modules.h +++ /dev/null @@ -1,37 +0,0 @@ -#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 131d7eb..9b8208b 100644 --- a/include/libc-symbols.h +++ b/include/libc-symbols.h @@ -20,8 +20,6 @@ #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 diff --git a/scripts/gen-libc-modules.awk b/scripts/gen-libc-modules.awk new file mode 100644 index 0000000..d3382b6 --- /dev/null +++ b/scripts/gen-libc-modules.awk @@ -0,0 +1,40 @@ +# 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 mentioned one-per-line in build.list. +BEGIN { + PROCINFO["sorted_in"] = "@val_type_asc" + shlibs = 1 + others = 1000 + libs["OTHERS_BEGIN"] = others++ +} + +# Skip over comments. +$1 == "#" { + next +} + +# build.list is simply one module per line. +match (FILENAME, ".*build.list") { + libs[$0] = others++ +} + +# 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" + + if (!(name in libs)) { + libs[name] = shlibs++ + } +} + +# Finally, print out the header file. +END { + printf ("/* AUTOGENERATED BY gen-libc-modules.awk, DO NOT EDIT. */\n\n") + i = 1 + for (l in libs) { + printf ("#define MODULE_%s %d\n", l, libs[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)' \