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 <ppisa@pikron.com>
This commit is contained in:
Pavel Pisa 2021-01-29 15:38:46 +01:00 committed by Xiang Xiao
parent 210689535a
commit e7ed720699
3 changed files with 22 additions and 23 deletions

View File

@ -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.*)

View File

@ -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.*)

View File

@ -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.*)