Re: kbuild - status on section mismatch warnings

From: Sam Ravnborg
Date: Sun Mar 05 2006 - 16:56:47 EST


Hi Al.

> Now try x86 with sd.o non-modular. And see
>
>
> __init foo()
> {
> ....
> switch(n) {
> ....
> ....
> }
> }
Hmm, in my tree sd.o has no switch in the init function. But that does
not change your point which is valid indeed.

> compiling essentially into
>
> if (n < lower || n > upper)
> goto Ldefault;
> addr = const_array_of_labels[n - lower];
> goto addr;
>
> with const_array_of_labels sitting in .rodata and its contents pointing
> inside foo(), i.e. into .init.text. And yes, .init.text is discarded,
> while .rodata is left intact. Since the only reference to that array
> disappears along with .init.text *and* section where array goes into is
> hardwired into gcc, we
> a) are actually OK and
> b) can't do anything about that false positive, AFAICS.

For the same reason references to .init.text from .rodata are not warned
upon - there are simply too many compielr generated false positives.

Following is the original comment from reference_init.pl:

* Unfortunately references to read only data that referenced .init
* sections had to be excluded. Almost all of these are false
* positives, they are created by gcc. The downside of excluding rodata
* is that there really are some user references from rodata to
* init code, e.g. drivers/video/vgacon.c:
*
* const struct consw vga_con = {
* con_startup: vgacon_startup,
*
* where vgacon_startup is __init. If you want to wade through
* the false
* positives, take out the check for rodata.

And this is unfortunate since we cannot do a full check, but we do a
better job than before and warn for many of the trivial cases.
Judging the amount of warnings already generated this is worth checking.

Sam

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/