[U-Boot] Bug in TOP860 code with gcc 4.8.1

Dear Reinhard,
attempting to build the TOP860 code with a GCC 4.8.1 based tool chain (say ELDK v5.5 or Yocto 1.5) gives the following errors:
-> ./MAKEALL TOP860 Configuring for TOP860 board... text data bss dec hex filename 165471 21020 17316 203807 31c1f ./u-boot ../common/flash.c: In function 'flash_init': ../common/flash.c:336:20: warning: iteration 128u invokes undefined behavior [-Waggressive-loop-optimizations] info->start[i] = (ulong)addr + 0x10000 * i; ^ ../common/flash.c:334:4: note: containing loop for (i = 0; i < info->sector_count; i++) ^ ...
Can you please provide a fix - or is this old hardware and the code should be removed from the U-Boot tree?
Best regards,
Wolfgang Denk

Dear Wolfgang,
Dear Reinhard,
attempting to build the TOP860 code with a GCC 4.8.1 based tool chain (say ELDK v5.5 or Yocto 1.5) gives the following errors:
-> ./MAKEALL TOP860 Configuring for TOP860 board... text data bss dec hex filename 165471 21020 17316 203807 31c1f ./u-boot ../common/flash.c: In function 'flash_init': ../common/flash.c:336:20: warning: iteration 128u invokes undefined behavior [-Waggressive-loop-optimizations] info->start[i] = (ulong)addr + 0x10000 * i; ^ ../common/flash.c:334:4: note: containing loop for (i = 0; i < info->sector_count; i++) ^ ...
Can you please provide a fix - or is this old hardware and the code should be removed from the U-Boot tree?
1. on first and second glance I cannot see where this (simple!!) loop might "invoke undefined behaviour". Seems like a compiler/optimizer bug to me...
2. should not the same issue arise with TOP5200 (using the same flash.c) ??
3. nevertheless TOP860 can be removed.
Best Regards, Reinhard

Hello Reinhard,
On 01/14/2014 12:33 PM, Reinhard Meyer wrote:
Dear Wolfgang,
Dear Reinhard,
attempting to build the TOP860 code with a GCC 4.8.1 based tool chain (say ELDK v5.5 or Yocto 1.5) gives the following errors:
-> ./MAKEALL TOP860 Configuring for TOP860 board... text data bss dec hex filename 165471 21020 17316 203807 31c1f ./u-boot ../common/flash.c: In function 'flash_init': ../common/flash.c:336:20: warning: iteration 128u invokes undefined behavior [-Waggressive-loop-optimizations] info->start[i] = (ulong)addr + 0x10000 * i; ^ ../common/flash.c:334:4: note: containing loop for (i = 0; i < info->sector_count; i++) ^ ...
Can you please provide a fix - or is this old hardware and the code should be removed from the U-Boot tree?
- on first and second glance I cannot see where this (simple!!) loop
might "invoke undefined behaviour". Seems like a compiler/optimizer bug to me...
- should not the same issue arise with TOP5200 (using the same
flash.c) ??
- nevertheless TOP860 can be removed.
It is out of bounds:
include/configs/TOP860.h:#define CONFIG_SYS_MAX_FLASH_SECT 128 /* max number of sectors on one chip */ include/configs/TOP5200.h:#define CONFIG_SYS_MAX_FLASH_SECT 256 /* max num of sects on one chip */
Removing will work as well of course ;)
Regards, Jeroen

Hello Jeroen,
Hello Reinhard,
On 01/14/2014 12:33 PM, Reinhard Meyer wrote:
Dear Wolfgang,
Dear Reinhard,
attempting to build the TOP860 code with a GCC 4.8.1 based tool chain (say ELDK v5.5 or Yocto 1.5) gives the following errors:
-> ./MAKEALL TOP860 Configuring for TOP860 board... text data bss dec hex filename 165471 21020 17316 203807 31c1f ./u-boot ../common/flash.c: In function 'flash_init': ../common/flash.c:336:20: warning: iteration 128u invokes undefined behavior [-Waggressive-loop-optimizations] info->start[i] = (ulong)addr + 0x10000 * i; ^ ../common/flash.c:334:4: note: containing loop for (i = 0; i < info->sector_count; i++) ^ ...
Can you please provide a fix - or is this old hardware and the code should be removed from the U-Boot tree?
- on first and second glance I cannot see where this (simple!!) loop
might "invoke undefined behaviour". Seems like a compiler/optimizer bug to me...
- should not the same issue arise with TOP5200 (using the same
flash.c) ??
- nevertheless TOP860 can be removed.
It is out of bounds:
include/configs/TOP860.h:#define CONFIG_SYS_MAX_FLASH_SECT 128 /* max number of sectors on one chip */ include/configs/TOP5200.h:#define CONFIG_SYS_MAX_FLASH_SECT 256 /* max num of sects on one chip */
Removing will work as well of course ;)
Regards, Jeroen
I see. Because of the common code with TOP5200, there is potentially a larger flash chip available in the switch, which would cause undefined behaviour later. However TOP860 has never seen more than 2MB of flash :) so there is no actual danger.
For the next few weeks I do not have the capacity to provide a patch, and since the TOP860 U-Boot is frozen to a very old state by the customers anyway, it is save to be removed from the current tree.
Best Regards Reinhard
participants (3)
-
Jeroen Hofstee
-
Reinhard Meyer
-
Wolfgang Denk