[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1481296893.4509.135.camel@hellion.org.uk>
Date: Fri, 09 Dec 2016 15:21:33 +0000
From: Ian Campbell <ijc@...lion.org.uk>
To: Nicholas Piggin <npiggin@...il.com>, Michal Marek <mmarek@...e.com>
Cc: Ben Hutchings <ben@...adent.org.uk>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Adam Borowski <kilobyte@...band.pl>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Linux Kbuild mailing list <linux-kbuild@...r.kernel.org>,
Debian kernel maintainers <debian-kernel@...ts.debian.org>,
"linux-arch@...r.kernel.org" <linux-arch@...r.kernel.org>,
Arnd Bergmann <arnd@...db.de>, Ingo Molnar <mingo@...nel.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Dodji Seketeli <dodji@...eteli.org>
Subject: Re: [PATCH] x86/kbuild: enable modversions for symbols exported
from asm
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.
Ian.
Powered by blists - more mailing lists