Skip to content

Commit 0269a95

Browse files
authored
Merge pull request #56 from fjtrujy/fix_linkfile
Issues with `stack` and `heap`
2 parents eb47110 + b2f8dab commit 0269a95

File tree

2 files changed

+36
-26
lines changed

2 files changed

+36
-26
lines changed

ee/linkfile

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ MEMORY {
2222

2323
REGION_ALIAS("MAIN_REGION", bram);
2424

25+
END_MAIN_REGION = ORIGIN(MAIN_REGION) + LENGTH(MAIN_REGION);
26+
2527
PHDRS {
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
}

ee/linkfile.loadhigh

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ MEMORY {
2222

2323
REGION_ALIAS("MAIN_REGION", high);
2424

25+
END_MAIN_REGION = ORIGIN(MAIN_REGION) + LENGTH(MAIN_REGION);
26+
2527
PHDRS {
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

Comments
 (0)