diff options
-rw-r--r-- | ChangeLog | 23 | ||||
-rw-r--r-- | INSTALL | 18 | ||||
-rw-r--r-- | Makeconfig | 4 | ||||
-rwxr-xr-x | configure | 3 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | elf/Makefile | 4 | ||||
-rw-r--r-- | elf/dl-tunables.c | 12 | ||||
-rw-r--r-- | elf/dl-tunables.h | 4 | ||||
-rw-r--r-- | manual/install.texi | 17 |
9 files changed, 79 insertions, 8 deletions
@@ -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. @@ -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' @@ -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 \ @@ -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} |