diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2023-11-23 14:29:14 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2023-11-29 09:30:00 -0300 |
commit | a4c3f5f46e850c977cda81c251036475aab8313c (patch) | |
tree | 6463279ee78a80d5aebeb1f351b2fb2d8c447b6a /elf/dl-tunables.c | |
parent | 9469261cf1924d350feeec64d2c80cafbbdcdd4d (diff) | |
download | glibc-a4c3f5f46e850c977cda81c251036475aab8313c.tar glibc-a4c3f5f46e850c977cda81c251036475aab8313c.tar.gz glibc-a4c3f5f46e850c977cda81c251036475aab8313c.tar.bz2 glibc-a4c3f5f46e850c977cda81c251036475aab8313c.zip |
elf: Add a way to check if tunable is set (BZ 27069)
The patch adds two new macros, TUNABLE_GET_DEFAULT and TUNABLE_IS_INITIALIZED,
here the former get the default value with a signature similar to
TUNABLE_GET, while the later returns whether the tunable was set by
the environment variable.
Checked on x86_64-linux-gnu.
Reviewed-by: DJ Delorie <dj@redhat.com>
Tested-by: Zhangfei Gao <zhangfei.gao@linaro.org>
Diffstat (limited to 'elf/dl-tunables.c')
-rw-r--r-- | elf/dl-tunables.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/elf/dl-tunables.c b/elf/dl-tunables.c index 83265bc00b..644d21d1b0 100644 --- a/elf/dl-tunables.c +++ b/elf/dl-tunables.c @@ -145,6 +145,13 @@ tunable_initialize (tunable_t *cur, const char *strval) do_tunable_update_val (cur, &val, NULL, NULL); } +bool +__tunable_is_initialized (tunable_id_t id) +{ + return tunable_list[id].initialized; +} +rtld_hidden_def (__tunable_is_initialized) + void __tunable_set_val (tunable_id_t id, tunable_val_t *valp, tunable_num_t *minp, tunable_num_t *maxp) @@ -333,6 +340,39 @@ __tunables_print (void) } } +void +__tunable_get_default (tunable_id_t id, void *valp) +{ + tunable_t *cur = &tunable_list[id]; + + switch (cur->type.type_code) + { + case TUNABLE_TYPE_UINT_64: + { + *((uint64_t *) valp) = (uint64_t) cur->def.numval; + break; + } + case TUNABLE_TYPE_INT_32: + { + *((int32_t *) valp) = (int32_t) cur->def.numval; + break; + } + case TUNABLE_TYPE_SIZE_T: + { + *((size_t *) valp) = (size_t) cur->def.numval; + break; + } + case TUNABLE_TYPE_STRING: + { + *((const char **)valp) = cur->def.strval; + break; + } + default: + __builtin_unreachable (); + } +} +rtld_hidden_def (__tunable_get_default) + /* Set the tunable value. This is called by the module that the tunable exists in. */ void |