-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSTM32F103xB.ld
145 lines (129 loc) · 3.23 KB
/
STM32F103xB.ld
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/**
* STM32F103 Bootloader linker script
*
* John Berg @ netbasenext.nl
*/
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(Reset_Handler)
MEMORY
{
FLASH (RX) : ORIGIN = 0x08000000, LENGTH = 56K /* 8k from 128(64)k reserved for bootloader */
RAM (W!RX) : ORIGIN = 0x20000000, LENGTH = 16K /* do not mix user app ram and bootloader */
}
/**
* Define the top of the stack as the end of RAM
*/
_heap_size_min = 256;
_stack_size_min = 512; /* On a system with 64K, 8K was used */
_estack = (0x20000000+8K);
SECTIONS
{
/* General code */
.text :
{
_flash_start = .;
. = ALIGN(4);
/* At beginning of flash is:
*
* Required:
* 0x0000 Initial stack pointer
* 0x0004 Reset Handler
*
* Optional:
* 0x0008 and beyond: NVIC ISR Table
*/
KEEP(*(.isr_vector))
. = ALIGN(4);
*(.text)
*(.text*)
*(.glue_7)
*(.glue_7t)
/* C startup support */
/* TODO: Convert to -nostartfiles for maximum DIY */
*(.eh_frame)
KEEP(*(.init))
KEEP(*(.fini))
} > FLASH
/* Additional C++ Support sections */
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array*))
PROVIDE_HIDDEN (__preinit_array_end = .);
} > FLASH
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array*))
PROVIDE_HIDDEN (__init_array_end = .);
} > FLASH
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT(.fini_array.*)))
KEEP (*(.fini_array*))
PROVIDE_HIDDEN (__fini_array_end = .);
} > FLASH
.eeprom :
{
*(.eeprom)
*(.eeprom*)
} > EEPROM
/* Load address of .data in flash for startup code */
_sidata = LOADADDR(.data);
/* Initialized data */
.data :
{
. = ALIGN(4);
_sdata = .; /* Start of data in RAM */
*(.data);
*(.data*);
. = ALIGN(4);
_edata = .; /* End of data in RAM */
} > RAM AT > FLASH
/* Zeroed data */
. = ALIGN(4);
.bss :
{
_sbss = .; /* Start of bss in RAM */
__bss_start__ = _sbss;
*(.bss)
*(.bss*)
. = ALIGN(4);
_ebss = .; /* End of bss in RAM */
__bss_end__ = _ebss;
} > RAM
/* Fake stack section to ensure that sufficient space is left */
._user_heap_stack :
{
. = ALIGN(4);
. = . + _stack_size_min;
. = . + _heap_size_min;
. = ALIGN(4);
} > RAM
/* USB/CAN Packet Memory Area (PMA) */
.pma :
{
_pma_start = .; /* Start of PMA in real memory space */
. = ALIGN(2);
*(.pma)
*(.pma*)
. = ALIGN(2);
_pma_end = .; /* End of PMA in PMA space */
} > PMA
/* Remove information from the standard libraries */
/DISCARD/ :
{
libc.a ( * )
libm.a ( * )
libgcc.a ( * )
}
PROVIDE_HIDDEN (__exidx_start = .);
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
}
PROVIDE_HIDDEN (__exidx_end = .);
}