Re: huge gcc 4.1.{0,1} __weak problem

Andrew Morton
2008-05-01T22:44:24Z

On Thu, 1 May 2008 15:35:15 -0700
Venki Pallipadi <venkatesh.pallipadi@intel.com> wrote:

> On Thu, May 01, 2008 at 03:27:26PM -0700, Linus Torvalds wrote:
> >
> >
> > On Thu, 1 May 2008, Andrew Morton wrote:
> > > >
> > > > I see only the following choices:
> > > > - remove __weak and replace all current usages
> > > > - move all __weak functions into own files, and ensure that also happens
> > > > for future usages
> > > > - #error for gcc 4.1.{0,1}
> > >
> > > Can we detect the {0,1}? __GNUC_EVEN_MORE_MINOR__?
> >
> > It's __GNUC_PATCHLEVEL__, I believe.
> >
> > So yes, we can distinguish 4.1.2 (good, and very common) from 4.1.{0,1}
> > (bad, and rather uncommon).
> >
> > And yes, considering that 4.1.1 (and even more so 4.1.0) should be rare to
> > begin with, I think it's better to just not support it.
> >
>
> Not sure whether #error on gcc 4.1.{0.1} is the right thing as I found atleast
> one distro gcc which says itself as 4.1.1, do not exhibit the problem as it
> most likely has fix backported.
>
> Putting all weak functions in one file is something Suresh and I considered
> before sending this patch. But, looking at various users of __weak, that
> single file did not look very appropriate.
>

Is there some vaguely maintainable workaround we can do? If the problem
only affects completely-empty weak functions then we could put something in
them to make them non-empty?

#if __GNUC__ == ...
#define weak_function_filler for ( ; ; );
#else
#define weak_function_filler()
#endif

because __weak and attribute((weak)) are pretty easy to grep for. Dunno.