summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 69e527c3ea..eded27fbe3 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 25619fc520..55d52c5f15 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 b173e4cc08..1a2db6da1d 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 d80d738fd1..eecd0ace74 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 22f5cab200..4a77411b71 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 3cda2c9db8..c3636a64d2 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 8d6914020d..39feecde16 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 a3f5472b45..033781856a 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 d41296294e..2657da108b 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}