Subject: Re: CVS commit: src/sys/arch/newsmips/newsmips
To: None <christos@astron.com>
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
List: source-changes
Date: 08/27/2006 15:01:32
christos@astron.com wrote:

> >Modified Files:
> >	src/sys/arch/newsmips/newsmips: news3400.c
> >
> >Log Message:
> >Make badaddr_flag volatile to avoid unintended optimization by gcc4.
> >Now GENERIC compiled by gcc4 works on NWS-3470D.
> >
> >XXX: Is this gcc4 optimization bug, or volitile is required in this case?
> 
> It is not a gcc bug. You need volatile, since gcc cannot intuit that the
> pointer deref will end up changing its value.

In this case, "static int badaddr_flag" might be changed in the interrupt
handler (news3400_intr() in the same source) which is invoked on
the buserror trap from news3400_badaddr(), not via pointer deref.

I.e. the question is "doesn't gcc4 assume such static variables might
be changed in the interrupt context in the same source?"
---
Izumi Tsutsui