Re: Getting rid of alignment faults in userspace
> > > 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
Reply to: