| From 88b19a0e5cbc59720e4c808689ea87c3fa140acf Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 14 Sep 2021 23:41:13 +0900 |
| Subject: objtool: Add frame-pointer-specific function ignore |
| |
| From: Josh Poimboeuf <jpoimboe@redhat.com> |
| |
| [ Upstream commit e028c4f7ac7ca8c96126fe46c54ab3d56ffe6a66 ] |
| |
| Add a CONFIG_FRAME_POINTER-specific version of |
| STACK_FRAME_NON_STANDARD() for the case where a function is |
| intentionally missing frame pointer setup, but otherwise needs |
| objtool/ORC coverage when frame pointers are disabled. |
| |
| Link: https://lkml.kernel.org/r/163163047364.489837.17377799909553689661.stgit@devnote2 |
| |
| Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> |
| Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org> |
| Tested-by: Masami Hiramatsu <mhiramat@kernel.org> |
| Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> |
| Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> |
| Stable-dep-of: c8c301abeae5 ("x86/ibt: Add ANNOTATE_NOENDBR") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| include/linux/objtool.h | 12 ++++++++++++ |
| tools/include/linux/objtool.h | 12 ++++++++++++ |
| 2 files changed, 24 insertions(+) |
| |
| --- a/include/linux/objtool.h |
| +++ b/include/linux/objtool.h |
| @@ -71,6 +71,17 @@ struct unwind_hint { |
| static void __used __section(".discard.func_stack_frame_non_standard") \ |
| *__func_stack_frame_non_standard_##func = func |
| |
| +/* |
| + * STACK_FRAME_NON_STANDARD_FP() is a frame-pointer-specific function ignore |
| + * for the case where a function is intentionally missing frame pointer setup, |
| + * but otherwise needs objtool/ORC coverage when frame pointers are disabled. |
| + */ |
| +#ifdef CONFIG_FRAME_POINTER |
| +#define STACK_FRAME_NON_STANDARD_FP(func) STACK_FRAME_NON_STANDARD(func) |
| +#else |
| +#define STACK_FRAME_NON_STANDARD_FP(func) |
| +#endif |
| + |
| #else /* __ASSEMBLY__ */ |
| |
| /* |
| @@ -126,6 +137,7 @@ struct unwind_hint { |
| #define UNWIND_HINT(sp_reg, sp_offset, type, end) \ |
| "\n\t" |
| #define STACK_FRAME_NON_STANDARD(func) |
| +#define STACK_FRAME_NON_STANDARD_FP(func) |
| #else |
| #define ANNOTATE_INTRA_FUNCTION_CALL |
| .macro UNWIND_HINT type:req sp_reg=0 sp_offset=0 end=0 |
| --- a/tools/include/linux/objtool.h |
| +++ b/tools/include/linux/objtool.h |
| @@ -71,6 +71,17 @@ struct unwind_hint { |
| static void __used __section(".discard.func_stack_frame_non_standard") \ |
| *__func_stack_frame_non_standard_##func = func |
| |
| +/* |
| + * STACK_FRAME_NON_STANDARD_FP() is a frame-pointer-specific function ignore |
| + * for the case where a function is intentionally missing frame pointer setup, |
| + * but otherwise needs objtool/ORC coverage when frame pointers are disabled. |
| + */ |
| +#ifdef CONFIG_FRAME_POINTER |
| +#define STACK_FRAME_NON_STANDARD_FP(func) STACK_FRAME_NON_STANDARD(func) |
| +#else |
| +#define STACK_FRAME_NON_STANDARD_FP(func) |
| +#endif |
| + |
| #else /* __ASSEMBLY__ */ |
| |
| /* |
| @@ -126,6 +137,7 @@ struct unwind_hint { |
| #define UNWIND_HINT(sp_reg, sp_offset, type, end) \ |
| "\n\t" |
| #define STACK_FRAME_NON_STANDARD(func) |
| +#define STACK_FRAME_NON_STANDARD_FP(func) |
| #else |
| #define ANNOTATE_INTRA_FUNCTION_CALL |
| .macro UNWIND_HINT type:req sp_reg=0 sp_offset=0 end=0 |