On Tue, Jul 7, 2015 at 3:59 PM, Josh Poimboeuf <jpoimboe@xxxxxxxxxx> wrote: > On Tue, Jul 07, 2015 at 03:00:38PM -0700, Andy Lutomirski wrote: >> On Tue, Jul 7, 2015 at 7:54 AM, Josh Poimboeuf <jpoimboe@xxxxxxxxxx> wrote: >> > Add new stackvalidate ignore macros: STACKVALIDATE_IGNORE_INSN and >> > STACKVALIDATE_IGNORE_FUNC. These can be used to tell stackvalidate to >> > skip validation of an instruction or a function, respectively. >> > >> > Signed-off-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx> >> > --- >> > include/linux/stackvalidate.h | 38 ++++++++++++++++++++++++++++++++++++++ >> > 1 file changed, 38 insertions(+) >> > create mode 100644 include/linux/stackvalidate.h >> > >> > diff --git a/include/linux/stackvalidate.h b/include/linux/stackvalidate.h >> > new file mode 100644 >> > index 0000000..30d4a60 >> > --- /dev/null >> > +++ b/include/linux/stackvalidate.h >> > @@ -0,0 +1,38 @@ >> > +#ifndef _LINUX_STACKVALIDATE_H >> > +#define _LINUX_STACKVALIDATE_H >> > + >> > +#ifndef __ASSEMBLY__ >> > + >> > +/* >> > + * This C macro tells the stack validation script to ignore the function. 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 Documentation/stack-validation.txt. >> > + */ >> > +#define STACKVALIDATE_IGNORE_FUNC(_func) \ >> > + void __attribute__((section("__stackvalidate_ignore_func,\"ae\"#"))) \ >> > + *__stackvalidate_ignore_func_##_func = _func >> > + >> >> static? Otherwise there's some risk that ignoring a static function >> will cause a duplicate symbol. Alternatively you could generate a >> more unique name. >> >> Also, should the linker script be updated to discard this section? > > It validates per individual object file, so there shouldn't be a risk of > duplicate symbols. The 'e' flag in ,\"ae\"#" tells the linker to > discard the section. > > (The ,\"ae\"# stuff is a horrible hack, but it's the only way I could > figure out how to set the section flags from C code. The '#' is used to > comment out gcc's default arguments to the .section directive in favor > of the "ae" flags.) Oh, egads. FWIW, doing it in the linker script would probably be less hackish. Does the linker discard before noticing duplicate symbols in that section? > >> > +#else /* __ASSEMBLY__ */ >> > + >> > +/* >> > + * This asm macro tells the stack validation script to ignore the instruction >> > + * immediately after the macro. 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 Documentation/stack-validation.txt. >> > + */ >> > +.macro STACKVALIDATE_IGNORE_INSN >> > + .if CONFIG_STACK_VALIDATION >> > + 163: >> >> Some day we should come up with a better way to do this than using a >> random three-digit number. I wonder if something like .Ltemp_\@ could >> be used for this purpose. > > Agreed. And .Ltemp_\@ sounds like a good idea. I'll try it. :) --Andy -- 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