On Sat, 24 Nov 2007 17:22:36 +0000
Luciano Rocha <[EMAIL PROTECTED]> wrote:

> On Sat, Nov 24, 2007 at 05:19:31PM +0100, Pierre Ossman wrote:
> > It most certainly does not. gcc will assume that an int* has int alignment. 
> > memcpy() is a builtin, which gcc can translate to pretty much anything. And 
> > C specifies that a pointer to foo, will point to a real object of type foo, 
> > so gcc can't be blamed for the unsafe typecasts. I have tested this the 
> > hard way, so this is not just speculation.
> 
> Yes, on *int and other assumed aligned pointers, gcc uses its internal
> version.
> 
> However, my point is that those pointers, unless speaking of packed
> structures, can safely be assumed aligned, while char*/void* can't.
> 

I get the sensation we're violently in agreement here, just misunderstanding 
each other. :)

_My_ point was that the documentation should mention that normal, unpacked C 
objects have alignments that influence the code generated by 
__builtin_memcpy(). As such, one should always make sure to have either src or 
dst be char*/void* when alignment cannot be guaranteed. The example in the 
documentation has this, but it isn't explicit that this is required.

Rgds
-- 
     -- Pierre Ossman

  Linux kernel, MMC maintainer        http://www.kernel.org
  PulseAudio, core developer          http://pulseaudio.org
  rdesktop, core developer          http://www.rdesktop.org
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to