Add a new objtool ignore macro, STACK_FRAME_NON_STANDARD, which can be used to tell objtool to skip validation of a function. Signed-off-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx> --- MAINTAINERS | 1 + arch/x86/kernel/vmlinux.lds.S | 5 ++++- include/linux/objtool.h | 22 ++++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 include/linux/objtool.h diff --git a/MAINTAINERS b/MAINTAINERS index 7c7cebd..43a940e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7782,6 +7782,7 @@ OBJTOOL M: Josh Poimboeuf <jpoimboe@xxxxxxxxxx> S: Supported F: tools/objtool/ +F: include/linux/objtool.h OMAP SUPPORT M: Tony Lindgren <tony@xxxxxxxxxxx> diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S index 92dc211..6038fe0 100644 --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S @@ -343,7 +343,10 @@ SECTIONS /* Sections to be discarded */ DISCARDS - /DISCARD/ : { *(.eh_frame) } + /DISCARD/ : { + *(.eh_frame) + *(__objtool_ignore_*) + } } diff --git a/include/linux/objtool.h b/include/linux/objtool.h new file mode 100644 index 0000000..cce9d67 --- /dev/null +++ b/include/linux/objtool.h @@ -0,0 +1,22 @@ +#ifndef _LINUX_OBJTOOL_H +#define _LINUX_OBJTOOL_H + +#ifdef CONFIG_STACK_VALIDATION +/* + * This C macro tells objtool to ignore the function when doing stack metadata + * validation. It should only be used in special cases where you're 100% sure + * it won't affect the reliability of frame pointers and kernel stack traces. + * + * For more information, see tools/objtool/Documentation/stack-validation.txt. + */ +#define STACK_FRAME_NON_STANDARD(_func) \ + static void __used __section(__objtool_ignore_func) \ + *__objtool_ignore_func_##_func = _func + +#else /* !CONFIG_STACK_VALIDATION */ + +#define STACK_FRAME_NON_STANDARD(_func) + +#endif /* CONFIG_STACK_VALIDATION */ + +#endif /* _LINUX_OBJTOOL_H */ -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe live-patching" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html