Messages in this thread | | | Date | Thu, 25 Feb 2016 08:51:49 +0100 | From | Ingo Molnar <> | Subject | Re: [PATCH v17 4/9] x86/objtool: Add STACK_FRAME_NON_STANDARD macro |
| |
* Josh Poimboeuf <jpoimboe@redhat.com> wrote:
> 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@redhat.com> > --- > 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@redhat.com> > S: Supported > F: tools/objtool/ > +F: include/linux/objtool.h > > OMAP SUPPORT > M: Tony Lindgren <tony@atomide.com> > 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
So I think this should really be in asm/frame.h, not in an objtool specific header.
> @@ -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
Likewise, this section should be named __func_non_standard_stack_frame or so, with objtool one (but not the only possible) consumer of it.
> +#else /* !CONFIG_STACK_VALIDATION */ > + > +#define STACK_FRAME_NON_STANDARD(_func) > + > +#endif /* CONFIG_STACK_VALIDATION */ > + > +#endif /* _LINUX_OBJTOOL_H */
The CONFIG_STACK_VALIDATION dependency can be kept.
Thanks,
Ingo
| |