This repository was archived by the owner on Apr 25, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathopenpython.ld
More file actions
115 lines (94 loc) · 3.2 KB
/
Copy pathopenpython.ld
File metadata and controls
115 lines (94 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
GNU linker script for OpenPython
*/
/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K
SRAM (rw) : ORIGIN = 0x20000000, LENGTH = 64K
RAM (rw) : ORIGIN = 0x60000000, LENGTH = 192K
}
/* produce a link error if there is not this amount of SRAM/RAM for these sections */
_minimum_stack_size = 16K;
_minimum_heap_size = 128K;
/* Define tho top end of the stack. The stack is full descending so begins just
above last byte of SRAM. Note that EABI requires the stack to be 8-byte
aligned for a call. */
_estack = ORIGIN(SRAM) + LENGTH(SRAM);
/* RAM extents for the garbage collector */
_sram_start = ORIGIN(SRAM);
_sram_end = ORIGIN(SRAM) + LENGTH(SRAM);
_ram_start = ORIGIN(RAM); /* heap starts just after statically allocated memory */
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
/* Memory layout for basic configuration:
FLASH .startup
FLASH .text
FLASH .data
SRAM .data
SRAM .bss
SRAM .stack
RAM .heap
*/
ENTRY(Reset_Handler)
/* define output sections */
SECTIONS
{
/* The startup code goes first into FLASH */
.startup :
{
. = ALIGN(4);
_svec = .;
KEEP(*(.startup)) /* Startup code */
. = ALIGN(4);
} >FLASH
/* The program code and other data goes into FLASH */
.text :
{
. = ALIGN(4);
*(.text*) /* .text* sections (code) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
/* *(.glue_7) */ /* glue arm to thumb code */
/* *(.glue_7t) */ /* glue thumb to arm code */
. = ALIGN(4);
_etext = .; /* define a global symbol at end of code */
} >FLASH
/* used by the startup to initialize data */
_sidata = LOADADDR(.data);
/* This is the initialized data section
The program executes knowing that the data is in the SRAM
but the loader puts the initial values in the FLASH (inidata).
It is one task of the startup to copy the initial values from FLASH to SRAM. */
.data :
{
. = ALIGN(4);
_sdata = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in SRAM */
*(.data*) /* .data* sections */
. = ALIGN(4);
_edata = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in SRAM */
} >SRAM AT> FLASH
/* Uninitialized data section */
.bss :
{
. = ALIGN(4);
_sbss = .; /* define a global symbol at bss start; used by startup code */
*(.bss*)
*(COMMON)
. = ALIGN(4);
_ebss = .; /* define a global symbol at bss end; used by startup code and GC */
} >SRAM
/* this just checks there is enough SRAM for the stack */
.stack :
{
. = ALIGN(4);
. = . + _minimum_stack_size;
. = ALIGN(4);
} >SRAM
/* this is to define the start of the heap, and make sure we have a minimum size */
.heap :
{
. = ALIGN(4);
. = . + _minimum_heap_size;
. = ALIGN(4);
} >RAM
.ARM.attributes 0 : { *(.ARM.attributes) }
}