[U-Boot] [PATCH v3] ARM: Avoid compiler optimization for usages of readb, writeb and friends.

Alexander Holler
2011-01-01T17:52:41Z

Hello,

Am 01.01.2011 13:04, schrieb Dirk Behme:
> On 22.12.2010 12:04, Alexander Holler wrote:
>> gcc 4.5.1 seems to ignore (at least some) volatile definitions,
>> avoid that as done in the kernel.
>>
>> Reading C99 6.7.3 8 and the comment 114) there, I think it is a bug of
>> that
>> gcc version to ignore the volatile type qualifier used e.g. in
>> __arch_getl().
>> Anyway, using a definition as in the kernel headers avoids such
>> optimizations when
>> gcc 4.5.1 is used.
>>
>> Maybe the headers as used in the current linux-kernel should be used,
>> but to avoid large changes, I've just added a small change to the
>> current headers.

> Do you like to test the patch in the attachment? I named it 'v4'.
>
> After some thinking and testing, it seems to me that the volatile
> optimization issue this patch shall fix is only with the readx() macros.
> So the idea is to drop all writex() changes done in the v3 version of
> this patch. With dropping the writex() changes, we would drop all issues
> we discussed with e.g. the GCC statement-expression and the do while
> workaround, too.

I've come across a bug which reads as the problem might be fixed in gcc
4.5.2:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45052

I will test gcc 4.5.2 in the next days.

Besides that I still think the correct solution would be to use the
arm-headers as found in the current linux kernel. The problem is, that I
don't know (haven't looked up) the reasons for changes in the
arm-linux-headers as currently found in u-boot.

And because updating those headers might require some more changes in
various other places in u-boot, I think it would be good if one of the
u-boot-arm-maintainers would do that. I'm not that much involved in
u-boot-development, don't follow the ml closely and therefor might miss
necessary changes when taking the current arm-headers from the kernel
and dropping them into u-boot.

Regards,

Alexander