aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzabolcs Nagy <szabolcs.nagy@arm.com>2022-07-13 12:15:16 +0100
committerSzabolcs Nagy <szabolcs.nagy@arm.com>2022-08-05 19:45:19 +0100
commit01faa1bcd44274b672ab75f13fd7282c9ce9656d (patch)
treebdbdbc0503413c4eb91702e38c2a136601490714
parent63bee6f1550d7b8a2a270d644c5f8514adcf5b29 (diff)
aarch64: morello: nptl: fix thread pointer setup
-rw-r--r--sysdeps/aarch64/nptl/tls.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/sysdeps/aarch64/nptl/tls.h b/sysdeps/aarch64/nptl/tls.h
index 8d62b31e23..92eb5a3b51 100644
--- a/sysdeps/aarch64/nptl/tls.h
+++ b/sysdeps/aarch64/nptl/tls.h
@@ -71,8 +71,13 @@ typedef struct
/* Code to initially initialize the thread pointer. This might need
special attention since 'errno' is not yet available and if the
operation can cause a failure 'errno' must not be touched. */
+# ifdef __CHERI_PURE_CAPABILITY__
+# define TLS_INIT_TP(tcbp) \
+ ({ __asm __volatile ("msr ctpidr_el0, %0" : : "r" (tcbp)); NULL; })
+# else
# define TLS_INIT_TP(tcbp) \
({ __asm __volatile ("msr tpidr_el0, %0" : : "r" (tcbp)); NULL; })
+# endif
/* Value passed to 'clone' for initialization of the thread register. */
# define TLS_DEFINE_INIT_TP(tp, pd) void *tp = (pd) + 1