aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/powerpc/nptl
diff options
context:
space:
mode:
authorManjunath Matti <mmatti@linux.ibm.com>2023-12-05 06:38:47 -0600
committerRajalakshmi Srinivasaraghavan <rajis@linux.ibm.com>2023-12-15 20:20:14 -0600
commit93a739d4a1c34c9dbb96ced4fbeaa18e02000b6a (patch)
treec2cbab5a0c95f5d40a31514131098ff00d11fded /sysdeps/powerpc/nptl
parent90bcc8721ef82b7378d2b080141228660e862d56 (diff)
downloadglibc-93a739d4a1c34c9dbb96ced4fbeaa18e02000b6a.zip
glibc-93a739d4a1c34c9dbb96ced4fbeaa18e02000b6a.tar.gz
glibc-93a739d4a1c34c9dbb96ced4fbeaa18e02000b6a.tar.bz2
powerpc: Add space for HWCAP3/HWCAP4 in the TCB for future Power.
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> Reviewed-by: Peter Bergner <bergner@linux.ibm.com>
Diffstat (limited to 'sysdeps/powerpc/nptl')
-rw-r--r--sysdeps/powerpc/nptl/tcb-offsets.sym1
-rw-r--r--sysdeps/powerpc/nptl/tls.h13
2 files changed, 13 insertions, 1 deletions
diff --git a/sysdeps/powerpc/nptl/tcb-offsets.sym b/sysdeps/powerpc/nptl/tcb-offsets.sym
index 4c01615..9b29fe8 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 a668798..3f8eca5 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() \