This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] Introduce --enable-math-noprivate
- From: fweimer at redhat dot com (Florian Weimer)
- To: libc-alpha at sourceware dot org
- Date: Fri, 11 May 2018 17:43:14 +0200
- Subject: [PATCH] Introduce --enable-math-noprivate
Avoid errno@GLIBC_PRIVATE if enabled. Additional work is needed
to eliminate further GLIBC_PRIVATE symbol references.
2018-05-11 Florian Weimer <fweimer@redhat.com>
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 052b1b6f89..0dc6739e42 100644
--- a/INSTALL
+++ b/INSTALL
@@ -197,6 +197,13 @@ if 'CFLAGS' is specified it must enable optimization. For example:
libnss_nisplus are not built at all. Use this option to enable
libnsl with all depending NSS modules and header files.
+'--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 b0b7cf26cb..794f526da4 100644
--- a/config.h.in
+++ b/config.h.in
@@ -156,6 +156,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 <sys/sdt.h> probes should be defined. */
#undef USE_STAP_PROBE
diff --git a/config.make.in b/config.make.in
index 9e5e24b2c6..d7ac4d5a7a 100644
--- a/config.make.in
+++ b/config.make.in
@@ -101,6 +101,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 7a8bd3f817..73599affbf 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
@@ -782,6 +783,7 @@ enable_experimental_malloc
enable_nss_crypt
enable_obsolete_rpc
enable_obsolete_nsl
+enable_math_noprivate
enable_systemtap
enable_build_nscd
enable_nscd
@@ -1453,6 +1455,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
@@ -3632,6 +3635,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 ca1282a6b3..f18242e276 100644
--- a/configure.ac
+++ b/configure.ac
@@ -378,6 +378,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 <tls.h>
diff --git a/manual/install.texi b/manual/install.texi
index 4bbbfcffa5..1a131a009a 100644
--- a/manual/install.texi
+++ b/manual/install.texi
@@ -230,6 +230,13 @@ libnss_nisplus are not built at all.
Use this option to enable libnsl with all depending NSS modules and
header files.
+@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