* [PATCH v2 1/2] powerpc: Add space for HWCAP3/HWCAP4 in the TCB for future Power.
@ 2023-12-05 12:38 Manjunath Matti
2023-12-05 12:38 ` [PATCH v2 2/2] powerpc: Add HWCAP3/HWCAP4 data to TCB for Power Architecture Manjunath Matti
2023-12-13 23:45 ` [PATCH v2 1/2] powerpc: Add space for HWCAP3/HWCAP4 in the TCB for future Power Peter Bergner
0 siblings, 2 replies; 6+ messages in thread
From: Manjunath Matti @ 2023-12-05 12:38 UTC (permalink / raw)
To: libc-alpha; +Cc: bergner, fweimer, Manjunath Matti
This patch reserves space for HWCAP3/HWCAP4 in the TCB of powerpc.
These hardware capabilities bits will be used by future Power
architectures.
Versioned symbol '__parse_hwcap_3_4_and_convert_at_platform' advertises
the availability of the new HWCAP3/HWCAP4 data in the TCB.
This is an ABI change for GLIBC 2.39.
Suggested-by: Peter Bergner <bergner@linux.ibm.com>
---
sysdeps/powerpc/Versions | 5 +++++
sysdeps/powerpc/hwcapinfo.c | 5 +++++
sysdeps/powerpc/nptl/tcb-offsets.sym | 1 +
sysdeps/powerpc/nptl/tls.h | 13 ++++++++++++-
.../unix/sysv/linux/powerpc/powerpc32/ld.abilist | 1 +
.../unix/sysv/linux/powerpc/powerpc64/be/ld.abilist | 1 +
.../unix/sysv/linux/powerpc/powerpc64/le/ld.abilist | 1 +
7 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/sysdeps/powerpc/Versions b/sysdeps/powerpc/Versions
index cca8fd2fc5..575f7317bf 100644
--- a/sysdeps/powerpc/Versions
+++ b/sysdeps/powerpc/Versions
@@ -24,4 +24,9 @@ ld {
# and AT_PLATFORM data should be stored into the TCB.
__parse_hwcap_and_convert_at_platform;
}
+ GLIBC_2.39 {
+ # Symbol used to version control when the ABI started to specify that
+ # HWCAP3 and HWCAP4 are stored in the TCB.
+ __parse_hwcap_3_4_and_convert_at_platform;
+ }
}
diff --git a/sysdeps/powerpc/hwcapinfo.c b/sysdeps/powerpc/hwcapinfo.c
index f2c473c556..a4d5aa1fa6 100644
--- a/sysdeps/powerpc/hwcapinfo.c
+++ b/sysdeps/powerpc/hwcapinfo.c
@@ -70,11 +70,14 @@ __tcb_parse_hwcap_and_convert_at_platform (void)
/* Consolidate both HWCAP and HWCAP2 into a single doubleword so that
we can read both in a single load later. */
__tcb.hwcap = (h1 << 32) | (h2 & 0xffffffff);
+ __tcb.hwcap_extn = 0x0;
}
#if IS_IN (rtld)
versioned_symbol (ld, __tcb_parse_hwcap_and_convert_at_platform, \
__parse_hwcap_and_convert_at_platform, GLIBC_2_23);
+versioned_symbol (ld, __tcb_parse_hwcap_and_convert_at_platform, \
+ __parse_hwcap_3_4_and_convert_at_platform, GLIBC_2_39);
#endif
/* Export __parse_hwcap_and_convert_at_platform in libc.a. This is used by
@@ -83,4 +86,6 @@ versioned_symbol (ld, __tcb_parse_hwcap_and_convert_at_platform, \
#ifndef SHARED
weak_alias (__tcb_parse_hwcap_and_convert_at_platform, \
__parse_hwcap_and_convert_at_platform);
+weak_alias (__tcb_parse_hwcap_and_convert_at_platform, \
+ __parse_hwcap_3_4_and_convert_at_platform);
#endif
diff --git a/sysdeps/powerpc/nptl/tcb-offsets.sym b/sysdeps/powerpc/nptl/tcb-offsets.sym
index 4c01615ad0..9b29fe8d1a 100644
--- a/sysdeps/powerpc/nptl/tcb-offsets.sym
+++ b/sysdeps/powerpc/nptl/tcb-offsets.sym
@@ -26,3 +26,4 @@ TCB_AT_PLATFORM (offsetof (tcbhead_t, at_platform) - TLS_TCB_OFFSET - sizeof(t
PADDING (offsetof (tcbhead_t, padding) - TLS_TCB_OFFSET - sizeof(tcbhead_t))
#endif
TCB_HWCAP (offsetof (tcbhead_t, hwcap) - TLS_TCB_OFFSET - sizeof (tcbhead_t))
+TCB_HWCAP_EXTN (offsetof (tcbhead_t, hwcap_extn) - TLS_TCB_OFFSET - sizeof (tcbhead_t))
diff --git a/sysdeps/powerpc/nptl/tls.h b/sysdeps/powerpc/nptl/tls.h
index a668798181..3f8eca57b5 100644
--- a/sysdeps/powerpc/nptl/tls.h
+++ b/sysdeps/powerpc/nptl/tls.h
@@ -64,6 +64,9 @@
are private. */
typedef struct
{
+ /* Reservation for HWCAP3 and HWCAP4 data. To be accessed by GCC in
+ __builtin_cpu_supports(), so it is a part of the public ABI. */
+ uint64_t hwcap_extn;
/* Reservation for HWCAP data. To be accessed by GCC in
__builtin_cpu_supports(), so it is a part of public ABI. */
uint64_t hwcap;
@@ -138,6 +141,7 @@ typedef struct
({ \
__thread_register = (void *) (tcbp) + TLS_TCB_OFFSET; \
THREAD_SET_HWCAP (__tcb.hwcap); \
+ THREAD_SET_HWCAP_EXTN (__tcb.hwcap_extn); \
THREAD_SET_AT_PLATFORM (__tcb.at_platform); \
true; \
})
@@ -147,6 +151,8 @@ typedef struct
void *tp = (void *) (pd) + TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE; \
(((tcbhead_t *) ((char *) tp - TLS_TCB_OFFSET))[-1].hwcap) = \
THREAD_GET_HWCAP (); \
+ (((tcbhead_t *) ((char *) tp - TLS_TCB_OFFSET))[-1].hwcap_extn) = \
+ THREAD_GET_HWCAP_EXTN (); \
(((tcbhead_t *) ((char *) tp - TLS_TCB_OFFSET))[-1].at_platform) = \
THREAD_GET_AT_PLATFORM ();
@@ -189,12 +195,17 @@ typedef struct
+ TLS_PRE_TCB_SIZE))[-1].pointer_guard \
= THREAD_GET_POINTER_GUARD())
-/* hwcap field in TCB head. */
+/* hwcap & hwcap_extn fields in TCB head. */
# define THREAD_GET_HWCAP() \
(((tcbhead_t *) ((char *) __thread_register \
- TLS_TCB_OFFSET))[-1].hwcap)
+# define THREAD_GET_HWCAP_EXTN() \
+ (((tcbhead_t *) ((char *) __thread_register \
+ - TLS_TCB_OFFSET))[-1].hwcap_extn)
# define THREAD_SET_HWCAP(value) \
(THREAD_GET_HWCAP () = (value))
+# define THREAD_SET_HWCAP_EXTN(value) \
+ (THREAD_GET_HWCAP_EXTN () = (value))
/* at_platform field in TCB head. */
# define THREAD_GET_AT_PLATFORM() \
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist
index 5a68aeb9ee..b1073f0942 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist
@@ -8,3 +8,4 @@ GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
GLIBC_2.35 __rseq_offset D 0x4
GLIBC_2.35 __rseq_size D 0x4
+GLIBC_2.39 __parse_hwcap_3_4_and_convert_at_platform F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
index 21f472e674..40942a2cc6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
@@ -8,3 +8,4 @@ GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
GLIBC_2.35 __rseq_offset D 0x8
GLIBC_2.35 __rseq_size D 0x4
+GLIBC_2.39 __parse_hwcap_3_4_and_convert_at_platform F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
index 9c9c40450d..01f2694a4d 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
@@ -8,3 +8,4 @@ GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
GLIBC_2.35 __rseq_offset D 0x8
GLIBC_2.35 __rseq_size D 0x4
+GLIBC_2.39 __parse_hwcap_3_4_and_convert_at_platform F
--
2.39.3
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 2/2] powerpc: Add HWCAP3/HWCAP4 data to TCB for Power Architecture.
2023-12-05 12:38 [PATCH v2 1/2] powerpc: Add space for HWCAP3/HWCAP4 in the TCB for future Power Manjunath Matti
@ 2023-12-05 12:38 ` Manjunath Matti
2023-12-13 23:47 ` Peter Bergner
2023-12-13 23:45 ` [PATCH v2 1/2] powerpc: Add space for HWCAP3/HWCAP4 in the TCB for future Power Peter Bergner
1 sibling, 1 reply; 6+ messages in thread
From: Manjunath Matti @ 2023-12-05 12:38 UTC (permalink / raw)
To: libc-alpha; +Cc: bergner, fweimer, Manjunath Matti
This patch adds a new feature for powerpc. In order to get faster
access to the HWCAP3/HWCAP4 masks, similar to HWCAP/HWCAP2 (i.e. for
implementing __builtin_cpu_supports() in GCC) without the overhead of
reading them from the auxiliary vector, we now reserve space for them
in the TCB.
This is an ABI change for GLIBC 2.39.
Suggested-by: Peter Bergner <bergner@linux.ibm.com>
---
elf/dl-diagnostics.c | 2 +
elf/dl-support.c | 2 +
elf/elf.h | 4 ++
sysdeps/generic/ldsodefs.h | 2 +
sysdeps/powerpc/dl-procinfo.c | 6 ++-
sysdeps/powerpc/dl-procinfo.h | 52 +++++++++++++------
sysdeps/powerpc/hwcapinfo.c | 11 ++--
sysdeps/unix/sysv/linux/dl-parse_auxv.h | 2 +
sysdeps/unix/sysv/linux/dl-sysdep.c | 2 +
.../unix/sysv/linux/powerpc/cpu-features.c | 2 +
.../unix/sysv/linux/powerpc/cpu-features.h | 2 +
sysdeps/unix/sysv/linux/powerpc/libc-start.c | 6 +++
12 files changed, 74 insertions(+), 19 deletions(-)
diff --git a/elf/dl-diagnostics.c b/elf/dl-diagnostics.c
index d742cf0a99..68bd521253 100644
--- a/elf/dl-diagnostics.c
+++ b/elf/dl-diagnostics.c
@@ -235,6 +235,8 @@ _dl_print_diagnostics (char **environ)
_dl_diagnostics_print_labeled_value ("dl_hwcap", GLRO (dl_hwcap));
_dl_diagnostics_print_labeled_value ("dl_hwcap_important", HWCAP_IMPORTANT);
_dl_diagnostics_print_labeled_value ("dl_hwcap2", GLRO (dl_hwcap2));
+ _dl_diagnostics_print_labeled_value ("dl_hwcap3", GLRO (dl_hwcap3));
+ _dl_diagnostics_print_labeled_value ("dl_hwcap4", GLRO (dl_hwcap4));
_dl_diagnostics_print_labeled_string
("dl_hwcaps_subdirs", _dl_hwcaps_subdirs);
_dl_diagnostics_print_labeled_value
diff --git a/elf/dl-support.c b/elf/dl-support.c
index 837fa1c836..ff9560ce72 100644
--- a/elf/dl-support.c
+++ b/elf/dl-support.c
@@ -158,6 +158,8 @@ const ElfW(Phdr) *_dl_phdr;
size_t _dl_phnum;
uint64_t _dl_hwcap;
uint64_t _dl_hwcap2;
+uint64_t _dl_hwcap3;
+uint64_t _dl_hwcap4;
enum dso_sort_algorithm _dl_dso_sort_algo;
diff --git a/elf/elf.h b/elf/elf.h
index 5c1c1972d1..4f7cb7385f 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -1234,6 +1234,10 @@ typedef struct
#define AT_RSEQ_FEATURE_SIZE 27 /* rseq supported feature size. */
#define AT_RSEQ_ALIGN 28 /* rseq allocation alignment. */
+/* More machine-dependent hints about processor capabilities. */
+#define AT_HWCAP3 29 /* extension of AT_HWCAP. */
+#define AT_HWCAP4 30 /* extension of AT_HWCAP. */
+
#define AT_EXECFN 31 /* Filename of executable. */
/* Pointer to the global system page used for system calls and other
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index 9b50ddd09f..4c7b60d8e1 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -646,6 +646,8 @@ struct rtld_global_ro
/* Mask for more hardware capabilities that are available on some
platforms. */
EXTERN uint64_t _dl_hwcap2;
+ EXTERN uint64_t _dl_hwcap3;
+ EXTERN uint64_t _dl_hwcap4;
EXTERN enum dso_sort_algorithm _dl_dso_sort_algo;
diff --git a/sysdeps/powerpc/dl-procinfo.c b/sysdeps/powerpc/dl-procinfo.c
index 6b9dad24d8..376a4b6118 100644
--- a/sysdeps/powerpc/dl-procinfo.c
+++ b/sysdeps/powerpc/dl-procinfo.c
@@ -38,6 +38,10 @@
needed.
*/
+/* The total number of available bits (including those prior to
+ _DL_HWCAP_FIRST). Some of these bits might not be used. */
+#define _DL_HWCAP_COUNT 128
+
#ifndef PROCINFO_CLASS
# define PROCINFO_CLASS
#endif
@@ -61,7 +65,7 @@ PROCINFO_CLASS struct cpu_features _dl_powerpc_cpu_features
#if !defined PROCINFO_DECL && defined SHARED
._dl_powerpc_cap_flags
#else
-PROCINFO_CLASS const char _dl_powerpc_cap_flags[64][15]
+PROCINFO_CLASS const char _dl_powerpc_cap_flags[_DL_HWCAP_COUNT][15]
#endif
#ifndef PROCINFO_DECL
= {
diff --git a/sysdeps/powerpc/dl-procinfo.h b/sysdeps/powerpc/dl-procinfo.h
index 641eb54380..f8c2a52c31 100644
--- a/sysdeps/powerpc/dl-procinfo.h
+++ b/sysdeps/powerpc/dl-procinfo.h
@@ -22,16 +22,17 @@
#include <ldsodefs.h>
#include <sysdep.h> /* This defines the PPC_FEATURE[2]_* macros. */
-/* The total number of available bits (including those prior to
- _DL_HWCAP_FIRST). Some of these bits might not be used. */
-#define _DL_HWCAP_COUNT 64
+/* Feature masks are all 32-bits in size. */
+#define _DL_HWCAP_SIZE 32
-/* Features started at bit 31 and decremented as new features were added. */
-#define _DL_HWCAP_LAST 31
+/* AT_HWCAP2 feature strings follow the AT_HWCAP feature strings. */
+#define _DL_HWCAP2_OFFSET _DL_HWCAP_SIZE
-/* AT_HWCAP2 features started at bit 31 and decremented as new features were
- added. HWCAP2 feature bits start at bit 0. */
-#define _DL_HWCAP2_LAST 31
+/* AT_HWCAP3 feature strings follow the AT_HWCAP2 feature strings. */
+#define _DL_HWCAP3_OFFSET (_DL_HWCAP2_OFFSET + _DL_HWCAP_SIZE)
+
+/* AT_HWCAP4 feature strings follow the AT_HWCAP3 feature strings. */
+#define _DL_HWCAP4_OFFSET (_DL_HWCAP3_OFFSET + _DL_HWCAP_SIZE)
/* These bits influence library search. */
#define HWCAP_IMPORTANT (PPC_FEATURE_HAS_ALTIVEC \
@@ -187,21 +188,42 @@ _dl_procinfo (unsigned int type, unsigned long int word)
case AT_HWCAP:
_dl_printf ("AT_HWCAP: ");
- for (int i = 0; i <= _DL_HWCAP_LAST; ++i)
+ for (int i = 0; i < _DL_HWCAP_SIZE; ++i)
if (word & (1 << i))
_dl_printf (" %s", _dl_hwcap_string (i));
break;
case AT_HWCAP2:
{
- unsigned int offset = _DL_HWCAP_LAST + 1;
_dl_printf ("AT_HWCAP2: ");
- /* We have to go through them all because the kernel added the
- AT_HWCAP2 features starting with the high bits. */
- for (int i = 0; i <= _DL_HWCAP2_LAST; ++i)
- if (word & (1 << i))
- _dl_printf (" %s", _dl_hwcap_string (offset + i));
+ /* We have to go through them all because the kernel added the
+ AT_HWCAP2 features starting with the high bits. */
+ for (int i = 0; i < _DL_HWCAP_SIZE; ++i)
+ if (word & (1 << i))
+ _dl_printf (" %s", _dl_hwcap_string (_DL_HWCAP2_OFFSET + i));
+ break;
+ }
+ case AT_HWCAP3:
+ {
+ _dl_printf ("AT_HWCAP3: ");
+
+ /* We have to go through them all because the kernel added the
+ AT_HWCAP3 features starting with the high bits. */
+ for (int i = 0; i < _DL_HWCAP_SIZE; ++i)
+ if (word & (1 << i))
+ _dl_printf (" %s", _dl_hwcap_string (_DL_HWCAP3_OFFSET + i));
+ break;
+ }
+ case AT_HWCAP4:
+ {
+ _dl_printf ("AT_HWCAP4: ");
+
+ /* We have to go through them all because the kernel added the
+ AT_HWCAP4 features starting with the high bits. */
+ for (int i = 0; i <= _DL_HWCAP_SIZE; ++i)
+ if (word & (1 << i))
+ _dl_printf (" %s", _dl_hwcap_string (_DL_HWCAP4_OFFSET + i));
break;
}
case AT_L1I_CACHEGEOMETRY:
diff --git a/sysdeps/powerpc/hwcapinfo.c b/sysdeps/powerpc/hwcapinfo.c
index a4d5aa1fa6..9db9fa2c18 100644
--- a/sysdeps/powerpc/hwcapinfo.c
+++ b/sysdeps/powerpc/hwcapinfo.c
@@ -31,7 +31,7 @@ void
__tcb_parse_hwcap_and_convert_at_platform (void)
{
- uint64_t h1, h2;
+ uint64_t h1, h2, h3, h4;
/* Read AT_PLATFORM string from auxv and convert it to a number. */
__tcb.at_platform = _dl_string_platform (GLRO (dl_platform));
@@ -39,6 +39,8 @@ __tcb_parse_hwcap_and_convert_at_platform (void)
/* Read HWCAP and HWCAP2 from auxv. */
h1 = GLRO (dl_hwcap);
h2 = GLRO (dl_hwcap2);
+ h3 = GLRO (dl_hwcap3);
+ h4 = GLRO (dl_hwcap4);
/* hwcap contains only the latest supported ISA, the code checks which is
and fills the previous supported ones. */
@@ -64,13 +66,16 @@ __tcb_parse_hwcap_and_convert_at_platform (void)
else if (h1 & PPC_FEATURE_POWER5)
h1 |= PPC_FEATURE_POWER4;
- uint64_t array_hwcaps[] = { h1, h2 };
+ uint64_t array_hwcaps[] = { h1, h2, h3, h4 };
init_cpu_features (&GLRO(dl_powerpc_cpu_features), array_hwcaps);
/* Consolidate both HWCAP and HWCAP2 into a single doubleword so that
we can read both in a single load later. */
__tcb.hwcap = (h1 << 32) | (h2 & 0xffffffff);
- __tcb.hwcap_extn = 0x0;
+
+ /* Consolidate both HWCAP3 and HWCAP4 into a single doubleword so that
+ we can read both in a single load later. */
+ __tcb.hwcap_extn = (h3 << 32) | (h4 & 0xffffffff);
}
#if IS_IN (rtld)
diff --git a/sysdeps/unix/sysv/linux/dl-parse_auxv.h b/sysdeps/unix/sysv/linux/dl-parse_auxv.h
index cf5e81bf2c..74e95814cd 100644
--- a/sysdeps/unix/sysv/linux/dl-parse_auxv.h
+++ b/sysdeps/unix/sysv/linux/dl-parse_auxv.h
@@ -47,6 +47,8 @@ void _dl_parse_auxv (ElfW(auxv_t) *av, dl_parse_auxv_t auxv_values)
GLRO(dl_platform) = (void *) auxv_values[AT_PLATFORM];
GLRO(dl_hwcap) = auxv_values[AT_HWCAP];
GLRO(dl_hwcap2) = auxv_values[AT_HWCAP2];
+ GLRO(dl_hwcap3) = auxv_values[AT_HWCAP3];
+ GLRO(dl_hwcap4) = auxv_values[AT_HWCAP4];
GLRO(dl_clktck) = auxv_values[AT_CLKTCK];
GLRO(dl_fpu_control) = auxv_values[AT_FPUCW];
_dl_random = (void *) auxv_values[AT_RANDOM];
diff --git a/sysdeps/unix/sysv/linux/dl-sysdep.c b/sysdeps/unix/sysv/linux/dl-sysdep.c
index 1b3dd869b5..e497206602 100644
--- a/sysdeps/unix/sysv/linux/dl-sysdep.c
+++ b/sysdeps/unix/sysv/linux/dl-sysdep.c
@@ -197,6 +197,8 @@ _dl_show_auxv (void)
[AT_SYSINFO_EHDR - 2] = { "SYSINFO_EHDR: 0x", hex },
[AT_RANDOM - 2] = { "RANDOM: 0x", hex },
[AT_HWCAP2 - 2] = { "HWCAP2: 0x", hex },
+ [AT_HWCAP3 - 2] = { "HWCAP3: 0x", hex },
+ [AT_HWCAP4 - 2] = { "HWCAP4: 0x", hex },
[AT_MINSIGSTKSZ - 2] = { "MINSIGSTKSZ: ", dec },
[AT_L1I_CACHESIZE - 2] = { "L1I_CACHESIZE: ", dec },
[AT_L1I_CACHEGEOMETRY - 2] = { "L1I_CACHEGEOMETRY: 0x", hex },
diff --git a/sysdeps/unix/sysv/linux/powerpc/cpu-features.c b/sysdeps/unix/sysv/linux/powerpc/cpu-features.c
index 7c6e20e702..7c39e97cc6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/cpu-features.c
+++ b/sysdeps/unix/sysv/linux/powerpc/cpu-features.c
@@ -113,6 +113,8 @@ init_cpu_features (struct cpu_features *cpu_features, uint64_t hwcaps[])
which are set by __tcb_parse_hwcap_and_convert_at_platform. */
cpu_features->hwcap = hwcaps[0];
cpu_features->hwcap2 = hwcaps[1];
+ cpu_features->hwcap3 = hwcaps[2];
+ cpu_features->hwcap4 = hwcaps[3];
/* Default is to use aligned memory access on optimized function unless
tunables is enable, since for this case user can explicit disable
unaligned optimizations. */
diff --git a/sysdeps/unix/sysv/linux/powerpc/cpu-features.h b/sysdeps/unix/sysv/linux/powerpc/cpu-features.h
index e5fce88e5e..e7bdca9994 100644
--- a/sysdeps/unix/sysv/linux/powerpc/cpu-features.h
+++ b/sysdeps/unix/sysv/linux/powerpc/cpu-features.h
@@ -26,6 +26,8 @@ struct cpu_features
bool use_cached_memopt;
unsigned long int hwcap;
unsigned long int hwcap2;
+ unsigned long int hwcap3;
+ unsigned long int hwcap4;
};
static const char hwcap_names[] = {
diff --git a/sysdeps/unix/sysv/linux/powerpc/libc-start.c b/sysdeps/unix/sysv/linux/powerpc/libc-start.c
index b6aec4615d..34b9bc7c8f 100644
--- a/sysdeps/unix/sysv/linux/powerpc/libc-start.c
+++ b/sysdeps/unix/sysv/linux/powerpc/libc-start.c
@@ -87,6 +87,12 @@ __libc_start_main_impl (int argc, char **argv,
case AT_HWCAP2:
_dl_hwcap2 = (unsigned long int) av->a_un.a_val;
break;
+ case AT_HWCAP3:
+ _dl_hwcap3 = (unsigned long int) av->a_un.a_val;
+ break;
+ case AT_HWCAP4:
+ _dl_hwcap4 = (unsigned long int) av->a_un.a_val;
+ break;
case AT_PLATFORM:
_dl_platform = (void *) av->a_un.a_val;
break;
--
2.39.3
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] powerpc: Add space for HWCAP3/HWCAP4 in the TCB for future Power.
2023-12-05 12:38 [PATCH v2 1/2] powerpc: Add space for HWCAP3/HWCAP4 in the TCB for future Power Manjunath Matti
2023-12-05 12:38 ` [PATCH v2 2/2] powerpc: Add HWCAP3/HWCAP4 data to TCB for Power Architecture Manjunath Matti
@ 2023-12-13 23:45 ` Peter Bergner
2023-12-14 23:05 ` Rajalakshmi Srinivasaraghavan
1 sibling, 1 reply; 6+ messages in thread
From: Peter Bergner @ 2023-12-13 23:45 UTC (permalink / raw)
To: Manjunath Matti, libc-alpha; +Cc: fweimer
On 12/5/23 6:38 AM, Manjunath Matti wrote:
> This patch reserves space for HWCAP3/HWCAP4 in the TCB of powerpc.
> These hardware capabilities bits will be used by future Power
> architectures.
>
> Versioned symbol '__parse_hwcap_3_4_and_convert_at_platform' advertises
> the availability of the new HWCAP3/HWCAP4 data in the TCB.
>
> This is an ABI change for GLIBC 2.39.
>
> Suggested-by: Peter Bergner <bergner@linux.ibm.com>
> ---
> sysdeps/powerpc/Versions | 5 +++++
> sysdeps/powerpc/hwcapinfo.c | 5 +++++
> sysdeps/powerpc/nptl/tcb-offsets.sym | 1 +
> sysdeps/powerpc/nptl/tls.h | 13 ++++++++++++-
> .../unix/sysv/linux/powerpc/powerpc32/ld.abilist | 1 +
> .../unix/sysv/linux/powerpc/powerpc64/be/ld.abilist | 1 +
> .../unix/sysv/linux/powerpc/powerpc64/le/ld.abilist | 1 +
> 7 files changed, 26 insertions(+), 1 deletion(-)
LGTM.
Reviewed-by: Peter Bergner <bergner@linux.ibm.com>
Peter
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] powerpc: Add HWCAP3/HWCAP4 data to TCB for Power Architecture.
2023-12-05 12:38 ` [PATCH v2 2/2] powerpc: Add HWCAP3/HWCAP4 data to TCB for Power Architecture Manjunath Matti
@ 2023-12-13 23:47 ` Peter Bergner
2024-03-19 23:50 ` Peter Bergner
0 siblings, 1 reply; 6+ messages in thread
From: Peter Bergner @ 2023-12-13 23:47 UTC (permalink / raw)
To: Manjunath Matti, libc-alpha; +Cc: fweimer
On 12/5/23 6:38 AM, Manjunath Matti wrote:
> This patch adds a new feature for powerpc. In order to get faster
> access to the HWCAP3/HWCAP4 masks, similar to HWCAP/HWCAP2 (i.e. for
> implementing __builtin_cpu_supports() in GCC) without the overhead of
> reading them from the auxiliary vector, we now reserve space for them
> in the TCB.
>
> This is an ABI change for GLIBC 2.39.
>
> Suggested-by: Peter Bergner <bergner@linux.ibm.com>
> ---
> elf/dl-diagnostics.c | 2 +
> elf/dl-support.c | 2 +
> elf/elf.h | 4 ++
> sysdeps/generic/ldsodefs.h | 2 +
> sysdeps/powerpc/dl-procinfo.c | 6 ++-
> sysdeps/powerpc/dl-procinfo.h | 52 +++++++++++++------
> sysdeps/powerpc/hwcapinfo.c | 11 ++--
> sysdeps/unix/sysv/linux/dl-parse_auxv.h | 2 +
> sysdeps/unix/sysv/linux/dl-sysdep.c | 2 +
> .../unix/sysv/linux/powerpc/cpu-features.c | 2 +
> .../unix/sysv/linux/powerpc/cpu-features.h | 2 +
> sysdeps/unix/sysv/linux/powerpc/libc-start.c | 6 +++
> 12 files changed, 74 insertions(+), 19 deletions(-)
LGTM. The only catch is that this patch is dependent on the associated
kernel patch that adds the AT_HWCAP3 and AT_HWCAP4 getting upstream so
glibc can rely on their values. I'm still working on upstreaming that.
Reviewed-by: Peter Bergner <bergner@linux.ibm.com>
Peter
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] powerpc: Add space for HWCAP3/HWCAP4 in the TCB for future Power.
2023-12-13 23:45 ` [PATCH v2 1/2] powerpc: Add space for HWCAP3/HWCAP4 in the TCB for future Power Peter Bergner
@ 2023-12-14 23:05 ` Rajalakshmi Srinivasaraghavan
0 siblings, 0 replies; 6+ messages in thread
From: Rajalakshmi Srinivasaraghavan @ 2023-12-14 23:05 UTC (permalink / raw)
To: libc-alpha
On 12/13/23 5:45 PM, Peter Bergner wrote:
> On 12/5/23 6:38 AM, Manjunath Matti wrote:
>> This patch reserves space for HWCAP3/HWCAP4 in the TCB of powerpc.
>> These hardware capabilities bits will be used by future Power
>> architectures.
>>
>> Versioned symbol '__parse_hwcap_3_4_and_convert_at_platform' advertises
>> the availability of the new HWCAP3/HWCAP4 data in the TCB.
>>
>> This is an ABI change for GLIBC 2.39.
>>
>> Suggested-by: Peter Bergner <bergner@linux.ibm.com>
>> ---
>> sysdeps/powerpc/Versions | 5 +++++
>> sysdeps/powerpc/hwcapinfo.c | 5 +++++
>> sysdeps/powerpc/nptl/tcb-offsets.sym | 1 +
>> sysdeps/powerpc/nptl/tls.h | 13 ++++++++++++-
>> .../unix/sysv/linux/powerpc/powerpc32/ld.abilist | 1 +
>> .../unix/sysv/linux/powerpc/powerpc64/be/ld.abilist | 1 +
>> .../unix/sysv/linux/powerpc/powerpc64/le/ld.abilist | 1 +
>> 7 files changed, 26 insertions(+), 1 deletion(-)
> LGTM.
>
> Reviewed-by: Peter Bergner <bergner@linux.ibm.com>
>
> Peter
Thanks Peter for the review. I will merge the first patch.
Since the second patch depends on the kernel patch, we can review and
merge that later.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] powerpc: Add HWCAP3/HWCAP4 data to TCB for Power Architecture.
2023-12-13 23:47 ` Peter Bergner
@ 2024-03-19 23:50 ` Peter Bergner
0 siblings, 0 replies; 6+ messages in thread
From: Peter Bergner @ 2024-03-19 23:50 UTC (permalink / raw)
To: Manjunath Matti, libc-alpha; +Cc: fweimer
On 12/13/23 5:47 PM, Peter Bergner wrote:
> On 12/5/23 6:38 AM, Manjunath Matti wrote:
>> This patch adds a new feature for powerpc. In order to get faster
>> access to the HWCAP3/HWCAP4 masks, similar to HWCAP/HWCAP2 (i.e. for
>> implementing __builtin_cpu_supports() in GCC) without the overhead of
>> reading them from the auxiliary vector, we now reserve space for them
>> in the TCB.
>>
>> This is an ABI change for GLIBC 2.39.
>>
>> Suggested-by: Peter Bergner <bergner@linux.ibm.com>
>> ---
>> elf/dl-diagnostics.c | 2 +
>> elf/dl-support.c | 2 +
>> elf/elf.h | 4 ++
>> sysdeps/generic/ldsodefs.h | 2 +
>> sysdeps/powerpc/dl-procinfo.c | 6 ++-
>> sysdeps/powerpc/dl-procinfo.h | 52 +++++++++++++------
>> sysdeps/powerpc/hwcapinfo.c | 11 ++--
>> sysdeps/unix/sysv/linux/dl-parse_auxv.h | 2 +
>> sysdeps/unix/sysv/linux/dl-sysdep.c | 2 +
>> .../unix/sysv/linux/powerpc/cpu-features.c | 2 +
>> .../unix/sysv/linux/powerpc/cpu-features.h | 2 +
>> sysdeps/unix/sysv/linux/powerpc/libc-start.c | 6 +++
>> 12 files changed, 74 insertions(+), 19 deletions(-)
>
> LGTM. The only catch is that this patch is dependent on the associated
> kernel patch that adds the AT_HWCAP3 and AT_HWCAP4 getting upstream so
> glibc can rely on their values. I'm still working on upstreaming that.
The kernel patch this is dependent on has finally reached Linus's tree,
so I have pushed this patch.
Peter
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-03-19 23:50 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-05 12:38 [PATCH v2 1/2] powerpc: Add space for HWCAP3/HWCAP4 in the TCB for future Power Manjunath Matti
2023-12-05 12:38 ` [PATCH v2 2/2] powerpc: Add HWCAP3/HWCAP4 data to TCB for Power Architecture Manjunath Matti
2023-12-13 23:47 ` Peter Bergner
2024-03-19 23:50 ` Peter Bergner
2023-12-13 23:45 ` [PATCH v2 1/2] powerpc: Add space for HWCAP3/HWCAP4 in the TCB for future Power Peter Bergner
2023-12-14 23:05 ` Rajalakshmi Srinivasaraghavan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).