[PATCH v2 2/3] lib: sbi: Optionally use ".option arch,+h"

Tsukasa OI research_trasio at irq.a4lg.com
Sat Nov 26 19:04:31 PST 2022


From: Tsukasa OI <research_trasio at irq.a4lg.com>

On the debugger / disassembler, disassembling hfence.* as hfence.* requires
indication of the 'H'-extension use.

".option arch,+[EXT_NAME]" is one of the such ways and this commit
optionally inserts this assembler directive when supported.

It enables disassembling on the software which supports "$x[arch]" (mapping
symbols with ISA string) - latest GNU Binutils (will be released as 2.40).
Note that this commit alone won't make disassembler behavior correct on
GNU Binutils 2.39 because of a linker issue.

Signed-off-by: Tsukasa OI <research_trasio at irq.a4lg.com>
---
 Makefile             | 6 ++++++
 lib/sbi/sbi_hfence.S | 4 ++++
 2 files changed, 10 insertions(+)

diff --git a/Makefile b/Makefile
index e942dfdc00bc..d8b85f0497aa 100644
--- a/Makefile
+++ b/Makefile
@@ -173,6 +173,9 @@ CC_SUPPORT_SAVE_RESTORE := $(shell $(CC) $(CLANG_TARGET) $(RELAX_FLAG) -nostdlib
 # Check whether the assembler and the compiler support the Zicsr and Zifencei extensions
 CC_SUPPORT_ZICSR_ZIFENCEI := $(shell $(CC) $(CLANG_TARGET) $(RELAX_FLAG) -nostdlib -march=rv$(OPENSBI_CC_XLEN)imafd_zicsr_zifencei -x c /dev/null -o /dev/null 2>&1 | grep "zicsr\|zifencei" > /dev/null && echo n || echo y)
 
+# Check whether the assembler support the H extension with .option arch,+h
+AS_SUPPORT_H_EXT_BY_OPTION_ARCH := $(shell echo ".option arch,+h" | $(AS) $(CLANG_TARGET) $(RELAX_FLAG) -nostdlib -x assembler-with-cpp -c - -o /dev/null 2>&1 | grep -i "warning:.*option" > /dev/null && echo n || echo y)
+
 # Check whether the ".insn" directive on the assembler (with raw value) is supported
 AS_SUPPORT_INSN_RAW_DIRECTIVE := $(shell echo ".insn 0x1000000f" | $(AS) $(CLANG_TARGET) $(RELAX_FLAG) -nostdlib -x assembler-with-cpp -c - -o /dev/null >/dev/null 2>&1 && echo y || echo n)
 
@@ -331,6 +334,9 @@ GENFLAGS    +=  -DRAW_INSN=".insn"
 else
 GENFLAGS    +=  -DRAW_INSN=".word"
 endif
+ifeq ($(AS_SUPPORT_H_EXT_BY_OPTION_ARCH),y)
+GENFLAGS    +=  -DOPENSBI_H_EXT_BY_OPTION_ARCH_SUPPORTED
+endif
 ifdef PLATFORM
 GENFLAGS	+=	-include $(KCONFIG_AUTOHEADER)
 endif
diff --git a/lib/sbi/sbi_hfence.S b/lib/sbi/sbi_hfence.S
index 40882e036932..146a41959a67 100644
--- a/lib/sbi/sbi_hfence.S
+++ b/lib/sbi/sbi_hfence.S
@@ -8,6 +8,10 @@
  *   Atish Patra <anup.patel at wdc.com>
  */
 
+#ifdef OPENSBI_H_EXT_BY_OPTION_ARCH_SUPPORTED
+	.option arch,+h
+#endif
+
 	/*
 	 * HFENCE.GVMA rs1, rs2
 	 * HFENCE.GVMA zero, rs2
-- 
2.38.1




More information about the opensbi mailing list