diff options
author | Manfred Schlaegl <manfred.schlaegl@ginzinger.com> | 2017-05-10 16:41:32 +0300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2017-06-12 15:36:18 +0300 |
commit | cdde7de0364ffa505d631b342f1a2fa729e8e67d (patch) | |
tree | 9a2af676c1ce879fcee5c0078317222e182721b6 /arch/arm/cpu/u-boot.lds | |
parent | 8cb3ce64f936f5dedbcfc1935c5caf31bb682474 (diff) | |
download | u-boot-cdde7de0364ffa505d631b342f1a2fa729e8e67d.tar.xz |
ARM: fixed relocation using proper alignment
Using u-boot-2017.05 on i.MX6UL we ran into following problem:
Initially U-Boot could be started normally.
If we added one random command in configuration, the newly generated
image hung at startup (last output was DRAM: 256 MiB).
We tracked this down to a data abort within relocation (relocated_code).
relocated_code in arch/arm/lib/relocate.S copies 8 bytes per loop
iteration until the source pointer is equal to __image_copy_end.
In a good case __image_copy_end was aligned to 8 bytes, so the loop
stopped as suggested, but in an errornous case __image_copy_end was
not aligned to 8 bytes, so the loop ran out of bounds and caused a
data abort exception.
This patches solves the issue by aligning __image_copy_end to 8 byte
using the linker script related to arm.
I don't know if it's the correct way to solve this, so some review would
be very appreciated.
Diffstat (limited to 'arch/arm/cpu/u-boot.lds')
-rw-r--r-- | arch/arm/cpu/u-boot.lds | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds index 37d4c605ac..70bee1a3f8 100644 --- a/arch/arm/cpu/u-boot.lds +++ b/arch/arm/cpu/u-boot.lds @@ -165,7 +165,7 @@ SECTIONS *(.__efi_runtime_rel_stop) } - . = ALIGN(4); + . = ALIGN(8); .image_copy_end : { |