This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Memory corruption due to word sharing
- From: Richard Guenther <rguenther at suse dot de>
- To: DJ Delorie <dj at redhat dot com>
- Cc: LKML <linux-kernel at vger dot kernel dot org>, linux-ia64 at vger dot kernel dot org, Linus Torvalds <torvalds at linux-foundation dot org>, dsterba at suse dot cz, ptesarik at suse dot cz, gcc at gcc dot gnu dot org
- Date: Fri, 3 Feb 2012 10:37:22 +0100 (CET)
- Subject: Re: Memory corruption due to word sharing
- References: <20120201151918.GC16714@quack.suse.cz> <xnbopg8lex.fsf@greed.delorie.com>
On Fri, 3 Feb 2012, DJ Delorie wrote:
>
> Jan Kara <jack@suse.cz> writes:
> > we've spotted the following mismatch between what kernel folks expect
> > from a compiler and what GCC really does, resulting in memory corruption on
> > some architectures. Consider the following structure:
> > struct x {
> > long a;
> > unsigned int b1;
> > unsigned int b2:1;
> > };
>
> If this structure were volatile, you could try
> -fstrict-volatile-bitfields, which forces GCC to use the C type to
> define the access width, instead of doing whatever it thinks is optimal.
>
> Note: that flag is enabled by default for some targets already, most
> notably ARM.
Note that -fstrict-volatile-bitfields does not work for
volatile struct S {
int i : 1;
char c;
} s;
int main()
{
s.i = 1;
s.c = 2;
}
where it accesses s.i using SImode. -fstrict-volatile-bitfields
falls foul of all the games bitfield layout plays and the
irrelevantness of the declared bitfield type (but maybe the
ARM ABI exactly specifies it that way).
So no, I would not recommend -fstrict-volatile-bitfields.
Richard.