[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: