[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 18/20] htl: Implement some support for TLS_DTV_AT_TP
From: |
Sergey Bugaev |
Subject: |
[PATCH v2 18/20] htl: Implement some support for TLS_DTV_AT_TP |
Date: |
Sat, 23 Mar 2024 20:32:59 +0300 |
Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
---
htl/pt-create.c | 2 ++
sysdeps/htl/dl-thread_gscope_wait.c | 16 ++++++++++++++--
sysdeps/mach/hurd/htl/pt-sysdep.c | 9 +++++++++
3 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/htl/pt-create.c b/htl/pt-create.c
index fac61f1b..8a735d99 100644
--- a/htl/pt-create.c
+++ b/htl/pt-create.c
@@ -177,7 +177,9 @@ __pthread_create_internal (struct __pthread **thread,
err = ENOMEM;
goto failed_thread_tls_alloc;
}
+#if TLS_TCB_AT_TP
pthread->tcb->tcb = pthread->tcb;
+#endif
/* And initialize the rest of the machine context. This may include
additional machine- and system-specific initializations that
diff --git a/sysdeps/htl/dl-thread_gscope_wait.c
b/sysdeps/htl/dl-thread_gscope_wait.c
index 90a9a798..ee0a3165 100644
--- a/sysdeps/htl/dl-thread_gscope_wait.c
+++ b/sysdeps/htl/dl-thread_gscope_wait.c
@@ -20,6 +20,18 @@
#include <pthread.h>
#include <htl/pt-internal.h>
+static inline int *
+thread_gscope_flag (struct __pthread *t)
+{
+#if TLS_TCB_AT_TP
+ return &t->tcb->gscope_flag;
+#elif TLS_DTV_AT_TP
+ return &((tcbprehead_t *) t->tcb - 1)->gscope_flag;
+#else
+# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
+#endif
+}
+
void
__thread_gscope_wait (void)
{
@@ -33,10 +45,10 @@ __thread_gscope_wait (void)
for (i = 0; i < GL (dl_pthread_num_threads); ++i)
{
t = GL (dl_pthread_threads[i]);
- if (t == NULL || t->tcb->gscope_flag == THREAD_GSCOPE_FLAG_UNUSED)
+ if (t == NULL || *thread_gscope_flag (t) == THREAD_GSCOPE_FLAG_UNUSED)
continue;
- gscope_flagp = &t->tcb->gscope_flag;
+ gscope_flagp = thread_gscope_flag (t);
/* We have to wait until this thread is done with the global
scope. First tell the thread that we are waiting and
diff --git a/sysdeps/mach/hurd/htl/pt-sysdep.c
b/sysdeps/mach/hurd/htl/pt-sysdep.c
index 270e7753..5372cbf7 100644
--- a/sysdeps/mach/hurd/htl/pt-sysdep.c
+++ b/sysdeps/mach/hurd/htl/pt-sysdep.c
@@ -100,7 +100,16 @@ _init_routine (void *stack)
to the new stack. Pretend it wasn't allocated so that it remains
valid if the main thread terminates. */
thread->stack = 0;
+#if TLS_TCB_AT_TP
thread->tcb = THREAD_SELF;
+#elif TLS_DTV_AT_TP
+ /* Assuming THREAD_SELF is implemented as subtracting TLS_PRE_TCB_SIZE
+ from the value of a thread pointer regsiter, this should optimize
+ down to simply reading that register. */
+ thread->tcb = (tcbhead_t *) (((char *) THREAD_SELF) + TLS_PRE_TCB_SIZE);
+#else
+# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
+#endif
#ifndef PAGESIZE
__pthread_default_attr.__guardsize = __vm_page_size;
--
2.44.0
- [PATCH v2 00/20] aarch64-gnu port & GNU/Hurd on AArch64 progress, Sergey Bugaev, 2024/03/23
- [PATCH v2 01/20] hurd: Move internal functions to internal header, Sergey Bugaev, 2024/03/23
- [PATCH v2 05/20] hurd: Use the RETURN_ADDRESS macro, Sergey Bugaev, 2024/03/23
- [PATCH v2 04/20] hurd: Disable Prefer_MAP_32BIT_EXEC on non-x86_64 for now, Sergey Bugaev, 2024/03/23
- [PATCH v2 06/20] htl: Respect GL(dl_stack_flags) when allocating stacks, Sergey Bugaev, 2024/03/23
- [PATCH v2 08/20] aarch64: Add dl-procinfo, Sergey Bugaev, 2024/03/23
- [PATCH v2 11/20] mach: Add a basic AArch64 port, Sergey Bugaev, 2024/03/23
- [PATCH v2 13/20] hurd: Add a basic AArch64 port, Sergey Bugaev, 2024/03/23
- [PATCH v2 18/20] htl: Implement some support for TLS_DTV_AT_TP,
Sergey Bugaev <=
- [PATCH v2 02/20] hurd: Stop relying on VM_MAX_ADDRESS, Sergey Bugaev, 2024/03/23
- [PATCH v2 03/20] Allow glibc to be compiled without EXEC_PAGESIZE, Sergey Bugaev, 2024/03/23
- [PATCH v2 07/20] aarch64: Move pointer_guard.h out of sysdeps/unix/sysv/linux, Sergey Bugaev, 2024/03/23
- [PATCH v2 10/20] aarch64: Allow building without kernel support for BTI, Sergey Bugaev, 2024/03/23
- [PATCH v2 12/20] mach: Declare the new thread_set_self_state () trap, Sergey Bugaev, 2024/03/23
- [PATCH v2 15/20] hurd: Implement longjmp for AArch64, Sergey Bugaev, 2024/03/23
- [PATCH v2 17/20] hurd: Add an AArch64 signal implementation, Sergey Bugaev, 2024/03/23
- [PATCH v2 09/20] aarch64: Move saving user entry into _dl_start_user, Sergey Bugaev, 2024/03/23
- [PATCH v2 14/20] hurd: Implement TLS on AArch64, Sergey Bugaev, 2024/03/23
- [PATCH v2 16/20] Add FPE_FLTIDO, Sergey Bugaev, 2024/03/23