diff options
author | Alexandre Chartre <alexandre.chartre@oracle.com> | 2020-04-14 12:36:12 +0200 |
---|---|---|
committer | Peter Zijlstra <peterz@infradead.org> | 2020-04-30 20:14:33 +0200 |
commit | 8aa8eb2a8f5b3305a95f39957dd2b715fa668e21 (patch) | |
tree | ed624343256478e97b84d39fac09bdc3228512e8 /include/linux/frame.h | |
parent | b490f45362002fef57996388e395efc974b013f4 (diff) | |
download | lwn-8aa8eb2a8f5b3305a95f39957dd2b715fa668e21.tar.gz lwn-8aa8eb2a8f5b3305a95f39957dd2b715fa668e21.zip |
objtool: Add support for intra-function calls
Change objtool to support intra-function calls. On x86, an intra-function
call is represented in objtool as a push onto the stack (of the return
address), and a jump to the destination address. That way the stack
information is correctly updated and the call flow is still accurate.
Signed-off-by: Alexandre Chartre <alexandre.chartre@oracle.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Miroslav Benes <mbenes@suse.cz>
Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
Link: https://lkml.kernel.org/r/20200414103618.12657-4-alexandre.chartre@oracle.com
Diffstat (limited to 'include/linux/frame.h')
-rw-r--r-- | include/linux/frame.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/frame.h b/include/linux/frame.h index 02d3ca2d9598..303cda600e56 100644 --- a/include/linux/frame.h +++ b/include/linux/frame.h @@ -15,9 +15,20 @@ static void __used __section(.discard.func_stack_frame_non_standard) \ *__func_stack_frame_non_standard_##func = func +/* + * This macro indicates that the following intra-function call is valid. + * Any non-annotated intra-function call will cause objtool to issue a warning. + */ +#define ANNOTATE_INTRA_FUNCTION_CALL \ + 999: \ + .pushsection .discard.intra_function_calls; \ + .long 999b; \ + .popsection; + #else /* !CONFIG_STACK_VALIDATION */ #define STACK_FRAME_NON_STANDARD(func) +#define ANNOTATE_INTRA_FUNCTION_CALL #endif /* CONFIG_STACK_VALIDATION */ |