From 92fd154b28bb82abe7126aeda02188beccb7577d Mon Sep 17 00:00:00 2001 From: Michal Sieron Date: Wed, 18 Aug 2021 18:25:22 +0200 Subject: [PATCH] Fix alignments in demo/linker.ld Without this change, when `.data` section size wasn't multiple of word size, `data_loop` in crt0 was jumping over `_edata` and continued looping. As it works on words and right now 64 bit CPUs are biggest ones supported - alignment is now 8 bytes. Also removed `- 4` from stack address, as it needs to be aligned to 16 bytes on RISC-V. --- litex/soc/software/demo/linker.ld | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/litex/soc/software/demo/linker.ld b/litex/soc/software/demo/linker.ld index 36af68283..9eb7bd607 100644 --- a/litex/soc/software/demo/linker.ld +++ b/litex/soc/software/demo/linker.ld @@ -16,27 +16,29 @@ SECTIONS .rodata : { - . = ALIGN(4); + . = ALIGN(8); _frodata = .; *(.rodata .rodata.* .gnu.linkonce.r.*) *(.rodata1) + . = ALIGN(8); _erodata = .; } > main_ram .data : { - . = ALIGN(4); + . = ALIGN(8); _fdata = .; *(.data .data.* .gnu.linkonce.d.*) *(.data1) _gp = ALIGN(16); *(.sdata .sdata.* .gnu.linkonce.s.*) + . = ALIGN(8); _edata = .; } > main_ram .bss : { - . = ALIGN(4); + . = ALIGN(8); _fbss = .; *(.dynsbss) *(.sbss .sbss.* .gnu.linkonce.sb.*) @@ -44,13 +46,13 @@ SECTIONS *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) - . = ALIGN(4); + . = ALIGN(8); _ebss = .; _end = .; } > sram } -PROVIDE(_fstack = ORIGIN(sram) + LENGTH(sram) - 4); +PROVIDE(_fstack = ORIGIN(sram) + LENGTH(sram)); PROVIDE(_fdata_rom = LOADADDR(.data)); PROVIDE(_edata_rom = LOADADDR(.data) + SIZEOF(.data));