[U-Boot] [PATCH v1] Refactor linker-generated arrays

Andreas Bießmann
2013-02-04T12:41:09Z

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---

I think other gcc-4.4 users will see the same error. Currently I have no
time to dive into this.

Best regards

Andreas Bie?mann