Add riscv thread_pointer support with GCC < 10.3
authorMichael Jeanson <mjeanson@efficios.com>
Wed, 31 Jul 2024 15:45:54 +0000 (11:45 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 31 Jul 2024 19:52:34 +0000 (15:52 -0400)
Change-Id: I17831a217c31bc0a6f298d4a0904b89c2190a3a7
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
include/Makefile.am
include/rseq/arch/riscv/thread-pointer.h [new file with mode: 0644]
include/rseq/thread-pointer.h

index 249f8f1d378ac75dd1b76e0f40152632eb337e51..1ae3e55ffbe917616c76fb37e5705b7949f35bb8 100644 (file)
@@ -15,6 +15,7 @@ nobase_include_HEADERS = \
        rseq/arch/ppc/thread-pointer.h \
        rseq/arch/riscv/bits.h \
        rseq/arch/riscv.h \
+       rseq/arch/riscv/thread-pointer.h \
        rseq/arch/s390/bits.h \
        rseq/arch/s390.h \
        rseq/arch/templates/bits.h \
diff --git a/include/rseq/arch/riscv/thread-pointer.h b/include/rseq/arch/riscv/thread-pointer.h
new file mode 100644 (file)
index 0000000..7fa2253
--- /dev/null
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: MIT */
+/* SPDX-FileCopyrightText: 2024 Michael Jeanson <mjeanson@efficios.com> */
+
+/*
+ * rseq/arch/riscv/thread-pointer.h
+ */
+
+#ifndef _RSEQ_RISCV_THREAD_POINTER
+#define _RSEQ_RISCV_THREAD_POINTER
+
+#include <features.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if __GNUC_PREREQ (10, 3)
+static inline __attribute__((always_inline))
+void *rseq_thread_pointer(void)
+{
+       return __builtin_thread_pointer();
+}
+#else
+static inline __attribute__((always_inline))
+void *rseq_thread_pointer(void)
+{
+       void *__result;
+
+       __asm__ ("mv %0, tp" : "=r" (__result));
+       return __result;
+}
+#endif /* !GCC 10.3 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
index 6c857355755375acc8b67408cbc8f139f160bbda..264d4b8eea6932ff7ea2e0261389bd55676206d8 100644 (file)
 
 #include <rseq/arch/ppc/thread-pointer.h>
 
+#elif defined(__riscv)
+
+#include <rseq/arch/riscv/thread-pointer.h>
+
 #else
 
 #include <rseq/arch/generic/thread-pointer.h>
This page took 0.024687 seconds and 4 git commands to generate.