• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* Automatically generated file; DO NOT EDIT */
2/* Espressif IoT Development Framework Linker Script */
3/* Generated from: /home/syn/code/esp32/sdk/components/esp32/ld/esp32.project.ld.in */
4
5/*  Default entry point:  */
6ENTRY(call_start_cpu0);
7
8SECTIONS
9{
10  /* RTC fast memory holds RTC wake stub code,
11     including from any source file named rtc_wake_stub*.c
12  */
13  .rtc.text :
14  {
15    . = ALIGN(4);
16
17    *(.rtc.literal .rtc.text .rtc.text.*)
18
19    *rtc_wake_stub*.*(.literal .text .literal.* .text.*)
20    _rtc_text_end = ABSOLUTE(.);
21  } > rtc_iram_seg
22
23  /*
24    This section is required to skip rtc.text area because rtc_iram_seg and
25    rtc_data_seg are reflect the same address space on different buses.
26  */
27  .rtc.dummy :
28  {
29    _rtc_dummy_start = ABSOLUTE(.);
30    _rtc_fast_start = ABSOLUTE(.);
31    . = SIZEOF(.rtc.text);
32    _rtc_dummy_end = ABSOLUTE(.);
33  } > rtc_data_seg
34
35  /* This section located in RTC FAST Memory area.
36     It holds data marked with RTC_FAST_ATTR attribute.
37     See the file "esp_attr.h" for more information.
38  */
39  .rtc.force_fast :
40  {
41    . = ALIGN(4);
42    _rtc_force_fast_start = ABSOLUTE(.);
43
44    _coredump_rtc_fast_start = ABSOLUTE(.);
45    *(.rtc.fast.coredump .rtc.fast.coredump.*)
46    _coredump_rtc_fast_end = ABSOLUTE(.);
47
48    *(.rtc.force_fast .rtc.force_fast.*)
49    . = ALIGN(4) ;
50
51    _rtc_force_fast_end = ABSOLUTE(.);
52  } > rtc_data_seg
53
54  /* RTC data section holds RTC wake stub
55     data/rodata, including from any source file
56     named rtc_wake_stub*.c and the data marked with
57     RTC_DATA_ATTR, RTC_RODATA_ATTR attributes.
58     The memory location of the data is dependent on
59     CONFIG_ESP32_RTCDATA_IN_FAST_MEM option.
60  */
61  .rtc.data :
62  {
63    _rtc_data_start = ABSOLUTE(.);
64
65    /* coredump mapping */
66    _coredump_rtc_start = ABSOLUTE(.);
67    *(.rtc.coredump .rtc.coredump.*)
68    _coredump_rtc_end = ABSOLUTE(.);
69
70    /* should be placed after coredump mapping */
71    *(.rtc.data .rtc.data.*)
72    *(.rtc.rodata .rtc.rodata.*)
73
74    *rtc_wake_stub*.*(.data .rodata .data.* .rodata.* .bss .bss.*)
75    _rtc_data_end = ABSOLUTE(.);
76
77  } > rtc_data_location
78
79  /* RTC bss, from any source file named rtc_wake_stub*.c */
80  .rtc.bss (NOLOAD) :
81  {
82    _rtc_bss_start = ABSOLUTE(.);
83    *rtc_wake_stub*.*(.bss .bss.*)
84    *rtc_wake_stub*.*(COMMON)
85
86    *(.rtc.bss)
87
88    _rtc_bss_end = ABSOLUTE(.);
89  } > rtc_data_location
90
91  /* This section holds data that should not be initialized at power up
92     and will be retained during deep sleep.
93     User data marked with RTC_NOINIT_ATTR will be placed
94     into this section. See the file "esp_attr.h" for more information.
95	 The memory location of the data is dependent on
96     CONFIG_ESP32_RTCDATA_IN_FAST_MEM option.
97  */
98  .rtc_noinit (NOLOAD):
99  {
100    . = ALIGN(4);
101    _rtc_noinit_start = ABSOLUTE(.);
102    *(.rtc_noinit .rtc_noinit.*)
103    . = ALIGN(4) ;
104    _rtc_noinit_end = ABSOLUTE(.);
105  } > rtc_data_location
106
107  /* This section located in RTC SLOW Memory area.
108     It holds data marked with RTC_SLOW_ATTR attribute.
109     See the file "esp_attr.h" for more information.
110  */
111  .rtc.force_slow :
112  {
113    . = ALIGN(4);
114    _rtc_force_slow_start = ABSOLUTE(.);
115    *(.rtc.force_slow .rtc.force_slow.*)
116    . = ALIGN(4) ;
117    _rtc_force_slow_end = ABSOLUTE(.);
118  } > rtc_slow_seg
119
120  /* Get size of rtc slow data based on rtc_data_location alias */
121  _rtc_slow_length = (ORIGIN(rtc_slow_seg) == ORIGIN(rtc_data_location))
122                        ? (_rtc_force_slow_end - _rtc_data_start)
123                        : (_rtc_force_slow_end - _rtc_force_slow_start);
124
125  _rtc_fast_length = (ORIGIN(rtc_slow_seg) == ORIGIN(rtc_data_location))
126                        ? (_rtc_force_fast_end - _rtc_fast_start)
127                        : (_rtc_noinit_end - _rtc_fast_start);
128
129  ASSERT((_rtc_slow_length <= LENGTH(rtc_slow_seg)),
130          "RTC_SLOW segment data does not fit.")
131
132  ASSERT((_rtc_fast_length <= LENGTH(rtc_data_seg)),
133          "RTC_FAST segment data does not fit.")
134
135  /* Send .iram0 code to iram */
136  .iram0.vectors :
137  {
138    _iram_start = ABSOLUTE(.);
139    /* Vectors go to IRAM */
140    _vector_table = ABSOLUTE(.);
141    /* Vectors according to builds/RF-2015.2-win32/esp108_v1_2_s5_512int_2/config.html */
142    . = 0x0;
143    KEEP(*(.WindowVectors.text));
144    . = 0x180;
145    KEEP(*(.Level2InterruptVector.text));
146    . = 0x1c0;
147    KEEP(*(.Level3InterruptVector.text));
148    . = 0x200;
149    KEEP(*(.Level4InterruptVector.text));
150    . = 0x240;
151    KEEP(*(.Level5InterruptVector.text));
152    . = 0x280;
153    KEEP(*(.DebugExceptionVector.text));
154    . = 0x2c0;
155    KEEP(*(.NMIExceptionVector.text));
156    . = 0x300;
157    KEEP(*(.KernelExceptionVector.text));
158    . = 0x340;
159    KEEP(*(.UserExceptionVector.text));
160    . = 0x3C0;
161    KEEP(*(.DoubleExceptionVector.text));
162    . = 0x400;
163    _invalid_pc_placeholder = ABSOLUTE(.);
164    *(.*Vector.literal)
165
166    *(.UserEnter.literal);
167    *(.UserEnter.text);
168    . = ALIGN (16);
169    *(.entry.text)
170    *(.init.literal)
171    *(.init)
172
173    _init_end = ABSOLUTE(.);
174  } > iram0_0_seg
175
176  .iram0.text :
177  {
178    /* Code marked as runnning out of IRAM */
179    _iram_text_start = ABSOLUTE(.);
180
181    *(.iram1 .iram1.*)
182    *app_trace.a:*app_trace.*(.literal .literal.* .text .text.*)
183    *app_trace.a:*app_trace_util.*(.literal .literal.* .text .text.*)
184    *esp_event.a:*default_event_loop.*(.literal.esp_event_isr_post .text.esp_event_isr_post)
185    *esp_event.a:*esp_event.*(.literal.esp_event_isr_post_to .text.esp_event_isr_post_to)
186    *esp_hw_support.a:*cpu_util.*(.literal .literal.* .text .text.*)
187    *esp_hw_support.a:*rtc_clk.*(.literal .literal.* .text .text.*)
188    *esp_hw_support.a:*rtc_init.*(.literal.rtc_vddsdio_set_config .text.rtc_vddsdio_set_config)
189    *esp_hw_support.a:*rtc_pm.*(.literal .literal.* .text .text.*)
190    *esp_hw_support.a:*rtc_sleep.*(.literal .literal.* .text .text.*)
191    *esp_hw_support.a:*rtc_time.*(.literal .literal.* .text .text.*)
192    *esp_hw_support.a:*rtc_wdt.*(.literal .literal.* .text .text.*)
193    *esp_ringbuf.a:(.literal .literal.* .text .text.*)
194    *esp_system.a:*panic.*(.literal .literal.* .text .text.*)
195    *esp_system.a:*panic_arch.*(.literal .literal.* .text .text.*)
196    *esp_system.a:*panic_handler.*(.literal .literal.* .text .text.*)
197    *esp_system.a:*reset_reason.*(.literal .literal.* .text .text.*)
198    *esp_system.a:*system_api.*(.literal.esp_system_abort .text.esp_system_abort)
199    *esp_osal.a:(.literal .literal.* .text .text.*)
200    *libgcc.a:_divsf3.*(.literal .literal.* .text .text.*)
201    *libgcc.a:lib2funcs.*(.literal .literal.* .text .text.*)
202    *libgcov.a:(.literal .literal.* .text .text.*)
203    *hal.a:*cpu_hal.*(.literal .literal.* .text .text.*)
204    *hal.a:*i2c_hal_iram.*(.literal .literal.* .text .text.*)
205    *hal.a:*ledc_hal_iram.*(.literal .literal.* .text .text.*)
206    *hal.a:*soc_hal.*(.literal .literal.* .text .text.*)
207    *hal.a:*spi_flash_hal_iram.*(.literal .literal.* .text .text.*)
208    *hal.a:*spi_hal_iram.*(.literal .literal.* .text .text.*)
209    *hal.a:*spi_slave_hal_iram.*(.literal .literal.* .text .text.*)
210    *hal.a:*wdt_hal_iram.*(.literal .literal.* .text .text.*)
211    *heap.a:*heap_tlsf.*(.literal .literal.* .text .text.*)
212    *heap.a:*multi_heap.*(.literal .literal.* .text .text.*)
213    *log.a:(.literal .literal.* .text .text.*)
214    *net80211.a:(.wifi0iram .wifi0iram.*)
215    *net80211.a:(.wifirxiram .wifirxiram.*)
216    *net80211.a:(.wifislprxiram .wifislprxiram.*)
217    *newlib.a:*abort.*(.literal .literal.* .text .text.*)
218    *newlib.a:*heap.*(.literal .literal.* .text .text.*)
219    *pp.a:(.wifi0iram .wifi0iram.*)
220    *pp.a:(.wifiorslpiram .wifiorslpiram.*)
221    *pp.a:(.wifirxiram .wifirxiram.*)
222    *pp.a:(.wifislprxiram .wifislprxiram.*)
223    *rtc.a:(.literal .literal.* .text .text.*)
224    *soc.a:*lldesc.*(.literal .literal.* .text .text.*)
225    *spi_flash.a:*memspi_host_driver.*(.literal .literal.* .text .text.*)
226    *spi_flash.a:*spi_flash_chip_gd.*(.literal .literal.* .text .text.*)
227    *spi_flash.a:*spi_flash_chip_generic.*(.literal .literal.* .text .text.*)
228    *spi_flash.a:*spi_flash_chip_issi.*(.literal .literal.* .text .text.*)
229    *spi_flash.a:*spi_flash_chip_mxic.*(.literal .literal.* .text .text.*)
230    *spi_flash.a:*spi_flash_chip_winbond.*(.literal .literal.* .text .text.*)
231    *spi_flash.a:*spi_flash_rom_patch.*(.literal .literal.* .text .text.*)
232    *xt_hal.a:(.literal .literal.* .text .text.*)
233    *xtensa.a:*eri.*(.literal .literal.* .text .text.*)
234    *xtensa.a:*xtensa_intr_asm.*(.literal .literal.* .text .text.*)
235
236  } > iram0_0_seg
237
238  .dram0.data :
239  {
240    _data_start = ABSOLUTE(.);
241    _bt_data_start = ABSOLUTE(.);
242    *bt.a:(.data .data.*)
243    . = ALIGN (4);
244    _bt_data_end = ABSOLUTE(.);
245    _btdm_data_start = ABSOLUTE(.);
246    *btdm_app.a:(.data .data.*)
247    . = ALIGN (4);
248    _btdm_data_end = ABSOLUTE(.);
249    _nimble_data_start = ABSOLUTE(.);
250    *nimble.a:(.data .data.*)
251    . = ALIGN (4);
252    _nimble_data_end = ABSOLUTE(.);
253    *(.gnu.linkonce.d.*)
254    *(.data1)
255    *(.sdata)
256    *(.sdata.*)
257    *(.gnu.linkonce.s.*)
258    *(.sdata2)
259    *(.sdata2.*)
260    *(.gnu.linkonce.s2.*)
261    *(.jcr)
262
263    /* coredump mapping */
264    _coredump_dram_start = ABSOLUTE(.);
265    *(.dram1.coredump .dram1.coredump.*)
266    _coredump_dram_end = ABSOLUTE(.);
267
268    /* should be placed after coredump mapping */
269    _esp_system_init_fn_array_start = ABSOLUTE(.);
270    KEEP (*(SORT(.esp_system_init_fn) SORT(.esp_system_init_fn.*)))
271    _esp_system_init_fn_array_end = ABSOLUTE(.);
272
273    *(.data .data.*)
274    *(.dram1 .dram1.*)
275    *app_trace.a:*app_trace.*(.rodata .rodata.*)
276    *app_trace.a:*app_trace_util.*(.rodata .rodata.*)
277    *esp_hw_support.a:*rtc_clk.*(.rodata .rodata.*)
278    *esp_system.a:*panic.*(.rodata .rodata.*)
279    *esp_system.a:*panic_arch.*(.rodata .rodata.*)
280    *esp_system.a:*panic_handler.*(.rodata .rodata.*)
281    *esp_system.a:*reset_reason.*(.rodata .rodata.*)
282    *libgcc.a:_divsf3.*(.rodata .rodata.*)
283    *libgcov.a:(.rodata .rodata.*)
284    *hal.a:*cpu_hal.*(.rodata .rodata.*)
285    *hal.a:*i2c_hal_iram.*(.rodata .rodata.*)
286    *hal.a:*ledc_hal_iram.*(.rodata .rodata.*)
287    *hal.a:*soc_hal.*(.rodata .rodata.*)
288    *hal.a:*spi_flash_hal_iram.*(.rodata .rodata.*)
289    *hal.a:*spi_hal_iram.*(.rodata .rodata.*)
290    *hal.a:*spi_slave_hal_iram.*(.rodata .rodata.*)
291    *hal.a:*wdt_hal_iram.*(.rodata .rodata.*)
292    *heap.a:*heap_tlsf.*(.rodata .rodata.*)
293    *heap.a:*multi_heap.*(.rodata .rodata.*)
294    *newlib.a:*abort.*(.rodata .rodata.*)
295    *newlib.a:*heap.*(.rodata .rodata.*)
296    *phy.a:(.rodata .rodata.*)
297    *soc.a:*lldesc.*(.rodata .rodata.*)
298    *spi_flash.a:*memspi_host_driver.*(.rodata .rodata.*)
299    *spi_flash.a:*spi_flash_chip_gd.*(.rodata .rodata.*)
300    *spi_flash.a:*spi_flash_chip_generic.*(.rodata .rodata.*)
301    *spi_flash.a:*spi_flash_chip_issi.*(.rodata .rodata.*)
302    *spi_flash.a:*spi_flash_chip_mxic.*(.rodata .rodata.*)
303    *spi_flash.a:*spi_flash_chip_winbond.*(.rodata .rodata.*)
304    *spi_flash.a:*spi_flash_rom_patch.*(.rodata .rodata.*)
305    *kernel.a:(.rodata .rodata.*)
306    *arch.a:(.rodata .rodata.*)
307    . = ALIGN(4);
308    _edata = ABSOLUTE(.);
309    _data_end = ABSOLUTE(.);
310    . = ALIGN(4);
311  } > dram0_0_seg
312
313  /*This section holds data that should not be initialized at power up.
314    The section located in Internal SRAM memory region. The macro _NOINIT
315    can be used as attribute to place data into this section.
316    See the esp_attr.h file for more information.
317  */
318  .noinit (NOLOAD):
319  {
320    . = ALIGN(4);
321    _noinit_start = ABSOLUTE(.);
322    *(.noinit .noinit.*)
323    . = ALIGN(4) ;
324    _noinit_end = ABSOLUTE(.);
325  } > dram0_0_seg
326
327   /* external memory bss, from any global variable with EXT_RAM_ATTR attribute*/
328  .ext_ram.bss (NOLOAD) :
329  {
330    _ext_ram_bss_start = ABSOLUTE(.);
331
332
333    . = ALIGN(4);
334    _ext_ram_bss_end = ABSOLUTE(.);
335  } > extern_ram_seg
336
337  /* Shared RAM */
338  .dram0.bss (NOLOAD) :
339  {
340    . = ALIGN (8);
341    _bss_start = ABSOLUTE(.);
342    _bt_bss_start = ABSOLUTE(.);
343    *bt.a:(.bss .bss.* COMMON)
344    . = ALIGN (4);
345    _bt_bss_end = ABSOLUTE(.);
346    _btdm_bss_start = ABSOLUTE(.);
347    *btdm_app.a:(.bss .bss.* COMMON)
348    . = ALIGN (4);
349    _btdm_bss_end = ABSOLUTE(.);
350    _nimble_bss_start = ABSOLUTE(.);
351    *nimble.a:(.bss .bss.* COMMON)
352    . = ALIGN (4);
353    _nimble_bss_end = ABSOLUTE(.);
354
355    *(.bss .bss.*)
356    *(.ext_ram.bss .ext_ram.bss.*)
357    *(.dynbss .dynsbss .gnu.linkonce.b .gnu.linkonce.b.* .gnu.linkonce.sb .gnu.linkonce.sb.* .gnu.linkonce.sb2 .gnu.linkonce.sb2.* .sbss .sbss.* .sbss2 .sbss2.* .scommon .share.mem)
358    *(COMMON)
359    . = ALIGN (8);
360    __heap_start = ABSOLUTE(.);
361	. += 0x8;/* 0x20000; */
362    __heap_end = ABSOLUTE(.);
363    . = ALIGN (8);
364    _bss_end = ABSOLUTE(.);
365  } > dram0_0_seg
366
367  ASSERT(((_bss_end - ORIGIN(dram0_0_seg)) <= LENGTH(dram0_0_seg)),
368          "DRAM segment data does not fit.")
369
370  .flash.appdesc : ALIGN(0x10)
371  {
372    _rodata_start = ABSOLUTE(.);
373
374    *(.rodata_desc .rodata_desc.*)               /* Should be the first.  App version info.        DO NOT PUT ANYTHING BEFORE IT! */
375    *(.rodata_custom_desc .rodata_custom_desc.*) /* Should be the second. Custom app version info. DO NOT PUT ANYTHING BEFORE IT! */
376
377    /* Create an empty gap within this section. Thanks to this, the end of this
378     * section will match .flah.rodata's begin address. Thus, both sections
379     * will be merged when creating the final bin image. */
380    . = ALIGN(ALIGNOF(.flash.rodata));
381  } >default_rodata_seg
382
383  .flash.rodata : ALIGN(0x10)
384  {
385    _flash_rodata_start = ABSOLUTE(.);
386
387    *(EXCLUDE_FILE(*libgcov.a *phy.a *app_trace.a:*app_trace.* *app_trace.a:*app_trace_util.* *esp_hw_support.a:*rtc_clk.* *esp_system.a:*panic.* *esp_system.a:*panic_arch.* *esp_system.a:*panic_handler.* *esp_system.a:*reset_reason.* *libgcc.a:*_divsf3.* *hal.a:*cpu_hal.* *hal.a:*i2c_hal_iram.* *hal.a:*ledc_hal_iram.* *hal.a:*soc_hal.* *hal.a:*spi_flash_hal_iram.* *hal.a:*spi_hal_iram.* *hal.a:*spi_slave_hal_iram.* *hal.a:*wdt_hal_iram.* *heap.a:*heap_tlsf.* *heap.a:*multi_heap.* *newlib.a:*abort.* *newlib.a:*heap.* *soc.a:*lldesc.* *spi_flash.a:*memspi_host_driver.* *spi_flash.a:*spi_flash_chip_gd.* *spi_flash.a:*spi_flash_chip_generic.* *spi_flash.a:*spi_flash_chip_issi.* *spi_flash.a:*spi_flash_chip_mxic.* *spi_flash.a:*spi_flash_chip_winbond.* *spi_flash.a:*spi_flash_rom_patch.*) .rodata EXCLUDE_FILE(*libgcov.a *phy.a *app_trace.a:*app_trace.* *app_trace.a:*app_trace_util.* *esp_hw_support.a:*rtc_clk.* *esp_system.a:*panic.* *esp_system.a:*panic_arch.* *esp_system.a:*panic_handler.* *esp_system.a:*reset_reason.* *libgcc.a:*_divsf3.* *hal.a:*cpu_hal.* *hal.a:*i2c_hal_iram.* *hal.a:*ledc_hal_iram.* *hal.a:*soc_hal.* *hal.a:*spi_flash_hal_iram.* *hal.a:*spi_hal_iram.* *hal.a:*spi_slave_hal_iram.* *hal.a:*wdt_hal_iram.* *heap.a:*heap_tlsf.* *heap.a:*multi_heap.* *newlib.a:*abort.* *newlib.a:*heap.* *soc.a:*lldesc.* *spi_flash.a:*memspi_host_driver.* *spi_flash.a:*spi_flash_chip_gd.* *spi_flash.a:*spi_flash_chip_generic.* *spi_flash.a:*spi_flash_chip_issi.* *spi_flash.a:*spi_flash_chip_mxic.* *spi_flash.a:*spi_flash_chip_winbond.* *spi_flash.a:*spi_flash_rom_patch.*) .rodata.*)
388    *(.rodata_wlog_error .rodata_wlog_error.*)
389    *(.rodata_wlog_info .rodata_wlog_info.*)
390    *(.rodata_wlog_warning .rodata_wlog_warning.*)
391
392
393    *(.irom1.text) /* catch stray ICACHE_RODATA_ATTR */
394    *(.gnu.linkonce.r.*)
395    *(.rodata1)
396    __XT_EXCEPTION_TABLE_ = ABSOLUTE(.);
397    *(.xt_except_table)
398    *(.gcc_except_table .gcc_except_table.*)
399    *(.gnu.linkonce.e.*)
400    *(.gnu.version_r)
401    . = (. + 3) & ~ 3;
402    __eh_frame = ABSOLUTE(.);
403    KEEP(*(.eh_frame))
404    . = (. + 7) & ~ 3;
405    /*  C++ constructor and destructor tables
406
407        Make a point of not including anything from crtbegin.o or crtend.o, as IDF doesn't use toolchain crt
408      */
409    __init_array_start = ABSOLUTE(.);
410    KEEP (*(EXCLUDE_FILE (*crtend.* *crtbegin.*) .ctors SORT(.ctors.*)))
411    __init_array_end = ABSOLUTE(.);
412
413    KEEP (*crtbegin.*(.dtors))
414    KEEP (*(EXCLUDE_FILE (*crtend.*) .dtors))
415    KEEP (*(SORT(.dtors.*)))
416    KEEP (*(.dtors))
417    /*  C++ exception handlers table:  */
418    __XT_EXCEPTION_DESCS_ = ABSOLUTE(.);
419    *(.xt_except_desc)
420    *(.gnu.linkonce.h.*)
421    __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
422    *(.xt_except_desc_end)
423    *(.dynamic)
424    *(.gnu.version_d)
425    /* Addresses of memory regions reserved via
426       SOC_RESERVE_MEMORY_REGION() */
427    soc_reserved_memory_region_start = ABSOLUTE(.);
428    KEEP (*(.reserved_memory_address))
429    soc_reserved_memory_region_end = ABSOLUTE(.);
430    _rodata_end = ABSOLUTE(.);
431    /* Literals are also RO data. */
432    _lit4_start = ABSOLUTE(.);
433    *(*.lit4)
434    *(.lit4.*)
435    *(.gnu.linkonce.lit4.*)
436    _lit4_end = ABSOLUTE(.);
437    . = ALIGN(4);
438    _thread_local_start = ABSOLUTE(.);
439    *(.tdata)
440    *(.tdata.*)
441    *(.tbss)
442    *(.tbss.*)
443    _thread_local_end = ABSOLUTE(.);
444    . = ALIGN(4);
445  } >default_rodata_seg
446
447  _flash_rodata_align = ALIGNOF(.flash.rodata);
448
449  .flash.rodata_noload (NOLOAD) :
450  {
451    . = ALIGN (4);
452    *(.rodata_wlog_debug .rodata_wlog_debug.*)
453    *(.rodata_wlog_verbose .rodata_wlog_verbose.*)
454    _flash_rodata_end = ABSOLUTE(.);
455  } > default_rodata_seg
456
457  .flash.text :
458  {
459    _stext = .;
460    _text_start = ABSOLUTE(.);
461
462    *(.phyiram .phyiram.*)
463    *(EXCLUDE_FILE(*esp_ringbuf.a *esp_osal.a *libgcov.a *rtc.a *xt_hal.a *app_trace.a:*app_trace.* *app_trace.a:*app_trace_util.* *esp_event.a:*default_event_loop.* *esp_event.a:*esp_event.* *esp_hw_support.a:*cpu_util.* *esp_hw_support.a:*rtc_clk.* *esp_hw_support.a:*rtc_init.* *esp_hw_support.a:*rtc_pm.* *esp_hw_support.a:*rtc_sleep.* *esp_hw_support.a:*rtc_time.* *esp_hw_support.a:*rtc_wdt.* *esp_system.a:*panic.* *esp_system.a:*panic_arch.* *esp_system.a:*panic_handler.* *esp_system.a:*reset_reason.* *esp_system.a:*system_api.* *libgcc.a:*_divsf3.* *libgcc.a:*lib2funcs.* *hal.a:*cpu_hal.* *hal.a:*i2c_hal_iram.* *hal.a:*ledc_hal_iram.* *hal.a:*soc_hal.* *hal.a:*spi_flash_hal_iram.* *hal.a:*spi_hal_iram.* *hal.a:*spi_slave_hal_iram.* *hal.a:*wdt_hal_iram.* *heap.a:*heap_tlsf.* *heap.a:*multi_heap.* *log.a:*log.* *log.a:*log_freertos.* *newlib.a:*abort.* *newlib.a:*heap.* *soc.a:*lldesc.* *spi_flash.a:*memspi_host_driver.* *spi_flash.a:*spi_flash_chip_gd.* *spi_flash.a:*spi_flash_chip_generic.* *spi_flash.a:*spi_flash_chip_issi.* *spi_flash.a:*spi_flash_chip_mxic.* *spi_flash.a:*spi_flash_chip_winbond.* *spi_flash.a:*spi_flash_rom_patch.* *xtensa.a:*eri.* *xtensa.a:*xtensa_intr_asm.*) .literal EXCLUDE_FILE(*esp_ringbuf.a *esp_osal.a *libgcov.a *rtc.a *xt_hal.a *app_trace.a:*app_trace.* *app_trace.a:*app_trace_util.* *esp_event.a:*default_event_loop.* *esp_event.a:*esp_event.* *esp_hw_support.a:*cpu_util.* *esp_hw_support.a:*rtc_clk.* *esp_hw_support.a:*rtc_init.* *esp_hw_support.a:*rtc_pm.* *esp_hw_support.a:*rtc_sleep.* *esp_hw_support.a:*rtc_time.* *esp_hw_support.a:*rtc_wdt.* *esp_system.a:*panic.* *esp_system.a:*panic_arch.* *esp_system.a:*panic_handler.* *esp_system.a:*reset_reason.* *esp_system.a:*system_api.* *libgcc.a:*_divsf3.* *libgcc.a:*lib2funcs.* *hal.a:*cpu_hal.* *hal.a:*i2c_hal_iram.* *hal.a:*ledc_hal_iram.* *hal.a:*soc_hal.* *hal.a:*spi_flash_hal_iram.* *hal.a:*spi_hal_iram.* *hal.a:*spi_slave_hal_iram.* *hal.a:*wdt_hal_iram.* *heap.a:*heap_tlsf.* *heap.a:*multi_heap.* *log.a:*log.* *log.a:*log_freertos.* *newlib.a:*abort.* *newlib.a:*heap.* *soc.a:*lldesc.* *spi_flash.a:*memspi_host_driver.* *spi_flash.a:*spi_flash_chip_gd.* *spi_flash.a:*spi_flash_chip_generic.* *spi_flash.a:*spi_flash_chip_issi.* *spi_flash.a:*spi_flash_chip_mxic.* *spi_flash.a:*spi_flash_chip_winbond.* *spi_flash.a:*spi_flash_rom_patch.* *xtensa.a:*eri.* *xtensa.a:*xtensa_intr_asm.*) .literal.* EXCLUDE_FILE(*esp_ringbuf.a *esp_osal.a *libgcov.a *rtc.a *xt_hal.a *app_trace.a:*app_trace.* *app_trace.a:*app_trace_util.* *esp_event.a:*default_event_loop.* *esp_event.a:*esp_event.* *esp_hw_support.a:*cpu_util.* *esp_hw_support.a:*rtc_clk.* *esp_hw_support.a:*rtc_init.* *esp_hw_support.a:*rtc_pm.* *esp_hw_support.a:*rtc_sleep.* *esp_hw_support.a:*rtc_time.* *esp_hw_support.a:*rtc_wdt.* *esp_system.a:*panic.* *esp_system.a:*panic_arch.* *esp_system.a:*panic_handler.* *esp_system.a:*reset_reason.* *esp_system.a:*system_api.* *libgcc.a:*_divsf3.* *libgcc.a:*lib2funcs.* *hal.a:*cpu_hal.* *hal.a:*i2c_hal_iram.* *hal.a:*ledc_hal_iram.* *hal.a:*soc_hal.* *hal.a:*spi_flash_hal_iram.* *hal.a:*spi_hal_iram.* *hal.a:*spi_slave_hal_iram.* *hal.a:*wdt_hal_iram.* *heap.a:*heap_tlsf.* *heap.a:*multi_heap.* *log.a:*log.* *log.a:*log_freertos.* *newlib.a:*abort.* *newlib.a:*heap.* *soc.a:*lldesc.* *spi_flash.a:*memspi_host_driver.* *spi_flash.a:*spi_flash_chip_gd.* *spi_flash.a:*spi_flash_chip_generic.* *spi_flash.a:*spi_flash_chip_issi.* *spi_flash.a:*spi_flash_chip_mxic.* *spi_flash.a:*spi_flash_chip_winbond.* *spi_flash.a:*spi_flash_rom_patch.* *xtensa.a:*eri.* *xtensa.a:*xtensa_intr_asm.*) .text EXCLUDE_FILE(*esp_ringbuf.a *esp_osal.a *libgcov.a *rtc.a *xt_hal.a *app_trace.a:*app_trace.* *app_trace.a:*app_trace_util.* *esp_event.a:*default_event_loop.* *esp_event.a:*esp_event.* *esp_hw_support.a:*cpu_util.* *esp_hw_support.a:*rtc_clk.* *esp_hw_support.a:*rtc_init.* *esp_hw_support.a:*rtc_pm.* *esp_hw_support.a:*rtc_sleep.* *esp_hw_support.a:*rtc_time.* *esp_hw_support.a:*rtc_wdt.* *esp_system.a:*panic.* *esp_system.a:*panic_arch.* *esp_system.a:*panic_handler.* *esp_system.a:*reset_reason.* *esp_system.a:*system_api.* *libgcc.a:*_divsf3.* *libgcc.a:*lib2funcs.* *hal.a:*cpu_hal.* *hal.a:*i2c_hal_iram.* *hal.a:*ledc_hal_iram.* *hal.a:*soc_hal.* *hal.a:*spi_flash_hal_iram.* *hal.a:*spi_hal_iram.* *hal.a:*spi_slave_hal_iram.* *hal.a:*wdt_hal_iram.* *heap.a:*heap_tlsf.* *heap.a:*multi_heap.* *log.a:*log.* *log.a:*log_freertos.* *newlib.a:*abort.* *newlib.a:*heap.* *soc.a:*lldesc.* *spi_flash.a:*memspi_host_driver.* *spi_flash.a:*spi_flash_chip_gd.* *spi_flash.a:*spi_flash_chip_generic.* *spi_flash.a:*spi_flash_chip_issi.* *spi_flash.a:*spi_flash_chip_mxic.* *spi_flash.a:*spi_flash_chip_winbond.* *spi_flash.a:*spi_flash_rom_patch.* *xtensa.a:*eri.* *xtensa.a:*xtensa_intr_asm.*) .text.*)
464     *(EXCLUDE_FILE(*net80211.a *pp.a) .wifi0iram EXCLUDE_FILE(*net80211.a *pp.a) .wifi0iram.*)
465    *(EXCLUDE_FILE(*pp.a) .wifiorslpiram EXCLUDE_FILE(*pp.a) .wifiorslpiram.*)
466    *(EXCLUDE_FILE(*net80211.a *pp.a) .wifirxiram EXCLUDE_FILE(*net80211.a *pp.a) .wifirxiram.*)
467    *(.wifislpiram .wifislpiram.*)
468    *(EXCLUDE_FILE(*net80211.a *pp.a) .wifislprxiram EXCLUDE_FILE(*net80211.a *pp.a) .wifislprxiram.*)
469    *esp_event.a:*default_event_loop.*(.literal.esp_event_handler_instance_register .literal.esp_event_handler_instance_unregister .literal.esp_event_handler_register .literal.esp_event_handler_unregister .literal.esp_event_loop_create_default .literal.esp_event_loop_delete_default .literal.esp_event_post .literal.esp_event_send_to_default_loop .text .text.esp_event_handler_instance_register .text.esp_event_handler_instance_unregister .text.esp_event_handler_register .text.esp_event_handler_unregister .text.esp_event_loop_create_default .text.esp_event_loop_delete_default .text.esp_event_post .text.esp_event_send_to_default_loop)
470    *esp_event.a:*esp_event.*(.literal.base_node_add_handler .literal.esp_event_handler_instance_register_with .literal.esp_event_handler_instance_unregister_with .literal.esp_event_handler_register_with .literal.esp_event_handler_register_with_internal .literal.esp_event_handler_unregister_with .literal.esp_event_handler_unregister_with_internal .literal.esp_event_loop_create .literal.esp_event_loop_delete .literal.esp_event_loop_run .literal.esp_event_loop_run_task .literal.esp_event_post_to .literal.handler_instances_add .literal.handler_instances_remove .literal.handler_instances_remove_all$isra$1 .literal.loop_node_add_handler .text .text.base_node_add_handler .text.esp_event_dump .text.esp_event_handler_instance_register_with .text.esp_event_handler_instance_unregister_with .text.esp_event_handler_register_with .text.esp_event_handler_register_with_internal .text.esp_event_handler_unregister_with .text.esp_event_handler_unregister_with_internal .text.esp_event_loop_create .text.esp_event_loop_delete .text.esp_event_loop_run .text.esp_event_loop_run_task .text.esp_event_post_to .text.handler_instances_add .text.handler_instances_remove .text.handler_instances_remove_all$isra$1 .text.loop_node_add_handler)
471    *esp_hw_support.a:*rtc_init.*(.literal.rtc_init .literal.rtc_vddsdio_get_config .text .text.rtc_init .text.rtc_vddsdio_get_config)
472    *esp_system.a:*system_api.*(.literal.esp_get_free_heap_size .literal.esp_get_free_internal_heap_size .literal.esp_get_idf_version .literal.esp_get_minimum_free_heap_size .literal.esp_register_shutdown_handler .literal.esp_unregister_shutdown_handler .text .text.esp_get_free_heap_size .text.esp_get_free_internal_heap_size .text.esp_get_idf_version .text.esp_get_minimum_free_heap_size .text.esp_register_shutdown_handler .text.esp_unregister_shutdown_handler)
473    *esp_osal.a:*port.*(.literal.esp_startup_start_app .text.esp_startup_start_app)
474    *esp_osal.a:*port_common.*(.literal.main_task .text.main_task)
475    *log.a:*log.*(.literal.esp_log_level_set .literal.esp_log_set_vprintf .literal.esp_log_writev .literal.heap_bubble_down .text .text.esp_log_level_set .text.esp_log_set_vprintf .text.esp_log_writev .text.heap_bubble_down)
476    *log.a:*log_freertos.*(.literal.esp_log_system_timestamp .text .text.esp_log_system_timestamp)
477
478    *(.stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
479    *(.irom0.text) /* catch stray ICACHE_RODATA_ATTR */
480    *(.fini.literal)
481    *(.fini)
482    *(.gnu.version)
483
484/* -------------------------------------------------------- */
485    . = ALIGN(4);
486    __zinitcall_bsp_start = .;
487    KEEP (*(.zinitcall.bsp0.init))
488    KEEP (*(.zinitcall.bsp1.init))
489    KEEP (*(.zinitcall.bsp2.init))
490    KEEP (*(.zinitcall.bsp3.init))
491    KEEP (*(.zinitcall.bsp4.init))
492    __zinitcall_bsp_end = .;
493    __zinitcall_device_start = .;
494    KEEP (*(.zinitcall.device0.init))
495    KEEP (*(.zinitcall.device1.init))
496    KEEP (*(.zinitcall.device2.init))
497    KEEP (*(.zinitcall.device3.init))
498    KEEP (*(.zinitcall.device4.init))
499    __zinitcall_device_end = .;
500    __zinitcall_core_start = .;
501    KEEP (*(.zinitcall.core0.init))
502    KEEP (*(.zinitcall.core1.init))
503    KEEP (*(.zinitcall.core2.init))
504    KEEP (*(.zinitcall.core3.init))
505    KEEP (*(.zinitcall.core4.init))
506    __zinitcall_core_end = .;
507    __zinitcall_sys_service_start = .;
508    KEEP (*(.zinitcall.sys.service0.init))
509    KEEP (*(.zinitcall.sys.service1.init))
510    KEEP (*(.zinitcall.sys.service2.init))
511    KEEP (*(.zinitcall.sys.service3.init))
512    KEEP (*(.zinitcall.sys.service4.init))
513    __zinitcall_sys_service_end = .;
514    __zinitcall_sys_feature_start = .;
515    KEEP (*(.zinitcall.sys.feature0.init))
516    KEEP (*(.zinitcall.sys.feature1.init))
517    KEEP (*(.zinitcall.sys.feature2.init))
518    KEEP (*(.zinitcall.sys.feature3.init))
519    KEEP (*(.zinitcall.sys.feature4.init))
520    __zinitcall_sys_feature_end = .;
521    __zinitcall_run_start = .;
522    KEEP (*(.zinitcall.run0.init))
523    KEEP (*(.zinitcall.run1.init))
524    KEEP (*(.zinitcall.run2.init))
525    KEEP (*(.zinitcall.run3.init))
526    KEEP (*(.zinitcall.run4.init))
527    __zinitcall_run_end = .;
528    __zinitcall_app_service_start = .;
529    KEEP (*(.zinitcall.app.service0.init))
530    KEEP (*(.zinitcall.app.service1.init))
531    KEEP (*(.zinitcall.app.service2.init))
532    KEEP (*(.zinitcall.app.service3.init))
533    KEEP (*(.zinitcall.app.service4.init))
534    __zinitcall_app_service_end = .;
535    __zinitcall_app_feature_start = .;
536    KEEP (*(.zinitcall.app.feature0.init))
537    KEEP (*(.zinitcall.app.feature1.init))
538    KEEP (*(.zinitcall.app.feature2.init))
539    KEEP (*(.zinitcall.app.feature3.init))
540    KEEP (*(.zinitcall.app.feature4.init))
541    __zinitcall_app_feature_end = .;
542    __zinitcall_test_start = .;
543    KEEP (*(.zinitcall.test0.init))
544    KEEP (*(.zinitcall.test1.init))
545    KEEP (*(.zinitcall.test2.init))
546    KEEP (*(.zinitcall.test3.init))
547    KEEP (*(.zinitcall.test4.init))
548    __zinitcall_test_end = .;
549    __zinitcall_exit_start = .;
550    KEEP (*(.zinitcall.exit0.init))
551    KEEP (*(.zinitcall.exit1.init))
552    KEEP (*(.zinitcall.exit2.init))
553    KEEP (*(.zinitcall.exit3.init))
554    KEEP (*(.zinitcall.exit4.init))
555    __zinitcall_exit_end = .;
556    _hdf_drivers_start = .;
557    KEEP (*(.hdf.driver))
558    _hdf_drivers_end = .;
559
560/* -------------------------------------------------------- */
561
562
563    /** CPU will try to prefetch up to 16 bytes of
564      * of instructions. This means that any configuration (e.g. MMU, PMS) must allow
565      * safe access to up to 16 bytes after the last real instruction, add
566      * dummy bytes to ensure this
567      */
568    . += 16;
569
570    _text_end = ABSOLUTE(.);
571    _etext = .;
572
573    /* Similar to _iram_start, this symbol goes here so it is
574       resolved by addr2line in preference to the first symbol in
575       the flash.text segment.
576    */
577    _flash_cache_start = ABSOLUTE(0);
578  } >default_code_seg
579
580  /* Marks the end of IRAM code segment */
581  .iram0.text_end (NOLOAD) :
582  {
583    . = ALIGN (4);
584    _iram_text_end = ABSOLUTE(.);
585  } > iram0_0_seg
586
587  .iram0.data :
588  {
589    . = ALIGN(4);
590    _iram_data_start = ABSOLUTE(.);
591
592    /* coredump mapping */
593    _coredump_iram_start = ABSOLUTE(.);
594    *(.iram.data.coredump .iram.data.coredump.*)
595    _coredump_iram_end = ABSOLUTE(.);
596
597    /* should be placed after coredump mapping */
598    *(.iram.data .iram.data.*)
599
600    _iram_data_end = ABSOLUTE(.);
601  } > iram0_0_seg
602
603  .iram0.bss (NOLOAD) :
604  {
605    . = ALIGN(4);
606    _iram_bss_start = ABSOLUTE(.);
607
608    *(.iram.bss .iram.bss.*)
609
610    _iram_bss_end = ABSOLUTE(.);
611    . = ALIGN(4);
612    _iram_end = ABSOLUTE(.);
613   } > iram0_0_seg
614
615  /* Marks the end of data, bss and possibly rodata  */
616  .dram0.heap_start (NOLOAD) :
617  {
618    . = ALIGN (8);
619    _heap_start = ABSOLUTE(.);
620  } > dram0_0_seg
621}
622
623ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),
624          "IRAM0 segment data does not fit.")
625
626ASSERT(((_heap_start - ORIGIN(dram0_0_seg)) <= LENGTH(dram0_0_seg)),
627          "DRAM segment data does not fit.")
628