From patchwork Thu Sep 20 14:00:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 29489 Received: (qmail 96646 invoked by alias); 20 Sep 2018 14:01:17 -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 75208 invoked by uid 89); 20 Sep 2018 14:01:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=2406 X-HELO: mx1.redhat.com From: Florian Weimer To: libc-alpha@sourceware.org Subject: [PATCH] Introduce --enable-math-noprivate Date: Thu, 20 Sep 2018 16:00:34 +0200 Message-ID: <87va70clq5.fsf@oldenburg.str.redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) MIME-Version: 1.0 This is a (rebased) repost of my --enable-math-noprivate patch. It will need a companion patch to deal with the GLIBC_PRIVATE symbol references in math/s_nan_template.c, which I will post shortly. Is this still a direction we want to move in? Downstream, I can at least put this into EPEL once approved for glibc master, and we can take it from there. Thanks, Florian Commit message: Avoid errno@GLIBC_PRIVATE if enabled. Additional work is needed to eliminate further GLIBC_PRIVATE symbol references. Changelog entry: 2018-09-20 Florian Weimer Introduce --enable-math-noprivate. Avoid errno@GLIBC_PRIVATE if enabled. * config.h.in (CONFIG_MATH_NOPRIVATE): Define. * config.make.in (config-math-noprivate): New variable. * configure.ac: Recognize --enable-math-noprivate option. * manual/install.texi (Configuring and compiling): Document --enable-math-noprivate. * configure: Regenerate. * INSTALL: Likewise. * include/errno.h: Do not redefine errno for libm, libmvec if CONFIG_MATH_NOPRIVATE. diff --git a/INSTALL b/INSTALL index 4faeac4469..6b09109783 100644 --- a/INSTALL +++ b/INSTALL @@ -240,6 +240,13 @@ if 'CFLAGS' is specified it must enable optimization. For example: independently-maintained implementations of libcrypt. It may become the default in a future release. +'--enable-math-noprivate' + By default, libm and libmvec (if available) are built in such a way + that they rely on internals in the rest of the library (notably + libc). With this option, the math libraries are built in a way + that avoids such dependencies. As a result, it is possible to use + them with older versions of the library. + '--disable-experimental-malloc' By default, a per-thread cache is enabled in 'malloc'. While this cache can be disabled on a per-application basis using tunables diff --git a/config.h.in b/config.h.in index 141db213a9..316444e845 100644 --- a/config.h.in +++ b/config.h.in @@ -153,6 +153,10 @@ code to link against. */ #undef LINK_OBSOLETE_NSL +/* Define as 1 if GLIBC_PRIVATE symbols should be avoided in the math + libraries. */ +#define CONFIG_MATH_NOPRIVATE 0 + /* Define if Systemtap probes should be defined. */ #undef USE_STAP_PROBE diff --git a/config.make.in b/config.make.in index a6fe48d31f..98b4a17b9e 100644 --- a/config.make.in +++ b/config.make.in @@ -102,6 +102,7 @@ use-nscd = @use_nscd@ build-hardcoded-path-in-tests= @hardcoded_path_in_tests@ build-pt-chown = @build_pt_chown@ have-tunables = @have_tunables@ +config-math-noprivate = @config_math_noprivate@ # Build tools. CC = @CC@ diff --git a/configure b/configure index 285a6537f0..673bc27d54 100755 --- a/configure +++ b/configure @@ -672,6 +672,7 @@ base_machine have_tunables build_pt_chown build_nscd +config_math_noprivate build_obsolete_nsl link_obsolete_rpc libc_cv_static_nss_crypt @@ -786,6 +787,7 @@ enable_crypt enable_nss_crypt enable_obsolete_rpc enable_obsolete_nsl +enable_math_noprivate enable_systemtap enable_build_nscd enable_nscd @@ -1460,6 +1462,7 @@ Optional Features: link-time usage --enable-obsolete-nsl build and install the obsolete libnsl library and depending NSS modules + --enable-math-noprivate avoid GLIBC_PRIVATE symbols in math libraries --enable-systemtap enable systemtap static probe points [default=no] --disable-build-nscd disable building and installing the nscd daemon --disable-nscd library functions will not contact the nscd daemon @@ -3667,6 +3670,19 @@ if test "$build_obsolete_nsl" = yes; then fi +# Check whether --enable-math-noprivate was given. +if test "${enable_math_noprivate+set}" = set; then : + enableval=$enable_math_noprivate; config_math_noprivate=$enableval +else + config_math_noprivate=no +fi + + +if test "$config_math_noprivate" = yes; then + $as_echo "#define CONFIG_MATH_NOPRIVATE 1" >>confdefs.h + +fi + # Check whether --enable-systemtap was given. if test "${enable_systemtap+set}" = set; then : enableval=$enable_systemtap; systemtap=$enableval diff --git a/configure.ac b/configure.ac index 8045d44dd0..f1e66caa1f 100644 --- a/configure.ac +++ b/configure.ac @@ -397,6 +397,16 @@ if test "$build_obsolete_nsl" = yes; then AC_DEFINE(LINK_OBSOLETE_NSL) fi +AC_ARG_ENABLE([math-noprivate], + AC_HELP_STRING([--enable-math-noprivate], + [avoid GLIBC_PRIVATE symbols in math libraries]), + [config_math_noprivate=$enableval], + [config_math_noprivate=no]) +AC_SUBST(config_math_noprivate) +if test "$config_math_noprivate" = yes; then + AC_DEFINE(CONFIG_MATH_NOPRIVATE) +fi + AC_ARG_ENABLE([systemtap], [AS_HELP_STRING([--enable-systemtap], [enable systemtap static probe points @<:@default=no@:>@])], diff --git a/include/errno.h b/include/errno.h index 457114b27a..6c0e0b94ef 100644 --- a/include/errno.h +++ b/include/errno.h @@ -20,7 +20,8 @@ # define errno rtld_errno extern int rtld_errno attribute_hidden; -# elif IS_IN_LIB && !IS_IN (rtld) +# elif IS_IN_LIB && !IS_IN (rtld) \ + && (!CONFIG_MATH_NOPRIVATE || !(IS_IN (libm) || IS_IN (libmvec))) # include diff --git a/manual/install.texi b/manual/install.texi index eab4b0d75a..dd601b6c4f 100644 --- a/manual/install.texi +++ b/manual/install.texi @@ -271,6 +271,13 @@ This option is for hackers and distributions experimenting with independently-maintained implementations of libcrypt. It may become the default in a future release. +@item --enable-math-noprivate +By default, libm and libmvec (if available) are built in such a way that +they rely on internals in the rest of the library (notably libc). With +this option, the math libraries are built in a way that avoids such +dependencies. As a result, it is possible to use them with older +versions of the library. + @item --disable-experimental-malloc By default, a per-thread cache is enabled in @code{malloc}. While this cache can be disabled on a per-application basis using tunables