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 -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html