blob: 816ab6819c50bc4de4425f91cd6b02fea598b161 (
plain)
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
|
/* Simple RAM execution linker script for MCXA276 */
MEMORY
{
RAM : ORIGIN = 0x20000000, LENGTH = 128K
}
/* Pull in device default interrupt symbol aliases (e.g., CMC = DefaultHandler) */
INCLUDE device.x
/* Provide core exception weak aliases if not supplied by cortex-m-rt's link.x */
PROVIDE(NonMaskableInt = DefaultHandler);
PROVIDE(HardFault = DefaultHandler);
PROVIDE(MemoryManagement = DefaultHandler);
PROVIDE(BusFault = DefaultHandler);
PROVIDE(UsageFault = DefaultHandler);
PROVIDE(SecureFault = DefaultHandler);
PROVIDE(SVCall = DefaultHandler);
PROVIDE(DebugMonitor = DefaultHandler);
PROVIDE(PendSV = DefaultHandler);
PROVIDE(SysTick = DefaultHandler);
/* In RAM-run we have no FLASH sidata; copy from sdata */
__sidata = __sdata;
/* Ensure the PAC interrupt table is kept */
EXTERN(__INTERRUPTS);
/* Pull in defmt's linker script to generate the defmt table that host decoders expect */
INCLUDE defmt.x
ENTRY(Reset)
EXTERN(VECTOR_TABLE)
EXTERN(Reset)
EXTERN(main)
/* Define _stack_start at end of RAM BEFORE it's used in vector table */
_stack_start = ORIGIN(RAM) + LENGTH(RAM);
SECTIONS
{
.vector_table ORIGIN(RAM) :
{
/* Slot 0: Initial stack pointer - use our explicitly set _stack_start */
LONG(_stack_start);
/* Slot 1: Reset vector - address of Reset function with Thumb bit set */
LONG(Reset | 1);
/* Cortex-M33 core exceptions (slots 2-14) */
KEEP(*(.vector_table.exceptions));
/* Peripheral interrupt vectors provided by PAC (slots 16+) */
KEEP(*(.vector_table.interrupts));
} > RAM
.text :
{
KEEP(*(.text.Reset));
KEEP(*(.text.main));
*(.text .text.*);
} > RAM
/* Keep defmt table and fragments so host decoders can find metadata */
.defmt :
{
KEEP(*(.defmt));
KEEP(*(.defmt.*));
} > RAM
.rodata :
{
*(.rodata .rodata.*);
} > RAM
.data :
{
. = ALIGN(4);
__sdata = .;
*(.data .data.*);
. = ALIGN(4);
__edata = .;
} > RAM
/* Ensure RTT control block with "SEGGER RTT" signature is loaded to RAM */
.rtt :
{
KEEP(*(.rtt));
} > RAM
/* Place uninitialized buffers (like defmt-rtt) in RAM; load is fine for RAM-run */
.uninit :
{
*(.uninit .uninit.*);
} > RAM
.bss :
{
. = ALIGN(4);
__sbss = .;
*(.bss .bss.*);
. = ALIGN(4);
__ebss = .;
} > RAM
/* Discard exception unwinding info */
/DISCARD/ :
{
*(.ARM.exidx .ARM.exidx.*);
}
}
|