| 
									
										
										
										
											2020-07-14 17:21:39 +08:00
										 |  |  | /** Simplified memory map for the bootloader. | 
					
						
							|  |  |  |  *  Make sure the bootloader can load into main memory without overwriting itself. | 
					
						
							|  |  |  |  *  We put 2nd bootloader in the high address space (before ROM stack/data/bss). | 
					
						
							|  |  |  |  *  See memory usage for ROM bootloader at the end of this file. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MEMORY | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-09-30 16:24:27 +08:00
										 |  |  |   iram_seg (RWX) :                  org = 0x403B6000, len = 0x4000 | 
					
						
							|  |  |  |   iram_loader_seg (RWX) :           org = 0x403BA000, len = 0x6000 | 
					
						
							| 
									
										
										
										
											2020-07-14 17:21:39 +08:00
										 |  |  |   dram_seg (RW) :                   org = 0x3FCD0000, len = 0x4000 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Default entry point: */ | 
					
						
							|  |  |  | ENTRY(call_start_cpu0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SECTIONS | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   .iram_loader.text : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     . = ALIGN (16); | 
					
						
							|  |  |  |     _loader_text_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*) | 
					
						
							|  |  |  |      *(.iram1 .iram1.*) /* catch stray IRAM_ATTR */ | 
					
						
							|  |  |  |     *liblog.a:(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libgcc.a:(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2020-10-20 18:08:15 +08:00
										 |  |  |     *libbootloader_support.a:bootloader_clock_loader.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libbootloader_support.a:bootloader_common_loader.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2020-07-14 17:21:39 +08:00
										 |  |  |     *libbootloader_support.a:bootloader_flash.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libbootloader_support.a:bootloader_random.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2020-09-25 15:30:36 +10:00
										 |  |  |     *libbootloader_support.a:bootloader_random*.*(.literal.bootloader_random_disable .text.bootloader_random_disable) | 
					
						
							| 
									
										
										
										
											2020-10-20 18:08:15 +08:00
										 |  |  |     *libbootloader_support.a:bootloader_random*.*(.literal.bootloader_random_enable .text.bootloader_random_enable) | 
					
						
							| 
									
										
										
										
											2020-07-14 17:21:39 +08:00
										 |  |  |     *libbootloader_support.a:bootloader_efuse_esp32s3.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libbootloader_support.a:bootloader_utility.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libbootloader_support.a:bootloader_sha.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libbootloader_support.a:bootloader_console_loader.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2020-10-20 18:08:15 +08:00
										 |  |  |     *libbootloader_support.a:bootloader_panic.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2020-07-14 17:21:39 +08:00
										 |  |  |     *libbootloader_support.a:esp_image_format.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libbootloader_support.a:flash_encrypt.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libbootloader_support.a:flash_partitions.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libbootloader_support.a:secure_boot.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2021-03-05 22:22:29 +08:00
										 |  |  |     *libbootloader_support.a:secure_boot_signatures_bootloader.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2020-07-14 17:21:39 +08:00
										 |  |  |     *libmicro-ecc.a:*.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libspi_flash.a:*.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2020-09-03 17:49:24 +02:00
										 |  |  |     *libhal.a:wdt_hal_iram.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2020-09-25 15:23:52 +08:00
										 |  |  |     *libesp_hw_support.a:rtc_clk.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libesp_hw_support.a:rtc_time.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *libesp_hw_support.a:regi2c_ctrl.*(.literal .text .literal.* .text.*) | 
					
						
							| 
									
										
										
										
											2020-07-14 17:21:39 +08:00
										 |  |  |     *libefuse.a:*.*(.literal .text .literal.* .text.*) | 
					
						
							|  |  |  |     *(.fini.literal) | 
					
						
							|  |  |  |     *(.fini) | 
					
						
							|  |  |  |     *(.gnu.version) | 
					
						
							|  |  |  |     _loader_text_end = ABSOLUTE(.); | 
					
						
							|  |  |  |   } > iram_loader_seg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   .iram.text : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     . = ALIGN (16); | 
					
						
							|  |  |  |     *(.entry.text) | 
					
						
							|  |  |  |     *(.init.literal) | 
					
						
							|  |  |  |     *(.init) | 
					
						
							|  |  |  |   } > iram_seg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Shared RAM */ | 
					
						
							|  |  |  |   .dram0.bss (NOLOAD) : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     . = ALIGN (8); | 
					
						
							|  |  |  |     _dram_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     _bss_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.dynsbss) | 
					
						
							|  |  |  |     *(.sbss) | 
					
						
							|  |  |  |     *(.sbss.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.sb.*) | 
					
						
							|  |  |  |     *(.scommon) | 
					
						
							|  |  |  |     *(.sbss2) | 
					
						
							|  |  |  |     *(.sbss2.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.sb2.*) | 
					
						
							|  |  |  |     *(.dynbss) | 
					
						
							|  |  |  |     *(.bss) | 
					
						
							|  |  |  |     *(.bss.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.b.*) | 
					
						
							|  |  |  |     *(COMMON) | 
					
						
							|  |  |  |     . = ALIGN (8); | 
					
						
							|  |  |  |     _bss_end = ABSOLUTE(.); | 
					
						
							|  |  |  |   } > dram_seg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   .dram0.data : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     _data_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.data) | 
					
						
							|  |  |  |     *(.data.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.d.*) | 
					
						
							|  |  |  |     *(.data1) | 
					
						
							|  |  |  |     *(.sdata) | 
					
						
							|  |  |  |     *(.sdata.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.s.*) | 
					
						
							|  |  |  |     *(.sdata2) | 
					
						
							|  |  |  |     *(.sdata2.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.s2.*) | 
					
						
							|  |  |  |     *(.jcr) | 
					
						
							|  |  |  |     _data_end = ABSOLUTE(.); | 
					
						
							|  |  |  |   } > dram_seg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   .dram0.rodata : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     _rodata_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.rodata) | 
					
						
							|  |  |  |     *(.rodata.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.r.*) | 
					
						
							|  |  |  |     *(.rodata1) | 
					
						
							|  |  |  |     __XT_EXCEPTION_TABLE_ = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.xt_except_table) | 
					
						
							|  |  |  |     *(.gcc_except_table) | 
					
						
							|  |  |  |     *(.gnu.linkonce.e.*) | 
					
						
							|  |  |  |     *(.gnu.version_r) | 
					
						
							|  |  |  |     *(.eh_frame) | 
					
						
							|  |  |  |     . = (. + 3) & ~ 3; | 
					
						
							|  |  |  |     /* C++ constructor and destructor tables, properly ordered: */ | 
					
						
							|  |  |  |     __init_array_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     KEEP (*crtbegin.*(.ctors)) | 
					
						
							|  |  |  |     KEEP (*(EXCLUDE_FILE (*crtend.*) .ctors)) | 
					
						
							|  |  |  |     KEEP (*(SORT(.ctors.*))) | 
					
						
							|  |  |  |     KEEP (*(.ctors)) | 
					
						
							|  |  |  |     __init_array_end = ABSOLUTE(.); | 
					
						
							|  |  |  |     KEEP (*crtbegin.*(.dtors)) | 
					
						
							|  |  |  |     KEEP (*(EXCLUDE_FILE (*crtend.*) .dtors)) | 
					
						
							|  |  |  |     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(.); | 
					
						
							|  |  |  | 	  /* Literals are also RO data. */ | 
					
						
							|  |  |  |     _lit4_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(*.lit4) | 
					
						
							|  |  |  |     *(.lit4.*) | 
					
						
							|  |  |  |     *(.gnu.linkonce.lit4.*) | 
					
						
							|  |  |  |     _lit4_end = ABSOLUTE(.); | 
					
						
							|  |  |  |     . = ALIGN(4); | 
					
						
							|  |  |  |     _dram_end = ABSOLUTE(.); | 
					
						
							|  |  |  |   } > dram_seg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   .iram.text : | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     _stext = .; | 
					
						
							|  |  |  |     _text_start = ABSOLUTE(.); | 
					
						
							|  |  |  |     *(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*) | 
					
						
							|  |  |  |     *(.iram .iram.*) /* catch stray IRAM_ATTR */ | 
					
						
							|  |  |  |     *(.fini.literal) | 
					
						
							|  |  |  |     *(.fini) | 
					
						
							|  |  |  |     *(.gnu.version) | 
					
						
							| 
									
										
										
										
											2021-03-29 12:18:25 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** CPU will try to prefetch up to 16 bytes of | 
					
						
							|  |  |  |       * of instructions. This means that any configuration (e.g. MMU, PMS) must allow | 
					
						
							|  |  |  |       * safe access to up to 16 bytes after the last real instruction, add | 
					
						
							|  |  |  |       * dummy bytes to ensure this | 
					
						
							|  |  |  |       */ | 
					
						
							|  |  |  |     . += 16; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-14 17:21:39 +08:00
										 |  |  |     _text_end = ABSOLUTE(.); | 
					
						
							|  |  |  |     _etext = .; | 
					
						
							|  |  |  |   } > iram_seg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  *  Appendix: Memory Usage of ROM bootloader | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  +--------+--------------+------+ 0x3FCD_8000 | 
					
						
							|  |  |  |  *  |        ^              | | 
					
						
							|  |  |  |  *  |        |              | | 
					
						
							|  |  |  |  *  |        | data/bss     | | 
					
						
							|  |  |  |  *  |        |              | | 
					
						
							|  |  |  |  *  |        v              | | 
					
						
							|  |  |  |  *  +------------------------------+ 0x3FCE_9910 | 
					
						
							|  |  |  |  *  |        ^              | | 
					
						
							|  |  |  |  *  |        |              | | 
					
						
							|  |  |  |  *  |        | stack (pro)  | | 
					
						
							|  |  |  |  *  |        |              | | 
					
						
							|  |  |  |  *  |        v              | | 
					
						
							|  |  |  |  *  +------------------------------+ 0x3FCE_B910 | 
					
						
							|  |  |  |  *  |        ^              | | 
					
						
							|  |  |  |  *  |        |              | | 
					
						
							|  |  |  |  *  |        | stack (app)  | | 
					
						
							|  |  |  |  *  |        |              | | 
					
						
							|  |  |  |  *  |        v              | | 
					
						
							|  |  |  |  *  +--------+--------------+------+ 0x3FCE_D910 | 
					
						
							|  |  |  |  */ |