> > >       char buf[8];
> > >       void *v = &buf[1];
> > >       unsigned int *p = (unsigned int *)v;
> > 
> > This does not (reliably) do what you expect.  The compiler need not align
> > buf.
> 
> Printing the value of p should clarify this.
> 
> And, as we can see above, the "simple" accesses are left to the hardware
> to fix up.  However, if the misaligned access is performed using a
> 64-bit value pointer, then the kernel will trap an exception and the
> access will be simulated.

I think you've missed my point.  gcc may (though unlikely in this case) choose 
to place buf at an odd address.  In which case p will happen to be properly 
aligned.

I'm not sure where you get "64-bit value pointer" from.  *p is only a word 
sized access, and memcpy is defined in terms of bytes so will only be promoted 
to wider accesses when the compiler believes it is safe.

Paul

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to