[U-Boot] packed attribute problem

Detlev Zundel dzu at denx.de
Mon Oct 11 13:32:42 CEST 2010


Hi Scott,

> On Thu, 7 Oct 2010 21:31:43 +0200
> Wolfgang Denk <wd at denx.de> wrote:
>
>> Dear Scott Wood,
>> 
>> In message <20101007135257.05a93975 at udp111988uds.am.freescale.net> you wrote:
>> >
>> > > It is a pretty common method to use a pointer to some struct (for
>> > > example, some form of PDU) and make it point to some I/O buffer.
>> > 
>> > Yes, but at that point we are not talking about well-defined C, but
>> > rather implementation-specific behavior.  There's nothing wrong with
>> > it, but the C standard is no longer authoritative on what happens in
>> > such cases.
>> 
>> Huch?  Which part of that is not well-defined (or even not
>> standard-conforming) C?
>
> Well, how do you obtain the unaligned pointer?

[...]

> Extensions like __attribute__((packed)) are obviously not
> well-defined C.

In ISO-IEC9899:TC3[1] I find this about dereferencing a pointer:

,----[ 6.5.3.2 footnote 87 ]
| [...]
| Among the invalid values for dereferencing a pointer by the unary *
| operator are a null pointer, an address inappropriately aligned for the
| type of object pointed to, and the address of an object after the end of
| its lifetime.
`----

So dereferencing such a pointer - however we arrive at it - is simply
invalid.  The same sentence is in the ANSI spec[2] also.  The C FAQ[3]
notes in section 16.8 that using unaligned pointers may very well lead
to segmentation faults, bus errors or general protection faults.  Not
much documentation actually...

Cheers
  Detlev

[1] http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
[2] http://flash-gordon.me.uk/ansi.c.txt
[3] http://www.c-faq.com/versions.html


-- 
... the tools we are trying to use and the language or notation we are using to
express or record our thoughts,  are the major factors  determining what we can
think or express at all!
                                        -- Edsger W. Dijkstra
--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de


More information about the U-Boot mailing list