From e7ed720699e8698d83c2e582f46306d8d2fb69a6 Mon Sep 17 00:00:00 2001 From: Pavel Pisa Date: Fri, 29 Jan 2021 15:38:46 +0100 Subject: [PATCH] boards/arm/lpc17xx_40xx/lx_cpu/: increase sections alignment and fix .ARM.exidx overlap. The ARMv7 specifies minimal alignment to be 8 for EABI. Ensure that sections are placed with even greater minimal alignment. Sections final alignment should be adjusted according to alignment of their inputs, but for some reasons some combinations lead to .ARM.exidx overlap with .data. When alignment is increased then the direct fetch of the fill location _eronly = ABSOLUTE(.); does not match with final LMA placement of the .data section. Use constructs which should result in matching .data LMA address for all cases _eronly = ABSOLUTE(.); Signed-off-by: Pavel Pisa --- .../lx_cpu/scripts/link-flash-app.ld | 14 +++++++------- .../lx_cpu/scripts/link-flash-boot.ld | 14 +++++++------- .../lpc17xx_40xx/lx_cpu/scripts/link-sdram.ld | 17 ++++++++--------- 3 files changed, 22 insertions(+), 23 deletions(-) mode change 100644 => 100755 boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-flash-app.ld diff --git a/boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-flash-app.ld b/boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-flash-app.ld old mode 100644 new mode 100755 index 9e6aaed899..85b5060790 --- a/boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-flash-app.ld +++ b/boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-flash-app.ld @@ -78,25 +78,23 @@ SECTIONS _etext = ABSOLUTE(.); } > FLASH - .init_section : ALIGN(4) { + .init_section : ALIGN(16) { _sinit = ABSOLUTE(.); *(.init_array .init_array.*) _einit = ABSOLUTE(.); } > FLASH - .ARM.extab : { + .ARM.extab : ALIGN(16) { *(.ARM.extab*) } > FLASH - .ARM.exidx : ALIGN(4) { + .ARM.exidx : ALIGN(16) { __exidx_start = ABSOLUTE(.); *(.ARM.exidx*) __exidx_end = ABSOLUTE(.); } > FLASH - _eronly = ABSOLUTE(.); - - .data : ALIGN(4) { + .data : ALIGN(16) { _sdata = ABSOLUTE(.); *(.data .data.*) *(.gnu.linkonce.d.*) @@ -105,7 +103,9 @@ SECTIONS _edata = ABSOLUTE(.); } > SRAM AT > FLASH - .bss : ALIGN(4) { + _eronly = LOADADDR(.data); + + .bss : ALIGN(16) { _sbss = ABSOLUTE(.); *(.bss .bss.*) *(.gnu.linkonce.b.*) diff --git a/boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-flash-boot.ld b/boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-flash-boot.ld index 02d9c14c99..e9a80ef723 100644 --- a/boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-flash-boot.ld +++ b/boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-flash-boot.ld @@ -76,25 +76,23 @@ SECTIONS _etext = ABSOLUTE(.); } > FLASH - .init_section : ALIGN(4) { + .init_section : ALIGN(16) { _sinit = ABSOLUTE(.); *(.init_array .init_array.*) _einit = ABSOLUTE(.); } > FLASH - .ARM.extab : { + .ARM.extab : ALIGN(16) { *(.ARM.extab*) } > FLASH - .ARM.exidx : ALIGN(4) { + .ARM.exidx : ALIGN(16) { __exidx_start = ABSOLUTE(.); *(.ARM.exidx*) __exidx_end = ABSOLUTE(.); } > FLASH - _eronly = ABSOLUTE(.); - - .data : ALIGN(4) { + .data : ALIGN(16) { _sdata = ABSOLUTE(.); *(.data .data.*) *(.gnu.linkonce.d.*) @@ -103,7 +101,9 @@ SECTIONS _edata = ABSOLUTE(.); } > SRAM AT > FLASH - .bss : ALIGN(4) { + _eronly = LOADADDR(.data); + + .bss : ALIGN(16) { _sbss = ABSOLUTE(.); *(.bss .bss.*) *(.gnu.linkonce.b.*) diff --git a/boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-sdram.ld b/boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-sdram.ld index 423d2af889..cab2f72877 100644 --- a/boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-sdram.ld +++ b/boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-sdram.ld @@ -79,26 +79,23 @@ SECTIONS _etext = ABSOLUTE(.); } > SDRAM - .init_section : { + .init_section : ALIGN(16) { _sinit = ABSOLUTE(.); *(.init_array .init_array.*) _einit = ABSOLUTE(.); } > SDRAM - .ARM.extab : { + .ARM.extab : ALIGN(16) { *(.ARM.extab*) } > SDRAM - __exidx_start = ABSOLUTE(.); - .ARM.exidx : { + .ARM.exidx : ALIGN(16) { + __exidx_start = ABSOLUTE(.); *(.ARM.exidx*) + __exidx_end = ABSOLUTE(.); } > SDRAM - __exidx_end = ABSOLUTE(.); - - _eronly = ABSOLUTE(.); - - .data : { + .data : ALIGN(16) { _sdata = ABSOLUTE(.); *(.data .data.*) *(.gnu.linkonce.d.*) @@ -107,6 +104,8 @@ SECTIONS _edata = ABSOLUTE(.); } > SRAM AT > SDRAM + _eronly = LOADADDR(.data); + .bss : { _sbss = ABSOLUTE(.); *(.bss .bss.*)