Commit dca5da2a authored by Peter Zijlstra's avatar Peter Zijlstra

x86,objtool: Move the ASM_REACHABLE annotation to objtool.h

Because we need a variant for .S files too.
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/Yi9gOW9f1GGwwUD6@hirez.programming.kicks-ass.net
parent be007595
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <linux/stringify.h> #include <linux/stringify.h>
#include <linux/instrumentation.h> #include <linux/instrumentation.h>
#include <linux/objtool.h>
/* /*
* Despite that some emulators terminate on UD2, we use it for WARN(). * Despite that some emulators terminate on UD2, we use it for WARN().
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#define _ASM_X86_IRQ_STACK_H #define _ASM_X86_IRQ_STACK_H
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/objtool.h>
#include <asm/processor.h> #include <asm/processor.h>
......
...@@ -125,18 +125,11 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, ...@@ -125,18 +125,11 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
}) })
#define annotate_unreachable() __annotate_unreachable(__COUNTER__) #define annotate_unreachable() __annotate_unreachable(__COUNTER__)
#define ASM_REACHABLE \
"998:\n\t" \
".pushsection .discard.reachable\n\t" \
".long 998b - .\n\t" \
".popsection\n\t"
/* Annotate a C jump table to allow objtool to follow the code flow */ /* Annotate a C jump table to allow objtool to follow the code flow */
#define __annotate_jump_table __section(".rodata..c_jump_table") #define __annotate_jump_table __section(".rodata..c_jump_table")
#else #else
#define annotate_unreachable() #define annotate_unreachable()
# define ASM_REACHABLE
#define __annotate_jump_table #define __annotate_jump_table
#endif #endif
......
...@@ -83,6 +83,12 @@ struct unwind_hint { ...@@ -83,6 +83,12 @@ struct unwind_hint {
_ASM_PTR " 986b\n\t" \ _ASM_PTR " 986b\n\t" \
".popsection\n\t" ".popsection\n\t"
#define ASM_REACHABLE \
"998:\n\t" \
".pushsection .discard.reachable\n\t" \
".long 998b - .\n\t" \
".popsection\n\t"
#else /* __ASSEMBLY__ */ #else /* __ASSEMBLY__ */
/* /*
...@@ -142,6 +148,13 @@ struct unwind_hint { ...@@ -142,6 +148,13 @@ struct unwind_hint {
.popsection .popsection
.endm .endm
.macro REACHABLE
.Lhere_\@:
.pushsection .discard.reachable
.long .Lhere_\@ - .
.popsection
.endm
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#else /* !CONFIG_STACK_VALIDATION */ #else /* !CONFIG_STACK_VALIDATION */
...@@ -153,6 +166,7 @@ struct unwind_hint { ...@@ -153,6 +166,7 @@ struct unwind_hint {
#define STACK_FRAME_NON_STANDARD(func) #define STACK_FRAME_NON_STANDARD(func)
#define STACK_FRAME_NON_STANDARD_FP(func) #define STACK_FRAME_NON_STANDARD_FP(func)
#define ANNOTATE_NOENDBR #define ANNOTATE_NOENDBR
#define ASM_REACHABLE
#else #else
#define ANNOTATE_INTRA_FUNCTION_CALL #define ANNOTATE_INTRA_FUNCTION_CALL
.macro UNWIND_HINT sp_reg:req sp_offset=0 type:req end=0 .macro UNWIND_HINT sp_reg:req sp_offset=0 type:req end=0
...@@ -161,6 +175,8 @@ struct unwind_hint { ...@@ -161,6 +175,8 @@ struct unwind_hint {
.endm .endm
.macro ANNOTATE_NOENDBR .macro ANNOTATE_NOENDBR
.endm .endm
.macro REACHABLE
.endm
#endif #endif
#endif /* CONFIG_STACK_VALIDATION */ #endif /* CONFIG_STACK_VALIDATION */
......
...@@ -83,6 +83,12 @@ struct unwind_hint { ...@@ -83,6 +83,12 @@ struct unwind_hint {
_ASM_PTR " 986b\n\t" \ _ASM_PTR " 986b\n\t" \
".popsection\n\t" ".popsection\n\t"
#define ASM_REACHABLE \
"998:\n\t" \
".pushsection .discard.reachable\n\t" \
".long 998b - .\n\t" \
".popsection\n\t"
#else /* __ASSEMBLY__ */ #else /* __ASSEMBLY__ */
/* /*
...@@ -142,6 +148,13 @@ struct unwind_hint { ...@@ -142,6 +148,13 @@ struct unwind_hint {
.popsection .popsection
.endm .endm
.macro REACHABLE
.Lhere_\@:
.pushsection .discard.reachable
.long .Lhere_\@ - .
.popsection
.endm
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#else /* !CONFIG_STACK_VALIDATION */ #else /* !CONFIG_STACK_VALIDATION */
...@@ -153,6 +166,7 @@ struct unwind_hint { ...@@ -153,6 +166,7 @@ struct unwind_hint {
#define STACK_FRAME_NON_STANDARD(func) #define STACK_FRAME_NON_STANDARD(func)
#define STACK_FRAME_NON_STANDARD_FP(func) #define STACK_FRAME_NON_STANDARD_FP(func)
#define ANNOTATE_NOENDBR #define ANNOTATE_NOENDBR
#define ASM_REACHABLE
#else #else
#define ANNOTATE_INTRA_FUNCTION_CALL #define ANNOTATE_INTRA_FUNCTION_CALL
.macro UNWIND_HINT sp_reg:req sp_offset=0 type:req end=0 .macro UNWIND_HINT sp_reg:req sp_offset=0 type:req end=0
...@@ -161,6 +175,8 @@ struct unwind_hint { ...@@ -161,6 +175,8 @@ struct unwind_hint {
.endm .endm
.macro ANNOTATE_NOENDBR .macro ANNOTATE_NOENDBR
.endm .endm
.macro REACHABLE
.endm
#endif #endif
#endif /* CONFIG_STACK_VALIDATION */ #endif /* CONFIG_STACK_VALIDATION */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment