[lkml]   [2011]   [Feb]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: ARM unaligned MMIO access with attribute((packed))
On Wed, 2 Feb 2011, Richard Guenther wrote:

> The pointer conversions already invoke undefined behavior as specified by the
> C standard (

I would say: the conversions are undefined if the pointer is
insufficiently aligned for any of the pointer types involved (source,
destination or intermediate), where the appropriate alignment for a packed
type is 1. Thus, the conversion from packed to non-packed is OK iff the
pointer target is sufficiently aligned for the non-packed type.

In general from a sequence of casts the compiler is permitted to deduce
that the pointer is sufficiently aligned for whatever type in the sequence
has the greatest alignment requirement (the middle-end may not have that
information at present, but the front end could insert some form of
alignment assertion if useful for optimization). *But* that is what is
permitted in standards terms; it is not necessarily safe in practice. In
particular, on non-strict-alignment targets such as x86 people do in
practice assume that unaligned accesses are OK at the C level, not just
the assembly level (glibc does so, for example), so it might be a bad idea
to assume alignment in a way that would cause that to break.

Joseph S. Myers

 \ /
  Last update: 2011-02-02 18:49    [W:0.124 / U:13.960 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site