aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@sourceware.org>2016-12-31 23:34:04 +0530
committerSiddhesh Poyarekar <siddhesh@sourceware.org>2016-12-31 23:49:24 +0530
commit6765d5d34d126b26d55e2d73dac4dfec5e6d6241 (patch)
tree4f8c8aebebd366900e8657a91158771e2cf5e058
parent9dd409a5f4a7a053cc962f8371dad0fe5cc22597 (diff)
downloadglibc-6765d5d34d126b26d55e2d73dac4dfec5e6d6241.zip
glibc-6765d5d34d126b26d55e2d73dac4dfec5e6d6241.tar.gz
glibc-6765d5d34d126b26d55e2d73dac4dfec5e6d6241.tar.bz2
Enhance --enable-tunables to select tunables frontend at build time
At the GNU Tools Cauldron 2016, the state of the current tunables patchset was considered OK with the addition of a way to select the frontend to be used for the tunables. That is, to avoid being locked in to one type of frontend initially, it should be possible to build tunables with a different frontend with something as simple as a configure switch. To that effect, this patch enhances the --enable-tunables option to accept more values than just 'yes' or 'no'. The current frontend (and default when enable-tunables is 'yes') is called 'valstring', to select the frontend where a single environment variable is set to a colon-separated value string. More such frontends can be added in future. * Makeconfig (have-tunables): Check for non-negative instead of positive. * configure.ac: Add 'valstring' as a valid value for --enable-tunables. * configure: Regenerate. * elf/Makefile (have-tunables): Check for non-negative instead of positive. (CPPFLAGS-dl-tunables.c): Define TUNABLES_FRONTEND for dl-tunables.c. * elf/dl-tunables.c (GLIBC_TUNABLES): Define only when TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring. (tunables_strdup): Likewise. (disable_tunables): Likewise. (parse_tunables): Likewise. (__tunables_init): Process GLIBC_TUNABLES envvar only when. TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring. * elf/dl-tunables.h (TUNABLES_FRONTEND_valstring): New macro. (TUNABLES_FRONTEND_yes): New macro, define as TUNABLES_FRONTEND_valstring by default. * manual/install.texi: Document new acceptable values for --enable-tunables. * INSTALL: Regenerate.
-rw-r--r--ChangeLog23
-rw-r--r--INSTALL18
-rw-r--r--Makeconfig4
-rwxr-xr-xconfigure3
-rw-r--r--configure.ac2
-rw-r--r--elf/Makefile4
-rw-r--r--elf/dl-tunables.c12
-rw-r--r--elf/dl-tunables.h4
-rw-r--r--manual/install.texi17
9 files changed, 79 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 69e527c..eded27f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,28 @@
2016-12-31 Siddhesh Poyarekar <siddhesh@sourceware.org>
+ * Makeconfig (have-tunables): Check for non-negative instead
+ of positive.
+ * configure.ac: Add 'valstring' as a valid value for
+ --enable-tunables.
+ * configure: Regenerate.
+ * elf/Makefile (have-tunables): Check for non-negative instead
+ of positive.
+ (CPPFLAGS-dl-tunables.c): Define TUNABLES_FRONTEND for
+ dl-tunables.c.
+ * elf/dl-tunables.c (GLIBC_TUNABLES): Define only when
+ TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring.
+ (tunables_strdup): Likewise.
+ (disable_tunables): Likewise.
+ (parse_tunables): Likewise.
+ (__tunables_init): Process GLIBC_TUNABLES envvar only when.
+ TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring.
+ * elf/dl-tunables.h (TUNABLES_FRONTEND_valstring): New macro.
+ (TUNABLES_FRONTEND_yes): New macro, define as
+ TUNABLES_FRONTEND_valstring by default.
+ * manual/install.texi: Document new acceptable values for
+ --enable-tunables.
+ * INSTALL: Regenerate.
+
* config.make.in (have-loop-to-function): Define.
* elf/Makefile (CFLAGS-dl-tunables.c): Add
-fno-tree-loop-distribute-patterns.
diff --git a/INSTALL b/INSTALL
index 25619fc..55d52c5 100644
--- a/INSTALL
+++ b/INSTALL
@@ -172,7 +172,23 @@ will be used, and CFLAGS sets optimization options for the compiler.
'--enable-tunables'
Tunables support allows additional library parameters to be
customized at runtime. This is an experimental feature and affects
- startup time and is thus disabled by default.
+ startup time and is thus disabled by default. This option can take
+ the following values:
+
+ 'no'
+ This is the default if the option is not passed to configure.
+ This disables tunables.
+
+ 'yes'
+ This is the default if the option is passed to configure.
+ This enables tunables and selects the default frontend
+ (currently 'valstring').
+
+ 'valstring'
+ This enables tunables and selects the 'valstring' frontend for
+ tunables. This frontend allows users to specify tunables as a
+ colon-separated list in a single environment variable
+ 'GLIBC_TUNABLES'.
'--build=BUILD-SYSTEM'
'--host=HOST-SYSTEM'
diff --git a/Makeconfig b/Makeconfig
index b173e4c..1a2db6d 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -935,7 +935,7 @@ CPPFLAGS = $(config-extra-cppflags) $(CPPUNDEFS) $(CPPFLAGS-config) \
$(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
$(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))
-ifeq (yes,$(have-tunables))
+ifneq (no,$(have-tunables))
CPPFLAGS += -DTOP_NAMESPACE=glibc
endif
@@ -1115,7 +1115,7 @@ endif
# Build the tunables list header early since it could be used by any module in
# glibc.
-ifeq (yes,$(have-tunables))
+ifneq (no,$(have-tunables))
before-compile += $(common-objpfx)dl-tunable-list.h
$(common-objpfx)dl-tunable-list.h: $(..)scripts/gen-tunables.awk \
diff --git a/configure b/configure
index d80d738..eecd0ac 100755
--- a/configure
+++ b/configure
@@ -1454,7 +1454,8 @@ Optional Features:
--disable-build-nscd disable building and installing the nscd daemon
--disable-nscd library functions will not contact the nscd daemon
--enable-pt_chown Enable building and installing pt_chown
- --enable-tunables Enable tunables support
+ --enable-tunables Enable tunables support. Known values are 'yes',
+ 'no' and 'valstring'
--enable-mathvec Enable building and installing mathvec [default
depends on architecture]
diff --git a/configure.ac b/configure.ac
index 22f5cab..4a77411 100644
--- a/configure.ac
+++ b/configure.ac
@@ -423,7 +423,7 @@ fi
AC_ARG_ENABLE([tunables],
[AS_HELP_STRING([--enable-tunables],
- [Enable tunables support])],
+ [Enable tunables support. Known values are 'yes', 'no' and 'valstring'])],
[have_tunables=$enableval],
[have_tunables=no])
AC_SUBST(have_tunables)
diff --git a/elf/Makefile b/elf/Makefile
index 3cda2c9..c3636a6 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -36,8 +36,10 @@ ifeq (yes,$(use-ldconfig))
dl-routines += dl-cache
endif
-ifeq (yes,$(have-tunables))
+ifneq (no,$(have-tunables))
dl-routines += dl-tunables
+tunables-type = $(addprefix TUNABLES_FRONTEND_,$(have-tunables))
+CPPFLAGS-dl-tunables.c = -DTUNABLES_FRONTEND=$(tunables-type)
# Make sure that the compiler does not insert any library calls in tunables
# code paths.
diff --git a/elf/dl-tunables.c b/elf/dl-tunables.c
index 8d69140..39feecd 100644
--- a/elf/dl-tunables.c
+++ b/elf/dl-tunables.c
@@ -30,7 +30,9 @@
#define TUNABLES_INTERNAL 1
#include "dl-tunables.h"
-#define GLIBC_TUNABLES "GLIBC_TUNABLES"
+#if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
+# define GLIBC_TUNABLES "GLIBC_TUNABLES"
+#endif
/* Compare environment or tunable names, bounded by the name hardcoded in
glibc. */
@@ -48,6 +50,7 @@ is_name (const char *orig, const char *envname)
return false;
}
+#if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
static char *
tunables_strdup (const char *in)
{
@@ -70,6 +73,7 @@ tunables_strdup (const char *in)
return out;
}
+#endif
static char **
get_next_env (char **envp, char **name, size_t *namelen, char **val)
@@ -244,6 +248,7 @@ tunable_initialize (tunable_t *cur, const char *strval)
}
}
+#if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
static void
parse_tunables (char *tunestr)
{
@@ -309,6 +314,7 @@ parse_tunables (char *tunestr)
return;
}
}
+#endif
static size_t
min_strlen (const char *s)
@@ -329,6 +335,7 @@ disable_tunable (tunable_id_t id, char **envp)
if (env_alias != NULL)
tunables_unsetenv (envp, tunable_list[id].env_alias);
+#if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
char *tunable = getenv (GLIBC_TUNABLES);
const char *cmp = tunable_list[id].name;
const size_t len = min_strlen (cmp);
@@ -345,6 +352,7 @@ disable_tunable (tunable_id_t id, char **envp)
}
tunable++;
}
+#endif
}
/* Disable the glibc.malloc.check tunable in SETUID/SETGID programs unless
@@ -375,6 +383,7 @@ __tunables_init (char **envp)
while ((envp = get_next_env (envp, &envname, &len, &envval)) != NULL)
{
+#if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
if (is_name (GLIBC_TUNABLES, envname))
{
char *val = tunables_strdup (envval);
@@ -382,6 +391,7 @@ __tunables_init (char **envp)
parse_tunables (val);
continue;
}
+#endif
for (int i = 0; i < sizeof (tunable_list) / sizeof (tunable_t); i++)
{
diff --git a/elf/dl-tunables.h b/elf/dl-tunables.h
index a3f5472..0337818 100644
--- a/elf/dl-tunables.h
+++ b/elf/dl-tunables.h
@@ -84,5 +84,9 @@ extern void __tunable_set_val (tunable_id_t, void *, tunable_callback_t);
/* Namespace sanity for callback functions. Use this macro to keep the
namespace of the modules clean. */
# define DL_TUNABLE_CALLBACK(__name) _dl_tunable_ ## __name
+
+# define TUNABLES_FRONTEND_valstring 1
+/* The default value for TUNABLES_FRONTEND. */
+# define TUNABLES_FRONTEND_yes TUNABLES_FRONTEND_valstring
#endif
#endif
diff --git a/manual/install.texi b/manual/install.texi
index d412962..2657da1 100644
--- a/manual/install.texi
+++ b/manual/install.texi
@@ -203,7 +203,22 @@ Use this option to disable the vector math library.
@item --enable-tunables
Tunables support allows additional library parameters to be customized at
runtime. This is an experimental feature and affects startup time and is thus
-disabled by default.
+disabled by default. This option can take the following values:
+
+@table @code
+@item no
+This is the default if the option is not passed to configure. This disables
+tunables.
+
+@item yes
+This is the default if the option is passed to configure. This enables tunables
+and selects the default frontend (currently @samp{valstring}).
+
+@item valstring
+This enables tunables and selects the @samp{valstring} frontend for tunables.
+This frontend allows users to specify tunables as a colon-separated list in a
+single environment variable @env{GLIBC_TUNABLES}.
+@end table
@item --build=@var{build-system}
@itemx --host=@var{host-system}