diff mbox

[BUG] sparse warning EXPORT_SYMBOL()'d symbol non-static

Message ID 1385326370.23961.9.camel@jlt4.sipsolutions.net (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Johannes Berg Nov. 24, 2013, 8:52 p.m. UTC
On Sun, 2013-11-24 at 21:48 +0100, Johannes Berg wrote:
> On Sun, 2013-11-24 at 12:45 -0800, Josh Triplett wrote:
> > On Sun, Nov 24, 2013 at 12:28:51PM -0800, Andi Kleen wrote:
> > > > Well, sparse is clearly "right", for all it cares it might very well be
> > > > static, but it seems this is necessary for something in the kernel and
> > > > we clearly can't forward-declare it in a header file. Perhaps we can add
> > > > some annotation to say
> > > > "__attribute__((yes_I_know_but_really_dont_want_this_to_be_static))" to
> > > > suppress this warning? This is getting annoying to me as well :-)
> > > 
> > > We could do something like
> > > 
> > > typeof(foo); 
> > > 
> > > in the macro. Not sure if that would make sparse happy.
> > 
> > If you're just looking to mollify sparse,
> 
> I am, pretty much, since now I get a ton of output and have to either
> grep it or dig through it... :)
> 
> > the easiest way is to
> > put a prototype of the symbol right before the symbol itself.
> 
> Oh, right, good point, thanks Josh. Andi, do you want to do that?
> Otherwise I can post a patch.

The below seems to mollify sparse, but all the attributes make my head
spin so I'm not sure it's really what we need.



johannes

--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Josh Triplett Nov. 24, 2013, 10:34 p.m. UTC | #1
On Sun, Nov 24, 2013 at 09:52:50PM +0100, Johannes Berg wrote:
> On Sun, 2013-11-24 at 21:48 +0100, Johannes Berg wrote:
> > On Sun, 2013-11-24 at 12:45 -0800, Josh Triplett wrote:
> > > On Sun, Nov 24, 2013 at 12:28:51PM -0800, Andi Kleen wrote:
> > > > > Well, sparse is clearly "right", for all it cares it might very well be
> > > > > static, but it seems this is necessary for something in the kernel and
> > > > > we clearly can't forward-declare it in a header file. Perhaps we can add
> > > > > some annotation to say
> > > > > "__attribute__((yes_I_know_but_really_dont_want_this_to_be_static))" to
> > > > > suppress this warning? This is getting annoying to me as well :-)
> > > > 
> > > > We could do something like
> > > > 
> > > > typeof(foo); 
> > > > 
> > > > in the macro. Not sure if that would make sparse happy.
> > > 
> > > If you're just looking to mollify sparse,
> > 
> > I am, pretty much, since now I get a ton of output and have to either
> > grep it or dig through it... :)
> > 
> > > the easiest way is to
> > > put a prototype of the symbol right before the symbol itself.
> > 
> > Oh, right, good point, thanks Josh. Andi, do you want to do that?
> > Otherwise I can post a patch.
> 
> The below seems to mollify sparse, but all the attributes make my head
> spin so I'm not sure it's really what we need.
> 
> --- a/include/linux/export.h
> +++ b/include/linux/export.h
> @@ -59,6 +59,7 @@ extern struct module __this_module;
>  	static const char __kstrtab_##sym[]			\
>  	__attribute__((section("__ksymtab_strings"), aligned(1))) \
>  	= VMLINUX_SYMBOL_STR(sym);				\
> +	extern const struct kernel_symbol __ksymtab_##sym;	\
>  	__visible const struct kernel_symbol __ksymtab_##sym	\
>  	__used							\
>  	__attribute__((section("___ksymtab" sec "+" #sym), unused))	\

Yes, that should work as a workaround, though I still think making it
possible for the symbol to be static would be preferable.

- Josh Triplett
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

--- a/include/linux/export.h
+++ b/include/linux/export.h
@@ -59,6 +59,7 @@  extern struct module __this_module;
 	static const char __kstrtab_##sym[]			\
 	__attribute__((section("__ksymtab_strings"), aligned(1))) \
 	= VMLINUX_SYMBOL_STR(sym);				\
+	extern const struct kernel_symbol __ksymtab_##sym;	\
 	__visible const struct kernel_symbol __ksymtab_##sym	\
 	__used							\
 	__attribute__((section("___ksymtab" sec "+" #sym), unused))	\