From 35ab4690dc0f7696db5af96040b6e2b9f4506dda Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Thu, 29 Feb 2024 10:01:11 -0500 Subject: [PATCH] Introduce __RSEQ_ASM_DEFINE_CS_FIELDS The new macro __RSEQ_ASM_DEFINE_CS_FIELDS can be used by __RSEQ_ASM_DEFINE_TABLE as well as __RSEQ_ASM_DEFINE_ABORT on arm and mips, thus removing redundant code. Signed-off-by: Mathieu Desnoyers Change-Id: Ie03f5d51d20027a3eb3b9eba636b0f5cc890c333 --- include/rseq/arch/arm.h | 7 ++----- include/rseq/arch/generic/common.h | 13 +++++++++++++ include/rseq/arch/mips.h | 7 ++----- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/include/rseq/arch/arm.h b/include/rseq/arch/arm.h index d675c97..d416337 100644 --- a/include/rseq/arch/arm.h +++ b/include/rseq/arch/arm.h @@ -136,11 +136,8 @@ do { \ start_ip, post_commit_offset, abort_ip) \ ".balign 32\n\t" \ __rseq_str(table_label) ":\n\t" \ - RSEQ_ASM_U32(__rseq_str(version)) "\n\t" \ - RSEQ_ASM_U32(__rseq_str(flags)) "\n\t" \ - RSEQ_ASM_U64_PTR(__rseq_str(start_ip)) "\n\t" \ - RSEQ_ASM_U64_PTR(__rseq_str(post_commit_offset)) "\n\t" \ - RSEQ_ASM_U64_PTR(__rseq_str(abort_ip)) "\n\t" \ + __RSEQ_ASM_DEFINE_CS_FIELDS(version, flags, \ + start_ip, post_commit_offset, abort_ip) "\n\t" \ RSEQ_ASM_U32(__rseq_str(RSEQ_SIG)) "\n\t" \ __rseq_str(label) ":\n\t" \ teardown \ diff --git a/include/rseq/arch/generic/common.h b/include/rseq/arch/generic/common.h index a34e286..8a912b2 100644 --- a/include/rseq/arch/generic/common.h +++ b/include/rseq/arch/generic/common.h @@ -8,12 +8,25 @@ #ifndef _RSEQ_GENERIC_COMMON_H #define _RSEQ_GENERIC_COMMON_H +/* + * Define the rseq critical section descriptor fields. + */ + #define __RSEQ_ASM_DEFINE_CS_FIELDS(version, flags, \ + start_ip, post_commit_offset, abort_ip) \ + RSEQ_ASM_U32(__rseq_str(version)) "\n\t" \ + RSEQ_ASM_U32(__rseq_str(flags)) "\n\t" \ + RSEQ_ASM_U64_PTR(__rseq_str(start_ip)) "\n\t" \ + RSEQ_ASM_U64_PTR(__rseq_str(post_commit_offset)) "\n\t" \ + RSEQ_ASM_U64_PTR(__rseq_str(abort_ip)) + /* Only used in RSEQ_ASM_DEFINE_TABLE. */ #define __RSEQ_ASM_DEFINE_TABLE(label, version, flags, \ start_ip, post_commit_offset, abort_ip) \ ".pushsection __rseq_cs, \"aw\"\n\t" \ ".balign 32\n\t" \ __rseq_str(label) ":\n\t" \ + __RSEQ_ASM_DEFINE_CS_FIELDS(version, flags, \ + start_ip, post_commit_offset, abort_ip) "\n\t" \ RSEQ_ASM_U32(__rseq_str(version)) "\n\t" \ RSEQ_ASM_U32(__rseq_str(flags)) "\n\t" \ RSEQ_ASM_U64_PTR(__rseq_str(start_ip)) "\n\t" \ diff --git a/include/rseq/arch/mips.h b/include/rseq/arch/mips.h index d369f91..a811a07 100644 --- a/include/rseq/arch/mips.h +++ b/include/rseq/arch/mips.h @@ -128,11 +128,8 @@ do { \ start_ip, post_commit_offset, abort_ip) \ ".balign 32\n\t" \ __rseq_str(table_label) ":\n\t" \ - RSEQ_ASM_U32(__rseq_str(version)) "\n\t" \ - RSEQ_ASM_U32(__rseq_str(flags)) "\n\t" \ - RSEQ_ASM_U64_PTR(__rseq_str(start_ip)) "\n\t" \ - RSEQ_ASM_U64_PTR(__rseq_str(post_commit_offset)) "\n\t" \ - RSEQ_ASM_U64_PTR(__rseq_str(abort_ip)) "\n\t" \ + __RSEQ_ASM_DEFINE_CS_FIELDS(version, flags, \ + start_ip, post_commit_offset, abort_ip) "\n\t" \ RSEQ_ASM_U32(__rseq_str(RSEQ_SIG)) "\n\t" \ __rseq_str(label) ":\n\t" \ teardown \ -- 2.34.1