[U-Boot] packed attribute problem
Vipin Kumar
vipin.kumar at st.com
Tue Oct 5 05:45:36 CEST 2010
On 10/4/2010 6:13 PM, Reinhard Meyer wrote:
>> > bar:
>> > @ Function supports interworking.
>> > @ args = 0, pretend = 0, frame = 0
>> > @ frame_needed = 0, uses_anonymous_args = 0
>> > @ link register save eliminated.
>> > @ lr needed for prologue
>> > mov r2, #5
>> > mov r3, #4096
>> > str r2, [r3, #0]
>> > bx lr
>> > .size bar, .-bar
>> > .ident "GCC: (GNU) 4.2.2"
>> >
>> >
>> > Note that this is with GCC 4.2.2. Even GCC 4.0.0 behaves the same, so
>> > this is *not* an issue with very recent tool chains.
> OK, for directly adressing elements inside a packed struct;
> but the original post said:
>
> "struct xyz {
> int x;
> int y;
> int z[CONST];
> } __attribute__ ((packed));
>
> struct xyz *abc;
> u32 * status_reg = (u32 *)&abc->z[0];
>
> writel(status, status_reg);"
>
> So the "status_reg" pointer is in a completely unrelated (to the packed struct)
> "u32 *" and still the access is done like it was packed. If the
> compiler silently drags that attribute along into the "u32 *"
> THAT is really sick!
>
Yes, This is exactly what I wanted to point out. I can see this behavior with
gcc-4.5.0 but the same code works well with gcc-4.2.4
Vipin
More information about the U-Boot
mailing list