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 :
|
.rodata :
|
||||||
{
|
{
|
||||||
. = ALIGN(4);
|
. = ALIGN(8);
|
||||||
_frodata = .;
|
_frodata = .;
|
||||||
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
||||||
*(.rodata1)
|
*(.rodata1)
|
||||||
|
. = ALIGN(8);
|
||||||
_erodata = .;
|
_erodata = .;
|
||||||
} > main_ram
|
} > main_ram
|
||||||
|
|
||||||
.data :
|
.data :
|
||||||
{
|
{
|
||||||
. = ALIGN(4);
|
. = ALIGN(8);
|
||||||
_fdata = .;
|
_fdata = .;
|
||||||
*(.data .data.* .gnu.linkonce.d.*)
|
*(.data .data.* .gnu.linkonce.d.*)
|
||||||
*(.data1)
|
*(.data1)
|
||||||
_gp = ALIGN(16);
|
_gp = ALIGN(16);
|
||||||
*(.sdata .sdata.* .gnu.linkonce.s.*)
|
*(.sdata .sdata.* .gnu.linkonce.s.*)
|
||||||
|
. = ALIGN(8);
|
||||||
_edata = .;
|
_edata = .;
|
||||||
} > main_ram
|
} > main_ram
|
||||||
|
|
||||||
.bss :
|
.bss :
|
||||||
{
|
{
|
||||||
. = ALIGN(4);
|
. = ALIGN(8);
|
||||||
_fbss = .;
|
_fbss = .;
|
||||||
*(.dynsbss)
|
*(.dynsbss)
|
||||||
*(.sbss .sbss.* .gnu.linkonce.sb.*)
|
*(.sbss .sbss.* .gnu.linkonce.sb.*)
|
||||||
|
@ -44,13 +46,13 @@ SECTIONS
|
||||||
*(.dynbss)
|
*(.dynbss)
|
||||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
. = ALIGN(4);
|
. = ALIGN(8);
|
||||||
_ebss = .;
|
_ebss = .;
|
||||||
_end = .;
|
_end = .;
|
||||||
} > sram
|
} > sram
|
||||||
}
|
}
|
||||||
|
|
||||||
PROVIDE(_fstack = ORIGIN(sram) + LENGTH(sram) - 4);
|
PROVIDE(_fstack = ORIGIN(sram) + LENGTH(sram));
|
||||||
|
|
||||||
PROVIDE(_fdata_rom = LOADADDR(.data));
|
PROVIDE(_fdata_rom = LOADADDR(.data));
|
||||||
PROVIDE(_edata_rom = LOADADDR(.data) + SIZEOF(.data));
|
PROVIDE(_edata_rom = LOADADDR(.data) + SIZEOF(.data));
|
||||||
|
|
Loading…
Reference in New Issue