@@ -22,6 +22,8 @@ MEMORY {
2222
2323REGION_ALIAS("MAIN_REGION", bram);
2424
25+ END_MAIN_REGION = ORIGIN(MAIN_REGION) + LENGTH(MAIN_REGION);
26+
2527PHDRS {
2628 text PT_LOAD;
2729}
@@ -40,29 +42,21 @@ SECTIONS {
4042 PROVIDE(_etext = .);
4143 PROVIDE(etext = .);
4244
43- .reginfo : { *(.reginfo) } >MAIN_REGION
44-
4545 /* Global/static constructors and deconstructors. */
4646 .ctors ALIGN(16): {
4747 KEEP(*crtbegin*.o(.ctors))
4848 KEEP(*(EXCLUDE_FILE(*crtend*.o) .ctors))
4949 KEEP(*(SORT(.ctors.*)))
5050 KEEP(*(.ctors))
5151 } >MAIN_REGION
52-
5352 .dtors ALIGN(16): {
5453 KEEP(*crtbegin*.o(.dtors))
5554 KEEP(*(EXCLUDE_FILE(*crtend*.o) .dtors))
5655 KEEP(*(SORT(.dtors.*)))
5756 KEEP(*(.dtors))
5857 } >MAIN_REGION
5958
60- /* Static data. */
61- .rodata ALIGN(128): {
62- *(.rodata)
63- *(.rodata.*)
64- *(.gnu.linkonce.r*)
65- } >MAIN_REGION
59+ .reginfo : { *(.reginfo) } >MAIN_REGION
6660
6761 .data ALIGN(128): {
6862 _fdata = . ;
@@ -72,6 +66,13 @@ SECTIONS {
7266 SORT(CONSTRUCTORS)
7367 } >MAIN_REGION
7468
69+ /* Static data. */
70+ .rodata ALIGN(128): {
71+ *(.rodata)
72+ *(.rodata.*)
73+ *(.gnu.linkonce.r*)
74+ } >MAIN_REGION
75+
7576 .rdata ALIGN(128): { *(.rdata) } >MAIN_REGION
7677 .gcc_except_table ALIGN(128): { *(.gcc_except_table) } >MAIN_REGION
7778
@@ -108,9 +109,13 @@ SECTIONS {
108109 _end = . ;
109110 PROVIDE(end = .);
110111
111- /* Symbols needed by crt0.s. */
112- PROVIDE(_heap_size = -1);
112+ .spad 0x70000000: {
113+ *(.spad)
114+ } >MAIN_REGION
113115
114- PROVIDE(_stack = .);
115- PROVIDE(_stack_size = ORIGIN(MAIN_REGION) + LENGTH(MAIN_REGION) - _stack);
116+ /* Symbols needed by crt0.c. */
117+ /* We set a fixed stack size and the pointer for the stack, letting the remaining memory be the heap. */
118+ PROVIDE(_stack_size = 32 * 1024);
119+ PROVIDE(_stack = END_MAIN_REGION - _stack_size);
120+ PROVIDE(_heap_size = -1);
116121}
0 commit comments