Fix alignement errors in Linkerscript. This is not very critical as the Cortex M4 is able to read 32 bit words from unaligned addresses

This commit is contained in:
Mario Hüttel 2021-05-24 12:33:23 +02:00
parent c504494a3d
commit 027eaad215
1 changed files with 19 additions and 23 deletions

View File

@ -41,16 +41,14 @@ MEMORY
SECTIONS SECTIONS
{ {
.vectors : .vectors : ALIGN(4)
{ {
. = ALIGN(4);
KEEP(*(.vectors)) KEEP(*(.vectors))
. = ALIGN(4); . = ALIGN(4);
} >FLASH } >FLASH
.text : .text : ALIGN(4)
{ {
. = ALIGN(4);
*(.text) /* .text sections (code) */ *(.text) /* .text sections (code) */
*(.text*) /* .text* sections (code) */ *(.text*) /* .text* sections (code) */
*(.rodata) /* .rodata sections (constants, strings, etc.) */ *(.rodata) /* .rodata sections (constants, strings, etc.) */
@ -60,27 +58,28 @@ SECTIONS
*(.eh_frame) *(.eh_frame)
KEEP(*(.init)) /* Constructors */ KEEP(*(.init)) /* Constructors */
KEEP(*(.fini)) /* Destructors */ KEEP(*(.fini)) /* Destructors */
} >FLASH . = ALIGN(4);
} >FLASH =0xFF
.ARM.extab : .ARM.extab : ALIGN(4)
{ {
*(.ARM.extab* .gnu.linkonce.armextab.*) *(.ARM.extab* .gnu.linkonce.armextab.*)
} >FLASH } >FLASH =0xFF
.ARM : .ARM : ALIGN(4)
{ {
__exidx_start = .; __exidx_start = .;
*(.ARM.exidx*) *(.ARM.exidx*)
__exidx_end = .; __exidx_end = .;
} >FLASH } >FLASH =0xFF
/* Constructor/Destructor tables */ /* Constructor/Destructor tables */
.preinit_array : .preinit_array : ALIGN(4)
{ {
PROVIDE_HIDDEN (__preinit_array_start = .); PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array*)) KEEP (*(.preinit_array*))
PROVIDE_HIDDEN (__preinit_array_end = .); PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH } >FLASH =0xFF
.init_array : .init_array :
{ {
@ -88,7 +87,7 @@ SECTIONS
KEEP (*(SORT(.init_array.*))) KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array*)) KEEP (*(.init_array*))
PROVIDE_HIDDEN (__init_array_end = .); PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH } >FLASH =0xFF
.fini_array : .fini_array :
{ {
@ -96,13 +95,14 @@ SECTIONS
KEEP (*(.fini_array*)) KEEP (*(.fini_array*))
KEEP (*(SORT(.fini_array.*))) KEEP (*(SORT(.fini_array.*)))
PROVIDE_HIDDEN (__fini_array_end = .); PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH /* Ensure the flash is aligned at a 32 bit word boundary */
. = ALIGN(4);
} >FLASH =0xFF
/* Initialized CCM data */ /* Initialized CCM data */
__ld_load_ccm_data = LOADADDR(.ccmdata); __ld_load_ccm_data = LOADADDR(.ccmdata);
.ccmdata : .ccmdata : ALIGN(4)
{ {
. = ALIGN(4);
__ld_sdata_ccm = .; __ld_sdata_ccm = .;
*(.ccm.data) *(.ccm.data)
*(.ccm.data*) *(.ccm.data*)
@ -110,9 +110,8 @@ SECTIONS
__ld_edata_ccm = .; __ld_edata_ccm = .;
} >CCM AT> FLASH } >CCM AT> FLASH
.ccmbss (NOLOAD) : .ccmbss (NOLOAD) : ALIGN(4)
{ {
. = ALIGN(4);
__ld_sbss_ccm = .; __ld_sbss_ccm = .;
*(.ccm.bss) *(.ccm.bss)
*(.ccm.bss*) *(.ccm.bss*)
@ -122,9 +121,8 @@ SECTIONS
/* Initialized Data */ /* Initialized Data */
__ld_load_data = LOADADDR(.data); __ld_load_data = LOADADDR(.data);
.data : .data : ALIGN(4)
{ {
. = ALIGN(4);
__ld_sdata = .; __ld_sdata = .;
*(.data) *(.data)
*(.data*) *(.data*)
@ -133,9 +131,8 @@ SECTIONS
} >RAM AT> FLASH } >RAM AT> FLASH
/* Uninitialized static data */ /* Uninitialized static data */
.bss (NOLOAD) : .bss (NOLOAD) : ALIGN(4)
{ {
. = ALIGN(4);
__ld_sbss = .; __ld_sbss = .;
*(.bss) *(.bss)
*(.bss*) *(.bss*)
@ -144,9 +141,8 @@ SECTIONS
__ld_ebss = .; __ld_ebss = .;
} >RAM } >RAM
.heap_stack (NOLOAD) : .heap_stack (NOLOAD) : ALIGN(4)
{ {
. = ALIGN(4);
__ld_sheap = .; __ld_sheap = .;
. = . + __ld_heap_size; . = . + __ld_heap_size;
__ld_eheap = .; __ld_eheap = .;