
Hi Andreas,
On Mon, 04 Feb 2013 13:41:09 +0100, "Andreas Bießmann" andreas.devel@googlemail.com wrote:
Hi Albert,
On 02.02.2013 18:02, Albert ARIBAUD wrote:
Refactor linker-generated array code so that symbols which were previously linker-generated are now compiler- generated. This causes relocation records of type R_ARM_ABS32 to become R_ARM_RELATIVE, which makes code which uses LGA able to run before relocation as well as after.
Note: this affects more than ARM targets, as linker- lists span possibly all target architectures, notably PowerPC.
Signed-off-by: Albert ARIBAUD albert.u.boot@aribaud.net
Tested on avr32. The patch seems to work (basic shell testing), however it generates an aliasing warning:
---8<--- abiessmann@azuregos % PATH=$AVR32_PATH:$PATH BUILD_DIR=/tmp/build_avr32 MAKEALL_LOGDIR=/tmp/LOG BUILD_NCPUS=4 BUILD_NBUILDS=4 ./MAKEALL atstk1002 Configuring for atstk1002 board... text data bss dec hex filename 116315 8972 211900 337187 52523 /tmp/build_avr32/atstk1002/u-boot env_callback.c: In function 'find_env_callback': env_callback.c:47: warning: dereferencing pointer 'clbkp' does break strict-aliasing rules env_callback.c:44: note: initialized from here env_callback.c:46: note: initialized from here --->8---
I think it has something to do with tha fact that you re-cast the anonymous struct 'start' here:
---8<--- #define ll_entry_start(_type, _list) ({ static struct {} start __aligned(4) __attribute__((unused, section(".u_boot_list_2_"#_list"_1"))); (_type *)&start; }) --->8---
Thanks Andreas for bringing this to my attention -- I'm surprised that there's only one such warning, though, as there are may such casts. I'll get my hands on a 4.4 compiler and try to find a way to cleanly avoid the warning.
I think other gcc-4.4 users will see the same error. Currently I have no time to dive into this.
Don't bother. I'll do the diving. :)
Best regards
Andreas Bießmann
Amicalement,