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.
'--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'
$(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
# 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 \
--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]
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)
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.
#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. */
return false;
}
+#if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
static char *
tunables_strdup (const char *in)
{
return out;
}
+#endif
static char **
get_next_env (char **envp, char **name, size_t *namelen, char **val)
}
}
+#if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
static void
parse_tunables (char *tunestr)
{
return;
}
}
+#endif
static size_t
min_strlen (const char *s)
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);
}
tunable++;
}
+#endif
}
/* Disable the glibc.malloc.check tunable in SETUID/SETGID programs unless
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);
parse_tunables (val);
continue;
}
+#endif
for (int i = 0; i < sizeof (tunable_list) / sizeof (tunable_t); i++)
{
/* 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
@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}