Subject: Re: CVS commit: src/sys/arch/newsmips/newsmips
To: None <source-changes@netbsd.org>
From: Christos Zoulas <christos@astron.com>
List: source-changes
Date: 08/27/2006 06:08:12
In article <060827150132.M0125243@mirage.ceres.dti.ne.jp>,
Izumi Tsutsui  <tsutsui@ceres.dti.ne.jp> wrote:
>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?"

This is what I meant; gcc does not know that this can happen. How could it?

christos