From: Michael Jeanson Date: Wed, 31 Jul 2024 15:45:54 +0000 (-0400) Subject: Add riscv thread_pointer support with GCC < 10.3 X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=40ea27299d5368d6c693430f8a17c352d2ca50b2;p=librseq.git Add riscv thread_pointer support with GCC < 10.3 Change-Id: I17831a217c31bc0a6f298d4a0904b89c2190a3a7 Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- diff --git a/include/Makefile.am b/include/Makefile.am index 249f8f1..1ae3e55 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -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 index 0000000..7fa2253 --- /dev/null +++ b/include/rseq/arch/riscv/thread-pointer.h @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: MIT */ +/* SPDX-FileCopyrightText: 2024 Michael Jeanson */ + +/* + * rseq/arch/riscv/thread-pointer.h + */ + +#ifndef _RSEQ_RISCV_THREAD_POINTER +#define _RSEQ_RISCV_THREAD_POINTER + +#include + +#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 diff --git a/include/rseq/thread-pointer.h b/include/rseq/thread-pointer.h index 6c85735..264d4b8 100644 --- a/include/rseq/thread-pointer.h +++ b/include/rseq/thread-pointer.h @@ -25,6 +25,10 @@ #include +#elif defined(__riscv) + +#include + #else #include