summaryrefslogtreecommitdiff
path: root/include/linux/objtool.h
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2024-11-28 10:38:52 +0100
committerPeter Zijlstra <peterz@infradead.org>2024-12-02 12:01:41 +0100
commit2116b349e29a2e9ba17ea2e45b31234e4b350793 (patch)
tree6dd85584c3a83a90e0bc469b1fc2854688624044 /include/linux/objtool.h
parent40384c840ea1944d7c5a392e8975ed088ecf0b37 (diff)
objtool: Generic annotation infrastructure
Avoid endless .discard.foo sections for each annotation, create a single .discard.annotate_insn section that takes an annotation type along with the instruction. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Josh Poimboeuf <jpoimboe@kernel.org> Link: https://lore.kernel.org/r/20241128094310.932794537@infradead.org
Diffstat (limited to 'include/linux/objtool.h')
-rw-r--r--include/linux/objtool.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/include/linux/objtool.h b/include/linux/objtool.h
index b3b8d3dab52d..d98531ecc687 100644
--- a/include/linux/objtool.h
+++ b/include/linux/objtool.h
@@ -57,6 +57,13 @@
".long 998b\n\t" \
".popsection\n\t"
+#define ASM_ANNOTATE(type) \
+ "911:\n\t" \
+ ".pushsection .discard.annotate_insn,\"M\",@progbits,8\n\t" \
+ ".long 911b - .\n\t" \
+ ".long " __stringify(type) "\n\t" \
+ ".popsection\n\t"
+
#else /* __ASSEMBLY__ */
/*
@@ -146,6 +153,14 @@
.popsection
.endm
+.macro ANNOTATE type:req
+.Lhere_\@:
+ .pushsection .discard.annotate_insn,"M",@progbits,8
+ .long .Lhere_\@ - .
+ .long \type
+ .popsection
+.endm
+
#endif /* __ASSEMBLY__ */
#else /* !CONFIG_OBJTOOL */
@@ -155,6 +170,7 @@
#define UNWIND_HINT(type, sp_reg, sp_offset, signal) "\n\t"
#define STACK_FRAME_NON_STANDARD(func)
#define STACK_FRAME_NON_STANDARD_FP(func)
+#define ASM_ANNOTATE(type)
#define ANNOTATE_NOENDBR
#define ASM_REACHABLE
#else
@@ -167,6 +183,8 @@
.endm
.macro REACHABLE
.endm
+.macro ANNOTATE type:req
+.endm
#endif
#endif /* CONFIG_OBJTOOL */