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.
This commit is contained in:
parent
78c1751c47
commit
92fd154b28
|
@ -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));
|
||||
|
|
Loading…
Reference in New Issue