diff options
author | Siddhesh Poyarekar <siddhesh@sourceware.org> | 2017-06-30 22:58:39 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@sourceware.org> | 2017-06-30 22:58:39 +0530 |
commit | 28cfa3a48e59f9c6b9bc25a003a4ede435841382 (patch) | |
tree | ec2c7a24f4fd2a0d8b4e2ead2dabc36b6b3c3cf9 /elf/dl-tunables.h | |
parent | ab85da15301c552e3ea4577a6432aa028bee9295 (diff) | |
download | glibc-28cfa3a48e59f9c6b9bc25a003a4ede435841382.zip glibc-28cfa3a48e59f9c6b9bc25a003a4ede435841382.tar.gz glibc-28cfa3a48e59f9c6b9bc25a003a4ede435841382.tar.bz2 |
tunables, aarch64: New tunable to override cpu
Add a new tunable (glibc.tune.cpu) to override CPU identification on
aarch64. This is useful in two cases: one where it is desirable to
pretend to be another CPU for purposes of testing or because routines
written for that CPU are beneficial for specific workloads and second
where the underlying kernel does not support emulation of MRS to get
the MIDR of the CPU.
* elf/dl-tunables.h (tunable_is_name): Move from...
* elf/dl-tunables.c (is_name): ... here.
(parse_tunables, __tunables_init): Adjust.
* manual/tunables.texi: Document glibc.tune.cpu.
* sysdeps/aarch64/dl-tunables.list: New file.
* sysdeps/unix/sysv/linux/aarch64/cpu-features.c (struct
cpu_list): New type.
(cpu_list): New list of CPU names and their MIDR.
(get_midr_from_mcpu): New function.
(init_cpu_features): Override MIDR if necessary.
Diffstat (limited to 'elf/dl-tunables.h')
-rw-r--r-- | elf/dl-tunables.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/elf/dl-tunables.h b/elf/dl-tunables.h index 6c49dcb..c92882a 100644 --- a/elf/dl-tunables.h +++ b/elf/dl-tunables.h @@ -111,5 +111,22 @@ rtld_hidden_proto (__tunable_get_val) # define TUNABLES_FRONTEND_valstring 1 /* The default value for TUNABLES_FRONTEND. */ # define TUNABLES_FRONTEND_yes TUNABLES_FRONTEND_valstring + +/* Compare two name strings, bounded by the name hardcoded in glibc. */ +static inline bool +__always_inline +tunable_is_name (const char *orig, const char *envname) +{ + for (;*orig != '\0' && *envname != '\0'; envname++, orig++) + if (*orig != *envname) + break; + + /* The ENVNAME is immediately followed by a value. */ + if (*orig == '\0' && *envname == '=') + return true; + else + return false; +} + #endif #endif |