Messages in this thread | | | Date | Sun, 5 Mar 2006 22:04:01 +0000 | From | Ben Dooks <> | Subject | Re: kbuild - status on section mismatch warnings |
| |
On Sun, Mar 05, 2006 at 10:58:53PM +0100, Sam Ravnborg wrote: > 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.
I think the best way to be with an extension to sparse to check calls from non-init marked code do not to go to items marked init unless forced to.
-- Ben (ben@fluff.org, http://www.fluff.org/)
'a smiley only costs 4 bytes' - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |