Subject: Re: [-next] ERROR: "strchr" [drivers/target/target_core_mod.ko] undefined!

From: "Nicholas A. Bellinger" <[email-masked]>
Date: Fri, 07 Jan 2011 13:04:34 -0800

On Fri, 2011-01-07 at 09:44 -0600, James Bottomley wrote:
> On Fri, 2011-01-07 at 11:57 +0100, Geert Uytterhoeven wrote:
> > Since a few days, linux-next shows:
> > 
> > | ERROR: "strchr" [drivers/target/target_core_mod.ko] undefined!
> > 
> > in m68k allmodconfig builds
> > (http://kisskb.ellerman.id.au/kisskb/buildresult/3754323/).
> > 
> > I guess this is caused by the following 3 calls to strstr():
> > 
> > drivers/target/target_core_configfs.c:
> > +       ptr = strstr(page, "1");
> > 
> > +       str = strstr(buf, "_");
> > 
> > +       str2 = strstr(str+1, "_");
> > 
> > Some versions of gcc replace calls to strstr() with single-character
> > "needle" string parameters by calls to strchr() behind our back.
> > This causes linking errors if strchr() is defined as an inline function
> > in <asm/string.h> (e.g. on m68k).
> > 
> > You can prevent this by explicitly calling strchr() instead.
> > 
> > Cfr. commit 59d309f9c8ef0bd01bf93cc0e758f1d810417bdb
> > ("kgdb: Replace strstr() by strchr() for single-character needles).
> > 
> > Gr{oetje,eeting}s,
> 
> Surely the fix for this is not to inline it in m68k? If gcc is growing
> the capability to make these types of transformations, it's not going to
> stop at single entry string strstr().
> 
> If you want to keep the fast inline, there is a way (which I forget) to
> drop an external reference as well, just in case.
> 

Hi guys,

So I really don't have a strong perference here, but would tend to agree
with James that this should probably be fixed in m68k..  If this is too
much of an pain for you Geert I am happy to make this change.

Thanks!

--nab