Re: [PATCH] x86/kbuild: enable modversions for symbols exported from asm

From: Nicholas Piggin
Date: Fri Dec 09 2016 - 11:15:53 EST


On Fri, 09 Dec 2016 15:21:33 +0000
Ian Campbell <ijc@xxxxxxxxxxxxxx> wrote:

> On Fri, 2016-12-09 at 13:33 +1000, Nicholas Piggin wrote:
>
> > Well I simply tested the outcome. If you have:
> >
> > struct blah {
> > Â int x;
> > };
> > int foo(struct blah *blah)
> > {
> > Â return blah->x;
> > }
> > EXPORT(foo);
> >
> > $ nm vmlinux | grep __crc_foo
> > 00000000a0cf13a0 A __crc_foo
> >
> > Now change to
> >
> > struct blah {
> > Â int y;
> > Â int x;
> > };
> >
> > $ nm vmlinux | grep __crc_foo
> > 00000000a0cf13a0 A __crc_foo
> >
> > It just doesn't catch these things.
>
> I found the same when I just added your snippet to init/main.c.
>
> _But_ when I moved the struct into include/types.h (which happened to
> be included by init/main.c) then, with just x in the struct:
>
> $ make -s init/main.{o,symtypes} && grep -E foo\|blah init/main.symtypes && nm init/main.oÂÂ| grep __crc_foo
> s#blah struct blah { int x ; }Â
> foo int foo ( s#blah * )Â
> 000000000cd0312e A __crc_foo
>
> but adding y:
>
> $ make -s init/main.{o,symtypes} && grep -E foo\|blah init/main.symtypes && nm init/main.oÂÂ| grep __crc_foo
> s#blah struct blah { int x ; int y ; }Â
> foo int foo ( s#blah * )Â
> 00000000eda220c6 A __crc_foo
>
> So it does catch things in that case.
>
> With struct blah inline in main.c it was:
>
> $ make -s init/main.{o,symtypes} && grep -E foo\|blah init/main.symtypes && nm init/main.oÂÂ| grep __crc_foo
> s#blah struct blah { UNKNOWN }Â
> foo int foo ( s#blah * )Â
> 00000000a0cf13a0 A __crc_foo
>
> So I suppose it only cares about structs which are in headers, which I
> guess makes sense. I think it is working in at least one of the
> important cases.

Aha thanks, well that's my mistake. Clever little bugger, isn't it? Okay
it's not so useless as I first thought!

That said, a dwarf based checker tool should be able to do as good a job
(maybe a bit better because report is very informative and it may pick up
compiler alignments or padding options). So I still think it's worth
looking at those if we can remove modversions.

Thanks,
Nick