| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  | /*  Default entry point:  */ | 
					
						
							| 
									
										
										
										
											2016-09-26 12:29:00 +08:00
										 |  |  | ENTRY(call_start_cpu0); | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | SECTIONS | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-10-13 11:46:51 +11:00
										 |  |  |   /* RTC fast memory holds RTC wake stub code, | 
					
						
							|  |  |  |      including from any source file named rtc_wake_stub*.c | 
					
						
							|  |  |  |   */ | 
					
						
							|  |  |  |   .rtc.text : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     . = ALIGN(4); | 
					
						
							|  |  |  |     *(.rtc.literal .rtc.text) | 
					
						
							| 
									
										
										
										
											2018-03-01 17:02:32 +11:00
										 |  |  |     *rtc_wake_stub*.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2018-02-26 22:32:58 +05:00
										 |  |  |   } > rtc_iram_seg | 
					
						
							| 
									
										
										
										
											2016-10-13 11:46:51 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /* RTC slow memory holds RTC wake stub | 
					
						
							|  |  |  |      data/rodata, including from any source file | 
					
						
							|  |  |  |      named rtc_wake_stub*.c | 
					
						
							|  |  |  |   */ | 
					
						
							|  |  |  |   .rtc.data : | 
					
						
							|  |  |  |   { | 
					
						
							| 
									
										
										
										
											2017-01-11 17:23:23 +08:00
										 |  |  |     _rtc_data_start = ABSOLUTE(.); | 
					
						
							| 
									
										
										
										
											2016-10-13 11:46:51 +11:00
										 |  |  |     *(.rtc.data) | 
					
						
							|  |  |  |     *(.rtc.rodata) | 
					
						
							| 
									
										
										
										
											2018-03-01 17:02:32 +11:00
										 |  |  |     *rtc_wake_stub*.*(.data .rodata .data.* .rodata.* .bss .bss.*) | 
					
						
							| 
									
										
										
										
											2017-01-11 17:23:23 +08:00
										 |  |  |     _rtc_data_end = ABSOLUTE(.); | 
					
						
							| 
									
										
										
										
											2016-10-13 11:46:51 +11:00
										 |  |  |   } > rtc_slow_seg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* RTC bss, from any source file named rtc_wake_stub*.c */ | 
					
						
							|  |  |  |   .rtc.bss (NOLOAD) : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     _rtc_bss_start = ABSOLUTE(.); | 
					
						
							| 
									
										
										
										
											2018-03-01 17:02:32 +11:00
										 |  |  |     *rtc_wake_stub*.*(.bss .bss.*) | 
					
						
							|  |  |  |     *rtc_wake_stub*.*(COMMON) | 
					
						
							| 
									
										
										
										
											2016-10-13 11:46:51 +11:00
										 |  |  |     _rtc_bss_end = ABSOLUTE(.); | 
					
						
							|  |  |  |   } > rtc_slow_seg | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-26 22:32:58 +05:00
										 |  |  |   /* This section holds data that should not be initialized at power up  | 
					
						
							|  |  |  |      and will be retained during deep sleep. The section located in  | 
					
						
							|  |  |  |      RTC SLOW Memory area. User data marked with RTC_NOINIT_ATTR will be placed | 
					
						
							|  |  |  |      into this section. See the file "esp_attr.h" for more information. | 
					
						
							|  |  |  |   */ | 
					
						
							|  |  |  |   .rtc_noinit (NOLOAD): | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     . = ALIGN(4); | 
					
						
							|  |  |  |     _rtc_noinit_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.rtc_noinit .rtc_noinit.*) | 
					
						
							|  |  |  |     . = ALIGN(4) ; | 
					
						
							|  |  |  |     _rtc_noinit_end = ABSOLUTE(.); | 
					
						
							|  |  |  |   } > rtc_slow_seg | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |   /* Send .iram0 code to iram */ | 
					
						
							| 
									
										
										
										
											2016-10-13 11:46:51 +11:00
										 |  |  |   .iram0.vectors : | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |   { | 
					
						
							|  |  |  |     /* Vectors go to IRAM */ | 
					
						
							|  |  |  |     _init_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     /* Vectors according to builds/RF-2015.2-win32/esp108_v1_2_s5_512int_2/config.html */ | 
					
						
							|  |  |  |     . = 0x0; | 
					
						
							|  |  |  |     KEEP(*(.WindowVectors.text)); | 
					
						
							|  |  |  |     . = 0x180; | 
					
						
							|  |  |  |     KEEP(*(.Level2InterruptVector.text)); | 
					
						
							|  |  |  |     . = 0x1c0; | 
					
						
							|  |  |  |     KEEP(*(.Level3InterruptVector.text)); | 
					
						
							|  |  |  |     . = 0x200; | 
					
						
							|  |  |  |     KEEP(*(.Level4InterruptVector.text)); | 
					
						
							|  |  |  |     . = 0x240; | 
					
						
							|  |  |  |     KEEP(*(.Level5InterruptVector.text)); | 
					
						
							|  |  |  |     . = 0x280; | 
					
						
							|  |  |  |     KEEP(*(.DebugExceptionVector.text)); | 
					
						
							|  |  |  |     . = 0x2c0; | 
					
						
							|  |  |  |     KEEP(*(.NMIExceptionVector.text)); | 
					
						
							|  |  |  |     . = 0x300; | 
					
						
							|  |  |  |     KEEP(*(.KernelExceptionVector.text)); | 
					
						
							|  |  |  |     . = 0x340; | 
					
						
							|  |  |  |     KEEP(*(.UserExceptionVector.text)); | 
					
						
							|  |  |  |     . = 0x3C0; | 
					
						
							|  |  |  |     KEEP(*(.DoubleExceptionVector.text)); | 
					
						
							|  |  |  |     . = 0x400; | 
					
						
							|  |  |  |     *(.*Vector.literal) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     *(.UserEnter.literal); | 
					
						
							|  |  |  |     *(.UserEnter.text); | 
					
						
							|  |  |  |     . = ALIGN (16); | 
					
						
							|  |  |  |     *(.entry.text) | 
					
						
							|  |  |  |     *(.init.literal) | 
					
						
							|  |  |  |     *(.init) | 
					
						
							|  |  |  |     _init_end = ABSOLUTE(.); | 
					
						
							| 
									
										
										
										
											2017-03-21 16:29:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* This goes here, not at top of linker script, so addr2line finds it last, | 
					
						
							|  |  |  |        and uses it in preference to the first symbol in IRAM */ | 
					
						
							|  |  |  |     _iram_start = ABSOLUTE(0); | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |   } > iram0_0_seg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   .iram0.text : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     /* Code marked as runnning out of IRAM */ | 
					
						
							|  |  |  |     _iram_text_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.iram1 .iram1.*) | 
					
						
							|  |  |  |     *libfreertos.a:(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2018-03-01 17:02:32 +11:00
										 |  |  |     *libheap.a:multi_heap.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libheap.a:multi_heap_poisoning.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libesp32.a:panic.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libesp32.a:core_dump.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2017-03-22 06:07:37 +03:00
										 |  |  |     *libapp_trace.a:(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2018-03-01 17:02:32 +11:00
										 |  |  |     *libxtensa-debug-module.a:eri.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |     *librtc.a:(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2017-04-11 15:44:43 +08:00
										 |  |  |     *libsoc.a:(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |     *libhal.a:(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2018-03-01 17:02:32 +11:00
										 |  |  |     *libgcc.a:lib2funcs.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libspi_flash.a:spi_flash_rom_patch.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2017-08-17 02:36:00 +03:00
										 |  |  |     *libgcov.a:(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2017-09-11 16:59:03 +08:00
										 |  |  |     INCLUDE esp32.spiram.rom-functions-iram.ld | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |     _iram_text_end = ABSOLUTE(.); | 
					
						
							|  |  |  |   } > iram0_0_seg | 
					
						
							| 
									
										
										
										
											2018-02-26 22:32:58 +05:00
										 |  |  |    | 
					
						
							| 
									
										
										
										
											2017-01-06 13:03:07 +08:00
										 |  |  |   .dram0.data : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     _data_start = ABSOLUTE(.); | 
					
						
							| 
									
										
										
										
											2017-07-12 13:04:07 +08:00
										 |  |  |     *(.data) | 
					
						
							|  |  |  |     *(.data.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.d.*) | 
					
						
							|  |  |  |     *(.data1) | 
					
						
							|  |  |  |     *(.sdata) | 
					
						
							|  |  |  |     *(.sdata.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.s.*) | 
					
						
							|  |  |  |     *(.sdata2) | 
					
						
							|  |  |  |     *(.sdata2.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.s2.*) | 
					
						
							|  |  |  |     *(.jcr) | 
					
						
							| 
									
										
										
										
											2017-01-06 13:03:07 +08:00
										 |  |  |     *(.dram1 .dram1.*) | 
					
						
							| 
									
										
										
										
											2018-03-01 17:02:32 +11:00
										 |  |  |     *libesp32.a:panic.*(.rodata .rodata.*) | 
					
						
							| 
									
										
										
										
											2018-02-02 13:00:11 +08:00
										 |  |  |     *libphy.a:(.rodata .rodata.*) | 
					
						
							| 
									
										
										
										
											2018-03-01 17:02:32 +11:00
										 |  |  |     *libsoc.a:rtc_clk.*(.rodata .rodata.*) | 
					
						
							| 
									
										
										
										
											2017-03-22 06:07:37 +03:00
										 |  |  |     *libapp_trace.a:(.rodata .rodata.*) | 
					
						
							| 
									
										
										
										
											2017-08-17 02:36:00 +03:00
										 |  |  |     *libgcov.a:(.rodata .rodata.*) | 
					
						
							| 
									
										
										
										
											2018-03-01 17:02:32 +11:00
										 |  |  |     *libheap.a:multi_heap.*(.rodata .rodata.*) | 
					
						
							|  |  |  |     *libheap.a:multi_heap_poisoning.*(.rodata .rodata.*) | 
					
						
							| 
									
										
										
										
											2017-09-11 16:59:03 +08:00
										 |  |  |     INCLUDE esp32.spiram.rom-functions-dram.ld | 
					
						
							| 
									
										
										
										
											2017-01-06 13:03:07 +08:00
										 |  |  |     _data_end = ABSOLUTE(.); | 
					
						
							|  |  |  |     . = ALIGN(4); | 
					
						
							| 
									
										
										
										
											2018-02-26 22:32:58 +05:00
										 |  |  |   } > dram0_0_seg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /*This section holds data that should not be initialized at power up. | 
					
						
							|  |  |  |     The section located in Internal SRAM memory region. The macro _NOINIT | 
					
						
							|  |  |  |     can be used as attribute to place data into this section. | 
					
						
							|  |  |  |     See the esp_attr.h file for more information. | 
					
						
							|  |  |  |   */ | 
					
						
							|  |  |  |   .noinit (NOLOAD): | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     . = ALIGN(4); | 
					
						
							|  |  |  |     _noinit_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.noinit .noinit.*)  | 
					
						
							|  |  |  |     . = ALIGN(4) ; | 
					
						
							|  |  |  |     _noinit_end = ABSOLUTE(.); | 
					
						
							|  |  |  |   } > dram0_0_seg | 
					
						
							| 
									
										
										
										
											2017-01-06 13:03:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |   /* Shared RAM */ | 
					
						
							|  |  |  |   .dram0.bss (NOLOAD) : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     . = ALIGN (8); | 
					
						
							|  |  |  |     _bss_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.dynsbss) | 
					
						
							|  |  |  |     *(.sbss) | 
					
						
							|  |  |  |     *(.sbss.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.sb.*) | 
					
						
							|  |  |  |     *(.scommon) | 
					
						
							|  |  |  |     *(.sbss2) | 
					
						
							|  |  |  |     *(.sbss2.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.sb2.*) | 
					
						
							|  |  |  |     *(.dynbss) | 
					
						
							| 
									
										
										
										
											2016-12-30 10:38:21 +11:00
										 |  |  |     *(.bss) | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |     *(.bss.*) | 
					
						
							|  |  |  |     *(.share.mem) | 
					
						
							|  |  |  |     *(.gnu.linkonce.b.*) | 
					
						
							|  |  |  |     *(COMMON) | 
					
						
							|  |  |  |     . = ALIGN (8); | 
					
						
							|  |  |  |     _bss_end = ABSOLUTE(.); | 
					
						
							| 
									
										
										
										
											2018-02-26 22:32:58 +05:00
										 |  |  |     /* The heap starts right after end of this section */ | 
					
						
							| 
									
										
										
										
											2017-01-06 19:35:22 +08:00
										 |  |  |     _heap_start = ABSOLUTE(.); | 
					
						
							| 
									
										
										
										
											2018-02-26 22:32:58 +05:00
										 |  |  |   } > dram0_0_seg | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   .flash.rodata : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     _rodata_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.rodata) | 
					
						
							|  |  |  |     *(.rodata.*) | 
					
						
							| 
									
										
										
										
											2016-09-12 17:23:15 +10:00
										 |  |  |     *(.irom1.text) /* catch stray ICACHE_RODATA_ATTR */ | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |     *(.gnu.linkonce.r.*) | 
					
						
							|  |  |  |     *(.rodata1) | 
					
						
							|  |  |  |     __XT_EXCEPTION_TABLE_ = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.xt_except_table) | 
					
						
							| 
									
										
										
										
											2017-06-08 13:34:13 +02:00
										 |  |  |     *(.gcc_except_table .gcc_except_table.*) | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |     *(.gnu.linkonce.e.*) | 
					
						
							|  |  |  |     *(.gnu.version_r) | 
					
						
							|  |  |  |     . = (. + 3) & ~ 3; | 
					
						
							| 
									
										
										
										
											2017-06-08 13:34:13 +02:00
										 |  |  |     __eh_frame = ABSOLUTE(.); | 
					
						
							|  |  |  |     KEEP(*(.eh_frame)) | 
					
						
							|  |  |  |     . = (. + 7) & ~ 3; | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |     /*  C++ constructor and destructor tables, properly ordered:  */ | 
					
						
							|  |  |  |     __init_array_start = ABSOLUTE(.); | 
					
						
							| 
									
										
										
										
											2018-03-01 17:02:32 +11:00
										 |  |  |     KEEP (*crtbegin.*(.ctors)) | 
					
						
							|  |  |  |     KEEP (*(EXCLUDE_FILE (*crtend.*) .ctors)) | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |     KEEP (*(SORT(.ctors.*))) | 
					
						
							|  |  |  |     KEEP (*(.ctors)) | 
					
						
							|  |  |  |     __init_array_end = ABSOLUTE(.); | 
					
						
							| 
									
										
										
										
											2018-03-01 17:02:32 +11:00
										 |  |  |     KEEP (*crtbegin.*(.dtors)) | 
					
						
							|  |  |  |     KEEP (*(EXCLUDE_FILE (*crtend.*) .dtors)) | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |     KEEP (*(SORT(.dtors.*))) | 
					
						
							|  |  |  |     KEEP (*(.dtors)) | 
					
						
							|  |  |  |     /*  C++ exception handlers table:  */ | 
					
						
							|  |  |  |     __XT_EXCEPTION_DESCS_ = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.xt_except_desc) | 
					
						
							|  |  |  |     *(.gnu.linkonce.h.*) | 
					
						
							|  |  |  |     __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.xt_except_desc_end) | 
					
						
							|  |  |  |     *(.dynamic) | 
					
						
							|  |  |  |     *(.gnu.version_d) | 
					
						
							|  |  |  |     _rodata_end = ABSOLUTE(.); | 
					
						
							| 
									
										
										
										
											2016-09-12 17:23:15 +10:00
										 |  |  |     /* Literals are also RO data. */ | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |     _lit4_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(*.lit4) | 
					
						
							|  |  |  |     *(.lit4.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.lit4.*) | 
					
						
							|  |  |  |     _lit4_end = ABSOLUTE(.); | 
					
						
							|  |  |  |     . = ALIGN(4); | 
					
						
							| 
									
										
										
										
											2018-02-05 01:06:45 +03:00
										 |  |  |     _thread_local_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.tdata) | 
					
						
							|  |  |  |     *(.tdata.*) | 
					
						
							|  |  |  |     *(.tbss) | 
					
						
							|  |  |  |     *(.tbss.*) | 
					
						
							|  |  |  |     _thread_local_end = ABSOLUTE(.); | 
					
						
							|  |  |  |     . = ALIGN(4); | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |   } >drom0_0_seg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   .flash.text : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     _stext = .; | 
					
						
							|  |  |  |     _text_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*) | 
					
						
							|  |  |  |     *(.irom0.text) /* catch stray ICACHE_RODATA_ATTR */ | 
					
						
							|  |  |  |     *(.fini.literal) | 
					
						
							|  |  |  |     *(.fini) | 
					
						
							|  |  |  |     *(.gnu.version) | 
					
						
							|  |  |  |     _text_end = ABSOLUTE(.); | 
					
						
							|  |  |  |     _etext = .; | 
					
						
							| 
									
										
										
										
											2017-03-21 16:29:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* Similar to _iram_start, this symbol goes here so it is | 
					
						
							|  |  |  |        resolved by addr2line in preference to the first symbol in | 
					
						
							|  |  |  |        the flash.text segment. | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     _flash_cache_start = ABSOLUTE(0); | 
					
						
							| 
									
										
										
										
											2016-08-17 23:08:22 +08:00
										 |  |  |   } >iram0_2_seg | 
					
						
							|  |  |  | } |