aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>2024-02-29 09:45:04 -0500
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>2024-02-29 09:52:00 -0500
commit9dc22f846d7f11a9b14dd87911afb2275911c100 (patch)
tree43195450638513f1f41c31e2e1b8a5bfd2a888d0
parent4cf5dcc5791083faada3cb94316f083885e726bd (diff)
downloadlibrseq-9dc22f846d7f11a9b14dd87911afb2275911c100.tar.gz
riscv: Introduce RSEQ_ASM_U64_PTR and RSEQ_ASM_U32
These will allow moving __RSEQ_ASM_DEFINE_TABLE and RSEQ_ASM_DEFINE_EXIT_POINT to a generic common header file. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Change-Id: I9cac7076b9ef9bd7dd4a818b9ad7aae1df45ff5a
-rw-r--r--include/rseq/arch/riscv.h19
1 files changed, 12 insertions, 7 deletions
diff --git a/include/rseq/arch/riscv.h b/include/rseq/arch/riscv.h
index 898958c..3cfb9ac 100644
--- a/include/rseq/arch/riscv.h
+++ b/include/rseq/arch/riscv.h
@@ -77,6 +77,9 @@ do { \
RSEQ_WRITE_ONCE(*(p), v); \
} while (0)
+#define RSEQ_ASM_U64_PTR(x) ".quad " x
+#define RSEQ_ASM_U32(x) ".long " x
+
/* Temporary registers. */
#define RSEQ_ASM_TMP_REG_1 "t6"
#define RSEQ_ASM_TMP_REG_2 "t5"
@@ -89,13 +92,14 @@ do { \
".pushsection __rseq_cs, \"aw\"\n" \
".balign 32\n" \
__rseq_str(label) ":\n" \
- ".long " __rseq_str(version) ", " __rseq_str(flags) "\n" \
- ".quad " __rseq_str(start_ip) ", " \
- __rseq_str(post_commit_offset) ", " \
- __rseq_str(abort_ip) "\n" \
+ RSEQ_ASM_U32(__rseq_str(version)) "\n" \
+ RSEQ_ASM_U32(__rseq_str(flags)) "\n" \
+ RSEQ_ASM_U64_PTR(__rseq_str(start_ip)) "\n" \
+ RSEQ_ASM_U64_PTR(__rseq_str(post_commit_offset)) "\n" \
+ RSEQ_ASM_U64_PTR(__rseq_str(abort_ip)) "\n" \
".popsection\n\t" \
".pushsection __rseq_cs_ptr_array, \"aw\"\n" \
- ".quad " __rseq_str(label) "b\n" \
+ RSEQ_ASM_U64_PTR(__rseq_str(label) "b") "\n" \
".popsection\n"
/*
@@ -137,7 +141,8 @@ do { \
*/
#define RSEQ_ASM_DEFINE_EXIT_POINT(start_ip, exit_ip) \
".pushsection __rseq_exit_point_array, \"aw\"\n" \
- ".quad " __rseq_str(start_ip) ", " __rseq_str(exit_ip) "\n" \
+ RSEQ_ASM_U64_PTR(__rseq_str(start_ip)) "\n" \
+ RSEQ_ASM_U64_PTR(__rseq_str(exit_ip)) "\n" \
".popsection\n"
/*
@@ -153,7 +158,7 @@ do { \
#define RSEQ_ASM_DEFINE_ABORT(label, teardown, abort_label) \
"j 222f\n" \
".balign 4\n" \
- ".long " __rseq_str(RSEQ_SIG) "\n" \
+ RSEQ_ASM_U32(__rseq_str(RSEQ_SIG)) "\n" \
__rseq_str(label) ":\n" \
teardown \
"j %l[" __rseq_str(abort_label) "]\n" \