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

From: Michal Marek
Date: Tue Dec 13 2016 - 17:51:12 EST

Dne 9.12.2016 v 23:46 Dodji Seketeli napsal(a):
> Hello,
> Nicholas Piggin <npiggin@xxxxxxxxx> a Ãcrit:
> [...]
>> 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, Nicholas was kind enough to send me the two Linux Kernel binaries
> that he built with the tiny little interface change that we were
> discussing earlier. Here is what the abidiff[1] tools says about that
> interface change:
> $ time ~/git/libabigail/kabidiff/build/tools/abidiff vmlinux.abi1.abi vmlinux.abi2.abi
> Functions changes summary: 0 Removed, 1 Changed, 0 Added function
> Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
> 1 function with some indirect sub-type change:
> [C]'function int foo(blah*)' at memory.c:82:1 has some indirect sub-type changes:
> parameter 1 of type 'blah*' has sub-type changes:
> in pointed to type 'struct blah' at memory.c:78:1:
> type size changed from 32 to 64 bits
> 1 data member insertion:
> 'int blah::y', at offset 0 (in bits) at memory.c:79:1
> 1 data member change:
> 'int blah::x' offset changed from 0 to 32 (in bits) (by +32 bits)

For completeness, with a foo.symref file in the tree, genksyms would print

foo.c: warning: foo: modversion changed because of changes in struct blah

So there is some sort of diagnostics already. Does the abidiff tool
handle the case when an exported symbol is moved between .c files? This
is always a mess with genksyms, because the two .c files have different
includes and thus the type expansion stops at different points. So
typically the move needs to be reverted as a workaround.