-
Notifications
You must be signed in to change notification settings - Fork 0
/
common.ld
83 lines (67 loc) · 2.21 KB
/
common.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
SECTIONS
{
__ram_start = ORIGIN(RAM);
.text :
{
*(.text.start) /* ensure that vector table appears first */
*(.text .text.*)
} >ROM =0 /* =0 zeros unused */
.rodata :
{
*(.rodata .rodata.*)
} >ROM =0
/* begin c++ stuff */
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ROM
PROVIDE_HIDDEN (__exidx_start = .);
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ROM
PROVIDE_HIDDEN (__exidx_end = .);
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >ROM
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array ))
PROVIDE_HIDDEN (__init_array_end = .);
} >ROM
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT(.fini_array.*)))
KEEP (*(.fini_array ))
PROVIDE_HIDDEN (__fini_array_end = .);
} >ROM
.jcr : { KEEP (*(.jcr)) } >ROM
/* end c++ stuff */
__end_rom = .;
.data : ALIGN(4)
{
__data_start = .;
__data_load = LOADADDR(.data);
*(.data .data.* .gnu.linkonce.d.*)
__data_end = .;
} >RAM AT>ROM
.bss : ALIGN(4)
{
__bss_start = .;
*(COMMON)
*(.bss .bss.* .gnu.linkonce.b.*)
__bss_end = .;
} >RAM AT>ROM
__after_all_load = ALIGN(0x1000); /* align to a page at start of dynamic memory area */
}
/* check some assumptions */
ASSERT(ADDR(.text)+SIZEOF(.text)<=ADDR(.rodata), "overlap between .text and .rodata")
ASSERT(ADDR(.rodata)+SIZEOF(.rodata)<=ADDR(.preinit_array), "overlap between .rodata and .preinit_array")
ASSERT(ADDR(.data)+SIZEOF(.data)<=ADDR(.bss), "overlap between .data and .bss")
ASSERT(ADDR(.bss)+SIZEOF(.bss)<=__after_all_load, "overlap between .bss and __after_all_load")
/* _bss_zero() and _move_data() assume word alignment */
ASSERT(__data_start%4==0, "__data_start alignment")
ASSERT(__data_load%4==0, "__data_load alignment")
ASSERT(__data_end%4==0, "__data_end alignment")
ASSERT(__bss_start%4==0, "__bss_start alignment")
ASSERT(__bss_end%4==0, "__bss_end alignment")