[coreboot] [Patch] remove some warnings

Kevin O'Connor kevin at koconnor.net
Sun Mar 21 16:57:48 CET 2010


On Sun, Mar 21, 2010 at 01:04:44AM +0100, Stefan Reinauer wrote:
> On 3/18/10 3:47 PM, Carl-Daniel Hailfinger wrote:
> > AFAIK (and I could be wrong) type punning is not only about alignment,
> > but the C compiler is free to optimize the generated code in a way that
> > may break your expectations if you're violating strict aliasing rules.
> >
> That's what I read over and over, too but I can't make much sense of
> it... what does it mean? What are we not supposed to expect? What is it
> about, more than alignment?

It's about pointer aliases.  Let's say one had code like:

  void myfunc(u16 *s, u32 *l) {
      printf("%d", *l);
      *s += 1;
      *l += 1;
      printf("%d", *l);
  }

Then gcc is free to assume that *s and *l don't point to the same
memory location.  Thus, myfunc((u16*)&myint, &myint) could give
unexpected results.

The gcc warnings point out risky looking casts, but it is not
exhaustive.  Fixing all the warnings will not prevent all aliasing
issues.

Also, I didn't think alignment made any real impact on embedded x86 -
as I didn't think gcc would emit any code that required alignment.

-Kevin




More information about the coreboot mailing list