git: 4c2f5bfbfa48 - main - libc: Fix the alignment of the TCB to match rtld for several architectures.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 09 Dec 2021 21:23:43 UTC
The branch main has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=4c2f5bfbfa48b33b11912e7308ebd6f98fb6e647
commit 4c2f5bfbfa48b33b11912e7308ebd6f98fb6e647
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2021-12-09 21:16:57 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2021-12-09 21:16:57 +0000
libc: Fix the alignment of the TCB to match rtld for several architectures.
- Use 16 byte alignment rather than 8 for aarch64, powerpc64, and RISC-V.
- Use 8 byte alignment rather than 4 for 32-bit arm, mips, and powerpc.
I suspect that mips64 should be using 16 byte alignment, but both libc
and rtld currently use 8 byte alignment.
Reviewed by: kib, jrtc27
Sponsored by: The University of Cambridge, Google Inc.
Differential Revision: https://reviews.freebsd.org/D33350
---
lib/libc/gen/tls.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/lib/libc/gen/tls.c b/lib/libc/gen/tls.c
index d90aac028b88..5995cf605ed3 100644
--- a/lib/libc/gen/tls.c
+++ b/lib/libc/gen/tls.c
@@ -72,11 +72,14 @@ void _rtld_free_tls(void *tls, size_t tcbsize, size_t tcbalign);
void *__libc_allocate_tls(void *oldtls, size_t tcbsize, size_t tcbalign);
void __libc_free_tls(void *tls, size_t tcbsize, size_t tcbalign);
-#if defined(__amd64__)
+#if defined(__amd64__) || defined(__aarch64__) || defined(__riscv)
#define TLS_TCB_ALIGN 16
-#elif defined(__aarch64__) || defined(__arm__) || defined(__i386__) || \
- defined(__mips__) || defined(__powerpc__) || defined(__riscv)
-#define TLS_TCB_ALIGN sizeof(void *)
+#elif defined(__arm__) || defined(__mips__)
+#define TLS_TCB_ALIGN 8
+#elif defined(__powerpc__)
+#define TLS_TCB_ALIGN TLS_TCB_SIZE
+#elif defined(__i386__)
+#define TLS_TCB_ALIGN 4
#else
#error TLS_TCB_ALIGN undefined for target architecture
#endif