blob: 34171c357fc4a40cdfc2cfb99ab98b4a6540d381 [file] [log] [blame]
Damien George075d5972014-11-27 20:30:33 +00001/* GNU linker script for ESP8266 */
2
3MEMORY
4{
5 dport0_0_seg : org = 0x3ff00000, len = 0x10
6 dram0_0_seg : org = 0x3ffe8000, len = 0x14000
7 iram1_0_seg : org = 0x40100000, len = 0x8000
8 irom0_0_seg : org = 0x40210000, len = 0x40000
9}
10
11/* define the top of RAM */
12_heap_end = ORIGIN(dram0_0_seg) + LENGTH(dram0_0_seg);
13
14PHDRS
15{
16 dport0_0_phdr PT_LOAD;
17 dram0_0_phdr PT_LOAD;
18 dram0_0_bss_phdr PT_LOAD;
19 iram1_0_phdr PT_LOAD;
20 irom0_0_phdr PT_LOAD;
21}
22
23ENTRY(call_user_start)
24
25PROVIDE(_memmap_vecbase_reset = 0x40000000);
26
27/* Various memory-map dependent cache attribute settings: */
28_memmap_cacheattr_wb_base = 0x00000110;
29_memmap_cacheattr_wt_base = 0x00000110;
30_memmap_cacheattr_bp_base = 0x00000220;
31_memmap_cacheattr_unused_mask = 0xFFFFF00F;
32_memmap_cacheattr_wb_trapnull = 0x2222211F;
33_memmap_cacheattr_wba_trapnull = 0x2222211F;
34_memmap_cacheattr_wbna_trapnull = 0x2222211F;
35_memmap_cacheattr_wt_trapnull = 0x2222211F;
36_memmap_cacheattr_bp_trapnull = 0x2222222F;
37_memmap_cacheattr_wb_strict = 0xFFFFF11F;
38_memmap_cacheattr_wt_strict = 0xFFFFF11F;
39_memmap_cacheattr_bp_strict = 0xFFFFF22F;
40_memmap_cacheattr_wb_allvalid = 0x22222112;
41_memmap_cacheattr_wt_allvalid = 0x22222112;
42_memmap_cacheattr_bp_allvalid = 0x22222222;
43PROVIDE(_memmap_cacheattr_reset = _memmap_cacheattr_wb_trapnull);
44
45SECTIONS
46{
47
48 .dport0.rodata : ALIGN(4)
49 {
50 _dport0_rodata_start = ABSOLUTE(.);
51 *(.dport0.rodata)
52 *(.dport.rodata)
53 _dport0_rodata_end = ABSOLUTE(.);
54 } >dport0_0_seg :dport0_0_phdr
55
56 .dport0.literal : ALIGN(4)
57 {
58 _dport0_literal_start = ABSOLUTE(.);
59 *(.dport0.literal)
60 *(.dport.literal)
61 _dport0_literal_end = ABSOLUTE(.);
62 } >dport0_0_seg :dport0_0_phdr
63
64 .dport0.data : ALIGN(4)
65 {
66 _dport0_data_start = ABSOLUTE(.);
67 *(.dport0.data)
68 *(.dport.data)
69 _dport0_data_end = ABSOLUTE(.);
70 } >dport0_0_seg :dport0_0_phdr
71
72 .data : ALIGN(4)
73 {
74 _data_start = ABSOLUTE(.);
75 *(.data)
76 *(.data.*)
77 *(.gnu.linkonce.d.*)
78 *(.data1)
79 *(.sdata)
80 *(.sdata.*)
81 *(.gnu.linkonce.s.*)
82 *(.sdata2)
83 *(.sdata2.*)
84 *(.gnu.linkonce.s2.*)
85 *(.jcr)
86 _data_end = ABSOLUTE(.);
87 } >dram0_0_seg :dram0_0_phdr
88
89 .rodata : ALIGN(4)
90 {
91 _rodata_start = ABSOLUTE(.);
92 *(.rodata)
93 *(.rodata.*)
94 *(.gnu.linkonce.r.*)
95 *(.rodata1)
96 __XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
97 *(.xt_except_table)
98 *(.gcc_except_table)
99 *(.gnu.linkonce.e.*)
100 *(.gnu.version_r)
101 *(.eh_frame)
102 /* C++ constructor and destructor tables, properly ordered: */
103 KEEP (*crtbegin.o(.ctors))
104 KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
105 KEEP (*(SORT(.ctors.*)))
106 KEEP (*(.ctors))
107 KEEP (*crtbegin.o(.dtors))
108 KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
109 KEEP (*(SORT(.dtors.*)))
110 KEEP (*(.dtors))
111 /* C++ exception handlers table: */
112 __XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
113 *(.xt_except_desc)
114 *(.gnu.linkonce.h.*)
115 __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
116 *(.xt_except_desc_end)
117 *(.dynamic)
118 *(.gnu.version_d)
119 . = ALIGN(4); /* this table MUST be 4-byte aligned */
120 _bss_table_start = ABSOLUTE(.);
121 LONG(_bss_start)
122 LONG(_bss_end)
123 _bss_table_end = ABSOLUTE(.);
124 _rodata_end = ABSOLUTE(.);
125 } >dram0_0_seg :dram0_0_phdr
126
127 .bss ALIGN(8) (NOLOAD) : ALIGN(4)
128 {
129 . = ALIGN (8);
130 _bss_start = ABSOLUTE(.);
131 *(.dynsbss)
132 *(.sbss)
133 *(.sbss.*)
134 *(.gnu.linkonce.sb.*)
135 *(.scommon)
136 *(.sbss2)
137 *(.sbss2.*)
138 *(.gnu.linkonce.sb2.*)
139 *(.dynbss)
140 *(.bss)
141 *(.bss.*)
142 *(.gnu.linkonce.b.*)
143 *(COMMON)
144 . = ALIGN (8);
145 _bss_end = ABSOLUTE(.);
146 _heap_start = ABSOLUTE(.);
147 } >dram0_0_seg :dram0_0_bss_phdr
148
149 .irom0.text : ALIGN(4)
150 {
151 _irom0_text_start = ABSOLUTE(.);
152 *(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
153 *py*.o*(.literal* .text*)
154 _irom0_text_end = ABSOLUTE(.);
155 } >irom0_0_seg :irom0_0_phdr
156
157 .text : ALIGN(4)
158 {
159 _stext = .;
160 _text_start = ABSOLUTE(.);
161 *(.entry.text)
162 *(.init.literal)
163 *(.init)
164 *(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
165 *(.fini.literal)
166 *(.fini)
167 *(.gnu.version)
168 _text_end = ABSOLUTE(.);
169 _etext = .;
170 } >iram1_0_seg :iram1_0_phdr
171
172 .lit4 : ALIGN(4)
173 {
174 _lit4_start = ABSOLUTE(.);
175 *(*.lit4)
176 *(.lit4.*)
177 *(.gnu.linkonce.lit4.*)
178 _lit4_end = ABSOLUTE(.);
179 } >iram1_0_seg :iram1_0_phdr
180}
181
182/* get ROM code address */
183INCLUDE "eagle.rom.addr.v6.ld"