public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Introduce --enable-math-noprivate
@ 2018-05-11 15:43 Florian Weimer
  2018-05-11 16:36 ` Adhemerval Zanella
  2018-05-16  4:54 ` Florian Weimer
  0 siblings, 2 replies; 17+ messages in thread
From: Florian Weimer @ 2018-05-11 15:43 UTC (permalink / raw)
  To: libc-alpha

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

^ permalink raw reply	[flat|nested] 17+ messages in thread
* [PATCH] Introduce --enable-math-noprivate
@ 2018-09-20 14:01 Florian Weimer
  0 siblings, 0 replies; 17+ messages in thread
From: Florian Weimer @ 2018-09-20 14:01 UTC (permalink / raw)
  To: libc-alpha

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  <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 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 <sys/sdt.h> 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 <tls.h>
 
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

^ permalink raw reply	[flat|nested] 17+ messages in thread
* Re: [PATCH] Introduce --enable-math-noprivate
@ 2018-09-20 16:27 Wilco Dijkstra
  2018-09-20 16:35 ` Joseph Myers
  2018-09-20 16:58 ` Florian Weimer
  0 siblings, 2 replies; 17+ messages in thread
From: Wilco Dijkstra @ 2018-09-20 16:27 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha, nd

Hi Florian,

My question is, would a new config option really be useful? Errno can be set
outside the critical paths, so inlining it doesn't help at all. Therefore this should
be done by default.

Similarly the strtod_nan* dependency seems worthwhile to remove too.
If these are the main dependencies between libc and libm, I can't see
the value of adding a new config option.

Wilco

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2018-09-20 17:35 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-11 15:43 [PATCH] Introduce --enable-math-noprivate Florian Weimer
2018-05-11 16:36 ` Adhemerval Zanella
2018-05-11 17:23   ` Florian Weimer
2018-05-16  4:54 ` Florian Weimer
2018-06-07 13:38   ` Florian Weimer
2018-06-08  9:03     ` Szabolcs Nagy
2018-06-08 11:22       ` Adhemerval Zanella
2018-06-08 12:12         ` Florian Weimer
2018-06-08 12:56           ` Adhemerval Zanella
2018-06-08 12:11       ` Florian Weimer
2018-09-20 14:01 Florian Weimer
2018-09-20 16:27 Wilco Dijkstra
2018-09-20 16:35 ` Joseph Myers
2018-09-20 16:58 ` Florian Weimer
2018-09-20 17:11   ` Joseph Myers
2018-09-20 17:25     ` Florian Weimer
2018-09-20 17:35       ` Joseph Myers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).