On Wednesday 2009-11-04 20:49, Ralf Wildenhues wrote:
>* Jan Engelhardt wrote on Wed, Nov 04, 2009 at 08:42:00PM CET:
>> What if a symbol has kept its name, yet changed in semantics?
>> The Linux Kernel has a number of features that address these
>> issues for itself,
>
>Can you expand on this, please?  Pointers sufficient.

As far I understand it, a symbol's ABI (that is, a binary blob that 
describes that) will be CRC32-checksummed and this checksum be recorded. 
In current practice, it is implemented as fake symbols in one of the 
intermediate output files that you can nm, and somewhat different 
(different section nm does not care about?) in the final image:

        $ nm vmlinux | grep __crc_
        00000000881039d0 A __crc_zlib_inflate
                ^ there's your CRC

The same checksums are computed for calls the module makes.

$ modprobe --dump-modversions btrfs.ko|grep zlib
0x881039d0      zlib_inflate

Checksums are compared on loading a module and can be rejected if they 
do not match -- or if they are simply not found.
Details of that should be in $linux/scripts/modversion.c or accompanying 
.c files. I did not find all of it offhand.

Since the CRCs can be obtained at all, they _are_ actually used for 
kernel rpm packages in openSUSE, with success. Especially when the ABI 
does not change (minor updates such as 2.6.31 -> 2.6.31.5), things like 
nvidia.ko can hang around unmodified for quite a while when it does not 
use frequently-changing APIs. (Which btw is a side-effect of the legal 
yadayada, not really an effort to avoid CRC mismatches).



_______________________________________________
http://lists.gnu.org/mailman/listinfo/libtool

Reply via email to