From: Manjunath Matti <mmatti@linux.ibm.com>
To: libc-alpha@sourceware.org
Cc: bergner@linux.ibm.com, fweimer@redhat.com,
Manjunath Matti <mmatti@linux.ibm.com>
Subject: [PATCH v2 1/2] powerpc: Add space for HWCAP3/HWCAP4 in the TCB for future Power.
Date: Tue, 5 Dec 2023 06:38:47 -0600 [thread overview]
Message-ID: <20231205123848.2505641-1-mmatti@linux.ibm.com> (raw)
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
next reply other threads:[~2023-12-05 12:39 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-05 12:38 Manjunath Matti [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/libc/involved.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231205123848.2505641-1-mmatti@linux.ibm.com \
--to=mmatti@linux.ibm.com \
--cc=bergner@linux.ibm.com \
--cc=fweimer@redhat.com \
--cc=libc-alpha@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).