From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: David Miller <davem@davemloft.net>,
Linus Torvalds <torvalds@linux-foundation.org>,
akpm@linux-foundation.org, rdreier@cisco.com,
ian.campbell@citrix.com, jeremy.fitzhardinge@citrix.com,
deller@gmx.de, rusty@rustcorp.com.au,
linux-parisc@vger.kernel.org, linux-kernel@vger.kernel.org,
kyle@mcmartin.ca, randolph@tausq.org, sam@ravnborg.org,
dave@hiauly1.hia.nrc.ca
Subject: Re: [PATCH] kbuild: Disallow GCC 4.1.0 / 4.1.1
Date: Fri, 2 Jan 2009 14:43:58 +0100 [thread overview]
Message-ID: <200901021443.58769.bzolnier@gmail.com> (raw)
In-Reply-To: <20090102115547.GB3027@elte.hu>
On Friday 02 January 2009, Ingo Molnar wrote:
>
> * David Miller <davem@davemloft.net> wrote:
>
> > From: Linus Torvalds <torvalds@linux-foundation.org>
> > Date: Wed, 31 Dec 2008 13:22:53 -0800 (PST)
> >
> > > On Wed, 31 Dec 2008, Andrew Morton wrote:
> > > >
> > > > Adrian claimed that it was gcc-4.1.0 and 4.1.1 only. He proposed
> > > > banning them: http://lkml.org/lkml/2008/8/5/444
> > >
> > > If it really is just those releases, then yes, considering the number
> > > of cases we apparently have, and considering how ugly it is in some
> > > cases to move the weak function anywhere else, maybe banning those
> > > versions is the proper thing to do.
> > >
> > > It probably won't hurt very many people - yeah, some people will be
> > > forced to upgrade, but I have this memory of early 4.1 having had
> > > other bugs anyway, so it's probably a good idea.
> >
> > I think this is probably the best way to handle this.
>
> okay - to move this matter from the discussion-space to the
> solution-space, how about the patch below? (tested on x86 with a
> non-affected compiler version.)
...or we can just merge Adrian's patch from June 2008 which also fixes
the issue nicely.
OTOH your patch has an advantage of addressing the problem in the more
appropriate place (include/linux/compiler.h) and from what I see allows
us to remove previous gcc 4.1.0 check from init/main.c?
> Ingo
>
> -------------->
> From e6346e5ab54dcf12888a79dfd5402f5de09b3fad Mon Sep 17 00:00:00 2001
> From: Ingo Molnar <mingo@elte.hu>
> Date: Fri, 2 Jan 2009 12:46:22 +0100
> Subject: [PATCH] kbuild: Disallow GCC 4.1.0 / 4.1.1
>
> Impact: fix crashes that can trigger if built with GCC 4.1.0 or 4.1.1
>
> GCC 4.1.0 and 4.1.1 has a bug that can miscompile __weak symbols,
> by inlining __weak functions into same-file call sites - breaking the
> kernel if the __weak symbol is overriden later on.
>
> In the past we tried to work around this problem by artificially
> isolating call site and definition site - but these bugs tend to
> pop up regularly:
>
> 43a2563: sparseirq: move __weak symbols into separate compilation unit
> 13a0c3c: sparseirq: work around compiler optimizing away __weak functions
>
> And Linus has extended Sparse to report same-file callsites for __weak
> symbols - which gave two dozen hits.
>
> We have not found a clean way to work around this bug on the source
> code level (noinline and explicit barrier()s are ignored by GCC), so we do
> not allow these compilers (which are quite rare these days, have other bugs
> and are superceded by the 4.1.2 bugfix release anyway).
>
> Kernel builds under gcc 410 or 411 will now fail with this error message:
>
> Sorry, your compiler is too old, too buggy or not recognized.
>
> Signed-off-by: Ingo Molnar <mingo@elte.hu>
> ---
> include/linux/compiler.h | 17 +++++++++++++++--
> 1 files changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/compiler.h b/include/linux/compiler.h
> index ea7c6be..dd558ce 100644
> --- a/include/linux/compiler.h
> +++ b/include/linux/compiler.h
> @@ -36,12 +36,25 @@ extern void __chk_io_ptr(const volatile void __iomem *);
>
> #ifdef __KERNEL__
>
> -#if __GNUC__ >= 4
> +/*
> + * GCC 4.1.0 and 4.1.1 has a bug that can miscompile __weak symbols,
> + * by inlining __weak functions into same-file call sites - breaking the
> + * kernel if the __weak symbol is overriden later on.
> + *
> + * We have not found a clean way to work around this bug on the source
> + * code level, so we do not allow these compilers (which are quite
> + * rare these days, have other bugs and are superceded by the 4.1.2
> + * bugfix release anyway):
> + */
> +#define gcc41_inlining_bug \
> + (__GNUC__ == 4 && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ <= 1)
> +
> +#if __GNUC__ >= 4 && !gcc41_inlining_bug
> # include <linux/compiler-gcc4.h>
> #elif __GNUC__ == 3 && __GNUC_MINOR__ >= 2
> # include <linux/compiler-gcc3.h>
> #else
> -# error Sorry, your compiler is too old/not recognized.
> +# error Sorry, your compiler is too old, too buggy or not recognized.
> #endif
>
> #define notrace __attribute__((no_instrument_function))
next prev parent reply other threads:[~2009-01-02 13:44 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-29 20:34 [PATCH] parisc: fix module loading failure of large kernel modules (take 2) Helge Deller
2008-12-29 20:43 ` [PATCH 1/2] module.c: fix module loading failure of large " Helge Deller
[not found] ` <20081230180724.GA15235@bombadil.infradead.org>
2008-12-30 18:10 ` Kyle McMartin
2008-12-30 18:18 ` Helge Deller
2008-12-30 19:42 ` [PATCH 1/2] module.c: fix module loading failure of large modules (take 3) Helge Deller
2008-12-29 20:45 ` [PATCH 2/2] parisc: fix module loading failure of large modules (take 2) Helge Deller
2008-12-30 19:55 ` [PATCH 2/2] parisc: fix module loading failure of large modules (take 3) Helge Deller
2008-12-30 22:45 ` [PATCH] parisc: fix module loading failure of large kernel modules (take 2) Rusty Russell
2008-12-30 23:02 ` Helge Deller
2008-12-31 4:08 ` Rusty Russell
2008-12-31 11:31 ` [PATCH] parisc: fix module loading failure of large kernel modules (take 4) Helge Deller
2008-12-31 11:36 ` [PATCH 2/2] parisc: fix module loading failure of large modules Helge Deller
2008-12-31 13:32 ` [PATCH] parisc: fix module loading failure of large kernel modules (take 4) Rusty Russell
2008-12-31 14:13 ` Helge Deller
2009-01-01 0:52 ` Rusty Russell
2009-01-01 12:02 ` Helge Deller
2008-12-31 17:29 ` Linus Torvalds
2008-12-31 17:36 ` Roland Dreier
2008-12-31 17:47 ` Linus Torvalds
2008-12-31 18:02 ` Linus Torvalds
2008-12-31 18:11 ` Sam Ravnborg
2009-01-02 11:31 ` Ingo Molnar
2008-12-31 18:54 ` Andrew Morton
2008-12-31 21:22 ` Linus Torvalds
2008-12-31 22:14 ` David Miller
2009-01-02 11:55 ` [PATCH] kbuild: Disallow GCC 4.1.0 / 4.1.1 Ingo Molnar
2009-01-02 13:43 ` Bartlomiej Zolnierkiewicz [this message]
2009-01-02 15:21 ` [PATCH] kbuild: Remove gcc 4.1.0 quirk from init/main.c Ingo Molnar
2009-01-02 18:05 ` Sam Ravnborg
2009-01-02 16:49 ` [PATCH] kbuild: Disallow GCC 4.1.0 / 4.1.1 Linus Torvalds
2009-01-02 17:38 ` Linus Torvalds
2009-01-02 17:46 ` Ingo Molnar
2009-01-02 17:54 ` [PATCH] Disallow gcc versions 3.{0,1} Ingo Molnar
2009-01-02 17:58 ` [PATCH] kbuild: Disallow GCC 4.1.0 / 4.1.1 Linus Torvalds
2009-01-02 18:01 ` Ingo Molnar
2009-01-02 18:05 ` Linus Torvalds
2009-01-02 18:08 ` Linus Torvalds
2009-01-02 19:54 ` Willy Tarreau
2009-01-02 20:18 ` Linus Torvalds
2009-01-02 17:57 ` Sam Ravnborg
2009-01-02 18:04 ` Linus Torvalds
2009-01-02 18:27 ` Sam Ravnborg
2009-01-02 18:28 ` Randy Dunlap
2009-01-02 18:51 ` Al Viro
2009-01-02 19:14 ` Andi Kleen
2009-01-02 22:52 ` Al Viro
2009-01-03 14:03 ` Krzysztof Halasa
2009-01-02 18:22 ` Ingo Molnar
2009-01-02 18:29 ` Sam Ravnborg
2009-01-02 18:33 ` Ingo Molnar
2009-01-02 19:05 ` Detlef Riekenberg
2009-01-02 22:27 ` Benjamin Herrenschmidt
2009-01-02 22:37 ` Sam Ravnborg
2009-01-02 17:44 ` Ingo Molnar
2009-01-01 14:24 ` [PATCH] parisc: fix module loading failure of large kernel modules (take 4) Ingo Molnar
2009-01-01 16:37 ` Andrew Morton
2008-12-31 17:39 ` Helge Deller
2008-12-31 18:24 ` James Bottomley
2008-12-31 22:16 ` Rusty Russell
2009-01-01 7:12 ` Jeremy Fitzhardinge
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200901021443.58769.bzolnier@gmail.com \
--to=bzolnier@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=dave@hiauly1.hia.nrc.ca \
--cc=davem@davemloft.net \
--cc=deller@gmx.de \
--cc=ian.campbell@citrix.com \
--cc=jeremy.fitzhardinge@citrix.com \
--cc=kyle@mcmartin.ca \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-parisc@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=randolph@tausq.org \
--cc=rdreier@cisco.com \
--cc=rusty@rustcorp.com.au \
--cc=sam@ravnborg.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox