diff options
author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2023-12-21 15:14:08 +0000 |
---|---|---|
committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2024-07-08 09:41:44 +0100 |
commit | f149acd167e49f09afc0402c7bc0aaead94e963a (patch) | |
tree | 1d9a9d5ef5b9b7a16cf91d78f7435d2491a79c79 | |
parent | 4749a0c86aa030348fc44138ea8772bb3a4d075c (diff) | |
download | glibc-f149acd167e49f09afc0402c7bc0aaead94e963a.zip glibc-f149acd167e49f09afc0402c7bc0aaead94e963a.tar.gz glibc-f149acd167e49f09afc0402c7bc0aaead94e963a.tar.bz2 |
aarch64: Add glibc.cpu.aarch64_gcs_policy
policy sets how gcs tunable and gcs marking turns into gcs state:
0: state = tunable
1: state = marking ? tunable : (tunable && dlopen ? err : 0)
2: state = marking ? tunable : (tunable ? err : 0)
TODO: state lock, default policy
-rw-r--r-- | sysdeps/aarch64/dl-tunables.list | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/aarch64/cpu-features.c | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c | 13 |
3 files changed, 25 insertions, 2 deletions
diff --git a/sysdeps/aarch64/dl-tunables.list b/sysdeps/aarch64/dl-tunables.list index c08be86..2a07a62 100644 --- a/sysdeps/aarch64/dl-tunables.list +++ b/sysdeps/aarch64/dl-tunables.list @@ -26,5 +26,10 @@ glibc { minval: 0 default: 0 } + aarch64_gcs_policy { + type: UINT_64 + minval: 0 + default: 0 + } } } diff --git a/sysdeps/unix/sysv/linux/aarch64/cpu-features.c b/sysdeps/unix/sysv/linux/aarch64/cpu-features.c index 016fe27..4f9d70c 100644 --- a/sysdeps/unix/sysv/linux/aarch64/cpu-features.c +++ b/sysdeps/unix/sysv/linux/aarch64/cpu-features.c @@ -178,6 +178,11 @@ init_cpu_features (struct cpu_features *cpu_features) cpu_features->mops = GLRO (dl_hwcap2) & HWCAP2_MOPS; if (GLRO (dl_hwcap2) & HWCAP2_GCS) - /* GCS status may be updated later by binary compatibility checks. */ - GL (dl_aarch64_gcs) = TUNABLE_GET (glibc, cpu, aarch64_gcs, uint64_t, 0); + { + /* GCS status may be updated later by binary compatibility checks. */ + GL (dl_aarch64_gcs) = TUNABLE_GET (glibc, cpu, aarch64_gcs, uint64_t, 0); + /* Fixed GCS policy. */ + GLRO (dl_aarch64_gcs_policy) = + TUNABLE_GET (glibc, cpu, aarch64_gcs_policy, uint64_t, 0); + } } diff --git a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c b/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c index 7af232d..a9d5ee9 100644 --- a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c +++ b/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c @@ -54,6 +54,19 @@ PROCINFO_CLASS struct cpu_features _dl_aarch64_cpu_features # else , # endif +# if !defined PROCINFO_DECL && defined SHARED + ._dl_aarch64_gcs_policy +# else +PROCINFO_CLASS uint64_t _dl_aarch64_gcs_policy +# endif +# ifndef PROCINFO_DECL += 0 +# endif +# if !defined SHARED || defined PROCINFO_DECL +; +# else +, +# endif #endif /* Number of HWCAP bits set. */ |