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:
parent
210689535a
commit
e7ed720699
14
boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-flash-app.ld
Normal file → Executable file
14
boards/arm/lpc17xx_40xx/lx_cpu/scripts/link-flash-app.ld
Normal file → Executable 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.*)
|
||||
|
@ -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.*)
|
||||
|
@ -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.*)
|
||||
|
Loading…
Reference in New Issue
Block a user