summaryrefslogtreecommitdiffstats
path: root/include/linux/objtool.h
diff options
context:
space:
mode:
authorJosh Poimboeuf <jpoimboe@kernel.org>2023-03-01 07:13:11 -0800
committerPeter Zijlstra <peterz@infradead.org>2023-03-23 23:18:58 +0100
commit4708ea14bef314fc901857eefd65678236a9f2d9 (patch)
treea6029527b9e4eac6e4d604752631fdd5392b8263 /include/linux/objtool.h
parentf902cfdd46aedd2afb3e8033223312dbf5fbb675 (diff)
downloadlinux-stable-4708ea14bef314fc901857eefd65678236a9f2d9.tar.gz
linux-stable-4708ea14bef314fc901857eefd65678236a9f2d9.tar.bz2
linux-stable-4708ea14bef314fc901857eefd65678236a9f2d9.zip
x86,objtool: Separate unret validation from unwind hints
The ENTRY unwind hint type is serving double duty as both an empty unwind hint and an unret validation annotation. Unret validation is unrelated to unwinding. Separate it out into its own annotation. Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/ff7448d492ea21b86d8a90264b105fbd0d751077.1677683419.git.jpoimboe@kernel.org
Diffstat (limited to 'include/linux/objtool.h')
-rw-r--r--include/linux/objtool.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/include/linux/objtool.h b/include/linux/objtool.h
index 725d7f0b6748..5aa475118820 100644
--- a/include/linux/objtool.h
+++ b/include/linux/objtool.h
@@ -124,6 +124,22 @@
.popsection
.endm
+/*
+ * Use objtool to validate the entry requirement that all code paths do
+ * VALIDATE_UNRET_END before RET.
+ *
+ * NOTE: The macro must be used at the beginning of a global symbol, otherwise
+ * it will be ignored.
+ */
+.macro VALIDATE_UNRET_BEGIN
+#if defined(CONFIG_NOINSTR_VALIDATION) && defined(CONFIG_CPU_UNRET_ENTRY)
+.Lhere_\@:
+ .pushsection .discard.validate_unret
+ .long .Lhere_\@ - .
+ .popsection
+#endif
+.endm
+
.macro REACHABLE
.Lhere_\@:
.pushsection .discard.reachable