[U-Boot] packed attribute problem

Vipin Kumar vipin.kumar at st.com
Mon Oct 4 12:57:26 CEST 2010


On 10/4/2010 4:14 PM, Wolfgang Denk wrote:
> Dear Vipin Kumar,
> 
> In message <4CA9ACAA.2020001 at st.com> you wrote:
>>
>>>> This writel results in writing byte by byte on the address pointed to by status_reg.
>>>> This problem is visible with both gcc version 4.4.1 as well as 4.5.0
>>>
>>> I bet this is on some ARM system?
>>
>> Yes, it is on an ARM system (CortexA9). But I still feel that since I am creating 
>> a new u32 * status_reg, the code should not use any intelligence and use the pointer 
>> only to produce an str instruction in the form
>> 	str r0, [r1]
>>
>> But it retains the packed property of the structure even with a new u32 ponter 
>> typecasted to u32 *
>> 	u32 * status_reg = (u32 *)xyz->x;
>>
>> A writel to status_reg results in byte by byte writing
> 
> I agree with you. I always considered such behaviour of the ARM C
> compiler a bug, and still do.  However, people with better knowledge
> of the ARm architecture than me might be able to explain why the
> responsible PTB consider this to be a good and necessary "feature" of
> th compiler.
> 
>>> Hm... Why do these structs have any "__attribute__ ((packed))" at all?
>>
>> Even I could not understand that very well
> 
> Eventually alignment of these structs cannot be guaranteed?
> 

In my opinion it can be guaranteed. 
btw, I am talking about ehci_hcor structure in include/usb/host/ehci.h
The only reason I am confused is that a lot many platforms would have faced a
similar problem (or is it only me). 

Please confirm if I should remove the packed attribute and send a patch

This also raises one doubt. Since u-boot code now contains structures to access 
device registers, using packed attribute with these structures can be lethal

Regards
Vipin


More information about the U-Boot mailing list