1/* 2 * Copyright (c) 2016 Cadence Design Systems, Inc. 3 * Copyright (c) 2017 Intel Corporation 4 * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. 5 * SPDX-License-Identifier: Apache-2.0 6 */ 7 8#include <zephyr/devicetree.h> 9#include <zephyr/linker/sections.h> 10#include <zephyr/linker/linker-defs.h> 11#include <zephyr/linker/linker-tool.h> 12 13#include "memory.h" 14 15/* User available SRAM memory segments */ 16procpu_iram_end = USER_IRAM_END - APPCPU_SRAM_SIZE; 17procpu_iram_org = SRAM0_IRAM_START + SRAM0_CACHE_SIZE; 18procpu_iram_len = procpu_iram_end - procpu_iram_org; 19 20procpu_dram_end = SRAM2_DRAM_END; 21procpu_dram_org = SRAM2_DRAM_USER_START + CONFIG_ESP32_BT_RESERVE_DRAM; 22procpu_dram_len = SRAM2_DRAM_USER_SIZE - CONFIG_ESP32_BT_RESERVE_DRAM; 23 24user_dram_2_seg_org = SRAM1_DRAM_USER_START; 25user_dram_2_seg_len = SRAM1_USER_SIZE; 26 27/* Aliases */ 28#define FLASH_CODE_REGION irom0_0_seg 29#define RODATA_REGION drom0_0_seg 30#define IRAM_REGION iram0_0_seg 31#define DRAM_REGION dram0_0_seg 32#define RAMABLE_REGION dram0_0_seg 33#define ROMABLE_REGION FLASH 34 35#undef GROUP_DATA_LINK_IN 36#define GROUP_DATA_LINK_IN(vregion, lregion) > vregion AT > lregion 37 38#undef GROUP_NOLOAD_LINK_IN 39#define GROUP_NOLOAD_LINK_IN(vregion, lregion) > vregion 40 41/* Flash segments (rodata and text) should be mapped in virtual address space by providing VMA. 42 * Executing directly from LMA is not possible. */ 43#undef GROUP_ROM_LINK_IN 44#define GROUP_ROM_LINK_IN(vregion, lregion) > RODATA_REGION AT > lregion 45 46/* Make sure new sections have consistent alignment between input and output sections */ 47#undef SECTION_DATA_PROLOGUE 48#define SECTION_DATA_PROLOGUE(name, options, align) name options : ALIGN_WITH_INPUT 49 50#undef SECTION_PROLOGUE 51#define SECTION_PROLOGUE SECTION_DATA_PROLOGUE 52 53MEMORY 54{ 55#ifdef CONFIG_BOOTLOADER_MCUBOOT 56 mcuboot_hdr (R): org = 0x0, len = 0x20 57 metadata (R): org = 0x20, len = 0x20 58 FLASH (R): org = 0x40, len = FLASH_SIZE - 0x40 59#else 60 /* Make safety margin in the FLASH memory size so the 61 * (esp_img_header + (n*esp_seg_headers)) would fit */ 62 FLASH (R): org = 0x0, len = FLASH_SIZE - 0x100 63#endif /* CONFIG_BOOTLOADER_MCUBOOT */ 64 65 iram0_0_seg(RX): org = procpu_iram_org, len = procpu_iram_len 66 dram0_0_seg(RW): org = procpu_dram_org, len = procpu_dram_len 67 68 irom0_0_seg(RX): org = IROM_SEG_ORG, len = IROM_SEG_LEN 69 drom0_0_seg(R): org = DROM_SEG_ORG, len = DROM_SEG_LEN 70 71 rtc_iram_seg(RWX): org = 0x400c0000, len = 0x2000 72 rtc_slow_seg(RW): org = 0x50000000, len = 0x1000 73 74#ifdef CONFIG_ESP_SPIRAM 75 ext_ram_seg(RW): org = 0x3f800000, len = CONFIG_ESP_SPIRAM_SIZE 76#endif /* CONFIG_ESP_SPIRAM */ 77 78#ifdef CONFIG_GEN_ISR_TABLES 79 IDT_LIST(RW): org = 0x3ebfe010, len = 0x2000 80#endif /* CONFIG_GEN_ISR_TABLES */ 81} 82 83/* Default entry point: */ 84ENTRY(CONFIG_KERNEL_ENTRY) 85 86_rom_store_table = 0; 87 88PROVIDE(_memmap_vecbase_reset = 0x40000450); 89PROVIDE(_memmap_reset_vector = 0x40000400); 90 91_heap_sentry = SRAM2_DRAM_END; 92 93SECTIONS 94{ 95#ifdef CONFIG_BOOTLOADER_MCUBOOT 96 /* Reserve space for MCUboot header in the binary */ 97 .mcuboot_header : 98 { 99 QUAD(0x0) 100 QUAD(0x0) 101 QUAD(0x0) 102 QUAD(0x0) 103 } > mcuboot_hdr 104 .metadata : 105 { 106 /* 0. Magic byte for load header */ 107 LONG(0xace637d3) 108 109 /* 1. Application entry point address */ 110 KEEP(*(.entry_addr)) 111 112 /* IRAM load: 113 * 2. Destination address (VMA) for IRAM region 114 * 3. Flash offset (LMA) for start of IRAM region 115 * 4. Size of IRAM region 116 */ 117 LONG(ADDR(.iram0.vectors)) 118 LONG(LOADADDR(.iram0.vectors)) 119 LONG(LOADADDR(.iram0.text) + SIZEOF(.iram0.text) - LOADADDR(.iram0.vectors)) 120 121 /* DRAM load: 122 * 5. Destination address (VMA) for DRAM region 123 * 6. Flash offset (LMA) for start of DRAM region 124 * 7. Size of DRAM region 125 */ 126 LONG(ADDR(.dram0.data)) 127 LONG(LOADADDR(.dram0.data)) 128 LONG(LOADADDR(.dram0.end) + SIZEOF(.dram0.end) - LOADADDR(.dram0.data)) 129 } > metadata 130#endif /* CONFIG_BOOTLOADER_MCUBOOT */ 131 132 #include <zephyr/linker/rel-sections.ld> 133 134#ifdef CONFIG_LLEXT 135 #include <zephyr/linker/llext-sections.ld> 136#endif 137 138 /* --- RTC BEGIN --- */ 139 140 /* RTC fast memory holds RTC wake stub code, 141 * including from any source file named rtc_wake_stub*.c 142 */ 143 .rtc.text : 144 { 145 . = ALIGN(4); 146 *(.rtc.literal .rtc.text) 147 *rtc_wake_stub*.o(.literal .text .literal.* .text.*) 148 } GROUP_DATA_LINK_IN(rtc_iram_seg, ROMABLE_REGION) 149 150 /* RTC slow memory holds RTC wake stub 151 * data/rodata, including from any source file 152 * named rtc_wake_stub*.c 153 */ 154 .rtc.data : 155 { 156 _rtc_data_start = ABSOLUTE(.); 157 *(.rtc.data) 158 *(.rtc.rodata) 159 *rtc_wake_stub*.o(.data .rodata .data.* .rodata.* .bss .bss.*) 160 _rtc_data_end = ABSOLUTE(.); 161 } GROUP_DATA_LINK_IN(rtc_slow_seg, ROMABLE_REGION) 162 163 /* RTC bss, from any source file named rtc_wake_stub*.c */ 164 .rtc.bss (NOLOAD) : 165 { 166 _rtc_bss_start = ABSOLUTE(.); 167 *rtc_wake_stub*.o(.bss .bss.*) 168 *rtc_wake_stub*.o(COMMON) 169 _rtc_bss_end = ABSOLUTE(.); 170 } GROUP_LINK_IN(rtc_slow_seg) 171 172 /* This section located in RTC SLOW Memory area. 173 * It holds data marked with RTC_SLOW_ATTR attribute. 174 * See the file "esp_attr.h" for more information. 175 */ 176 .rtc.force_slow : 177 { 178 . = ALIGN(4); 179 _rtc_force_slow_start = ABSOLUTE(.); 180 *(.rtc.force_slow .rtc.force_slow.*) 181 . = ALIGN(4) ; 182 _rtc_force_slow_end = ABSOLUTE(.); 183 } > rtc_slow_seg 184 185 /* Get size of rtc slow data */ 186 _rtc_slow_length = (_rtc_force_slow_end - _rtc_data_start); 187 188 /* --- RTC END --- */ 189 190 /* --- IRAM BEGIN --- */ 191 192 .iram0.vectors : ALIGN(4) 193 { 194 /* Vectors go to IRAM */ 195 _init_start = ABSOLUTE(.); 196 /* Vectors according to builds/RF-2015.2-win32/esp108_v1_2_s5_512int_2/config.html */ 197 . = 0x0; 198 KEEP(*(.WindowVectors.text)); 199 . = 0x180; 200 KEEP(*(.Level2InterruptVector.text)); 201 . = 0x1c0; 202 KEEP(*(.Level3InterruptVector.text)); 203 . = 0x200; 204 KEEP(*(.Level4InterruptVector.text)); 205 . = 0x240; 206 KEEP(*(.Level5InterruptVector.text)); 207 . = 0x280; 208 KEEP(*(.DebugExceptionVector.text)); 209 . = 0x2c0; 210 KEEP(*(.NMIExceptionVector.text)); 211 . = 0x300; 212 KEEP(*(.KernelExceptionVector.text)); 213 . = 0x340; 214 KEEP(*(.UserExceptionVector.text)); 215 . = 0x3C0; 216 KEEP(*(.DoubleExceptionVector.text)); 217 . = 0x400; 218 *(.*Vector.literal) 219 220 *(.UserEnter.literal); 221 *(.UserEnter.text); 222 . = ALIGN (16); 223 *(.entry.text) 224 *(.init.literal) 225 *(.init) 226 _init_end = ABSOLUTE(.); 227 _iram_start = ABSOLUTE(.); 228 } GROUP_DATA_LINK_IN(IRAM_REGION, ROMABLE_REGION) 229 230 .iram0.text : ALIGN(4) 231 { 232 /* Code marked as running out of IRAM */ 233 _iram_text_start = ABSOLUTE(.); 234 *(.iram1 .iram1.*) 235 *(.iram0.literal .iram.literal .iram.text.literal .iram0.text .iram.text) 236 *libarch__xtensa__core.a:(.literal .text .literal.* .text.*) 237 *libkernel.a:(.literal .text .literal.* .text.*) 238 *libgcc.a:lib2funcs.*(.literal .text .literal.* .text.*) 239 *libzephyr.a:windowspill_asm.*(.literal .text .literal.* .text.*) 240 *libzephyr.a:cbprintf_complete.*(.literal .text .literal.* .text.*) 241 *libzephyr.a:printk.*(.literal.printk .literal.vprintk .literal.char_out .text.printk .text.vprintk .text.char_out) 242 *libzephyr.a:log_noos.*(.literal .text .literal.* .text.*) 243 *libzephyr.a:log_core.*(.literal .text .literal.* .text.*) 244 *libzephyr.a:log_msg.*(.literal .text .literal.* .text.*) 245 *libzephyr.a:log_list.*(.literal .text .literal.* .text.*) 246 *libzephyr.a:log_output.*(.literal .text .literal.* .text.*) 247 *libzephyr.a:log_backend_uart.*(.literal .text .literal.* .text.*) 248 *libzephyr.a:loader.*(.literal .text .literal.* .text.*) 249 *libzephyr.a:flash_init.*(.literal .text .literal.* .text.*) 250 *libzephyr.a:soc_flash_init.*(.literal .text .literal.* .text.*) 251 *libzephyr.a:console_init.*(.literal .text .literal.* .text.*) 252 *libzephyr.a:soc_random.*(.literal .text .literal.* .text.*) 253 *libzephyr.a:soc_init.*(.literal .text .literal.* .text.*) 254 *libzephyr.a:hw_init.*(.literal .text .literal.* .text.*) 255 *libzephyr.a:rtc_*.*(.literal .text .literal.* .text.*) 256 *libzephyr.a:cpu_util.*(.literal .text .literal.* .text.*) 257 *libdrivers__flash.a:flash_esp32.*(.literal .text .literal.* .text.*) 258 *libdrivers__timer.a:xtensa_sys_timer.*(.literal .text .literal.* .text.*) 259 *libdrivers__console.a:uart_console.*(.literal.console_out .text.console_out) 260 *liblib__libc__picolib.a:abort.*(.literal .text .literal.* .text.*) 261 *liblib__libc__minimal.a:string.*(.literal .text .literal.* .text.*) 262 *liblib__libc__newlib.a:string.*(.literal .text .literal.* .text.*) 263 *libc.a:*(.literal .text .literal.* .text.*) 264 *libphy.a:( .phyiram .phyiram.*) 265 *libgcov.a:(.literal .text .literal.* .text.*) 266 267 /* [mapping:esp_psram] */ 268 *libzephyr.a:mmu_psram_flash.*(.literal .literal.* .text .text.*) 269 *libzephyr.a:esp_psram_impl_quad.*(.literal .literal.* .text .text.*) 270 271 /* [mapping:hal] */ 272 *libzephyr.a:mmu_hal.*(.literal .literal.* .text .text.*) 273 *libzephyr.a:cache_utils.*(.literal .text .literal.* .text.*) 274 *libzephyr.a:cache_esp32.*(.literal .text .literal.* .text.*) 275 *libzephyr.a:cache_hal_esp32.*(.literal .text .literal.* .text.*) 276 *libzephyr.a:ledc_hal_iram.*(.literal .literal.* .text .text.*) 277 *libzephyr.a:i2c_hal_iram.*(.literal .literal.* .text .text.*) 278 *libzephyr.a:wdt_hal_iram.*(.literal .literal.* .text .text.*) 279 *libzephyr.a:spi_flash_hal_iram.*(.literal .literal.* .text .text.*) 280 *libzephyr.a:spi_flash_encrypt_hal_iram.*(.literal .literal.* .text .text.*) 281 282 /* [mapping:soc] */ 283 *libzephyr.a:lldesc.*(.literal .literal.* .text .text.*) 284 285 /* [mapping:log] */ 286 *(.literal.esp_log_write .text.esp_log_write) 287 *(.literal.esp_log_timestamp .text.esp_log_timestamp) 288 *(.literal.esp_log_early_timestamp .text.esp_log_early_timestamp) 289 *(.literal.esp_log_impl_lock .text.esp_log_impl_lock) 290 *(.literal.esp_log_impl_lock_timeout .text.esp_log_impl_lock_timeout) 291 *(.literal.esp_log_impl_unlock .text.esp_log_impl_unlock) 292 293 /* [mapping:spi_flash] */ 294 *libzephyr.a:spi_flash_chip_boya.*(.literal .literal.* .text .text.*) 295 *libzephyr.a:spi_flash_chip_gd.*(.literal .literal.* .text .text.*) 296 *libzephyr.a:spi_flash_chip_generic.*(.literal .literal.* .text .text.*) 297 *libzephyr.a:spi_flash_chip_issi.*(.literal .literal.* .text .text.*) 298 *libzephyr.a:spi_flash_chip_mxic.*(.literal .literal.* .text .text.*) 299 *libzephyr.a:spi_flash_chip_mxic_opi.*(.literal .literal.* .text .text.*) 300 *libzephyr.a:spi_flash_chip_th.*(.literal .literal.* .text .text.*) 301 *libzephyr.a:spi_flash_chip_winbond.*(.literal .literal.* .text .text.*) 302 *libzephyr.a:memspi_host_driver.*(.literal .literal.* .text .text.*) 303 *libzephyr.a:flash_brownout_hook.*(.literal .literal.* .text .text.*) 304 *libzephyr.a:spi_flash_wrap.*(.literal .literal.* .text .text.*) 305 *libzephyr.a:spi_flash_hpm_enable.*(.literal .literal.* .text .text.*) 306 *libzephyr.a:flash_ops.*(.literal .literal.* .text .text.*) 307 308 /* [mapping:esp_system] */ 309 *libzephyr.a:esp_err.*(.literal .literal.* .text .text.*) 310 *(.literal.esp_system_abort .text.esp_system_abort) 311 312 /* [mapping:esp_hw_support] */ 313 *(.literal.esp_cpu_stall .text.esp_cpu_stall) 314 *(.literal.esp_cpu_unstall .text.esp_cpu_unstall) 315 *(.literal.esp_cpu_reset .text.esp_cpu_reset) 316 *(.literal.esp_cpu_wait_for_intr .text.esp_cpu_wait_for_intr) 317 *(.literal.esp_cpu_compare_and_set .text.esp_cpu_compare_and_set) 318 *(.literal.esp_gpio_reserve_pins .text.esp_gpio_reserve_pins) 319 *(.literal.esp_gpio_is_pin_reserved .text.esp_gpio_is_pin_reserved) 320 *(.literal.rtc_vddsdio_get_config .text.rtc_vddsdio_get_config) 321 *(.literal.rtc_vddsdio_set_config .text.rtc_vddsdio_set_config) 322 *libzephyr.a:esp_memory_utils.*(.literal .literal.* .text .text.*) 323 *libzephyr.a:rtc_init.*(.literal .literal.* .text .text.*) 324 *libzephyr.a:rtc_clk.*(.literal .literal.* .text .text.*) 325 *libzephyr.a:rtc_clk_init.*(.literal .literal.* .text .text.*) 326 *libzephyr.a:rtc_sleep.*(.literal .literal.* .text .text.*) 327 *libzephyr.a:rtc_time.*(.literal .literal.* .text .text.*) 328 *libzephyr.a:systimer.*(.literal .literal.* .text .text.*) 329 *libzephyr.a:mspi_timing_config.*(.literal .literal.* .text .text.*) 330 *libzephyr.a:mspi_timing_tuning.*(.literal .literal.* .text .text.*) 331 *libzephyr.a:periph_ctrl.*(.literal .text .literal.* .text.*) 332 *(.literal.sar_periph_ctrl_power_enable .text.sar_periph_ctrl_power_enable) 333 334 *libzephyr.a:esp_system_chip.*(.literal.esp_system_abort .text.esp_system_abort) 335 *libzephyr.a:spi_hal_iram.*(.literal .literal.* .text .text.*) 336 *libzephyr.a:spi_slave_hal_iram.*(.literal .literal.* .text .text.*) 337 *libzephyr.a:flash_brownout_hook.*(.literal .literal.* .text .text.*) 338 *libzephyr.a:heap_caps_zephyr.*(.literal .literal.* .text .text.*) 339 340 /* [mapping:soc_pm] */ 341 *(.literal.GPIO_HOLD_MASK .text.GPIO_HOLD_MASK) 342 343 /* [mapping:esp_rom] */ 344 *libzephyr.a:esp_rom_spiflash.*(.literal .literal.* .text .text.*) 345 *libzephyr.a:esp_rom_systimer.*(.literal .literal.* .text .text.*) 346 *libzephyr.a:esp_rom_wdt.*(.literal .literal.* .text .text.*) 347 *libzephyr.a:esp_rom_efuse.*(.literal .literal.* .text .text.*) 348 349 /* [mapping:esp_mm] */ 350 *libzephyr.a:esp_cache.*(.literal .literal.* .text .text.*) 351 *libzephyr.a:cache_esp32.*(.literal .literal.* .text .text.*) 352 353 *libzephyr.a:bootloader_soc.*(.literal .text .literal.* .text.*) 354 *libzephyr.a:bootloader_random*.*(.literal.bootloader_random_disable .text.bootloader_random_disable) 355 *libzephyr.a:bootloader_random*.*(.literal.bootloader_random_enable .text.bootloader_random_enable) 356 357#if defined(CONFIG_ESP32_WIFI_IRAM_OPT) 358 *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) 359 *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiorslpiram .wifiorslpiram.* .wifiextrairam .wifiextrairam.*) 360 361 /* [mapping:esp_wifi] */ 362 *(.literal.wifi_clock_enable_wrapper .text.wifi_clock_enable_wrapper) 363 *(.literal.wifi_clock_disable_wrapper .text.wifi_clock_disable_wrapper) 364 365 /* [mapping:esp_phy] */ 366 *(.literal.esp_phy_enable .text.esp_phy_enable) 367 *(.literal.esp_phy_disable .text.esp_phy_disable) 368 *(.literal.esp_wifi_bt_power_domain_off .text.esp_wifi_bt_power_domain_off) 369#endif /* CONFIG_ESP32_WIFI_IRAM_OPT */ 370 371#if defined(CONFIG_ESP32_WIFI_RX_IRAM_OPT) 372 *libnet80211.a:( .wifirxiram .wifirxiram.* .wifislprxiram .wifislprxiram.*) 373 *libpp.a:( .wifirxiram .wifirxiram.* .wifislprxiram .wifislprxiram.*) 374#endif /* CONFIG_ESP32_WIFI_RX_IRAM_OPT */ 375 376 . = ALIGN(4); 377 378 } GROUP_DATA_LINK_IN(IRAM_REGION, ROMABLE_REGION) 379 380#ifdef CONFIG_ESP_SIMPLE_BOOT 381 .loader.text : 382 { 383 . = ALIGN(4); 384 *libzephyr.a:bootloader_clock_init.*(.literal .text .literal.* .text.*) 385 *libzephyr.a:bootloader_wdt.*(.literal .text .literal.* .text.*) 386 *libzephyr.a:bootloader_flash.*(.literal .text .literal.* .text.*) 387 *libzephyr.a:bootloader_clock_loader.*(.literal .text .literal.* .text.*) 388 *libzephyr.a:bootloader_random.*(.literal .text .literal.* .text.*) 389 *libzephyr.a:bootloader_efuse.*(.literal .text .literal.* .text.*) 390 *libzephyr.a:bootloader_utility.*(.literal .text .literal.* .text.*) 391 *libzephyr.a:bootloader_sha.*(.literal .text .literal.* .text.*) 392 *libzephyr.a:bootloader_panic.*(.literal .text .literal.* .text.*) 393 394 *libzephyr.a:esp_image_format.*(.literal .text .literal.* .text.*) 395 *libzephyr.a:flash_encrypt.*(.literal .text .literal.* .text.*) 396 *libzephyr.a:flash_encryption_secure_features.*(.literal .text .literal.* .text.*) 397 *libzephyr.a:flash_partitions.*(.literal .text .literal.* .text.*) 398 *libzephyr.a:spi_flash_hal.*(.literal .literal.* .text .text.*) 399 *libzephyr.a:spi_flash_hal_common.*(.literal .literal.* .text .text.*) 400 *libzephyr.a:esp_flash_api.*(.literal .text .literal.* .text.*) 401 *libzephyr.a:esp_flash_spi_init.*(.literal .text .literal.* .text.*) 402 403 *libzephyr.a:secure_boot.*(.literal .text .literal.* .text.*) 404 *libzephyr.a:secure_boot_secure_features.*(.literal .text .literal.* .text.*) 405 *libzephyr.a:secure_boot_signatures_bootloader.*(.literal .text .literal.* .text.*) 406 407 *libzephyr.a:efuse_hal.*(.literal .text .literal.* .text.*) 408 *libzephyr.a:esp_efuse_table.*(.literal .text .literal.* .text.*) 409 *libzephyr.a:esp_efuse_fields.*(.literal .text .literal.* .text.*) 410 *libzephyr.a:esp_efuse_api.*(.literal .text .literal.* .text.*) 411 *libzephyr.a:esp_efuse_utility.*(.literal .text .literal.* .text.*) 412 *libzephyr.a:esp_efuse_api_key_esp32.*(.literal .text .literal.* .text.*) 413 414 *libzephyr.a:app_cpu_start.*(.literal .text .literal.* .text.*) 415 *libzephyr.a:mpu_hal.*(.literal .text .literal.* .text.*) 416 *libzephyr.a:cpu_region_protect.*(.literal .text .literal.* .text.*) 417 418 /* NOTE: to overcome the bug in esptool making Simple boot compatible image */ 419 . += 16; 420 . = ALIGN(16); 421 } GROUP_DATA_LINK_IN(IRAM_REGION, ROMABLE_REGION) 422#endif /* CONFIG_ESP_SIMPLE_BOOT */ 423 424 /* Marks the end of IRAM code segment */ 425 .iram0.text_end (NOLOAD) : 426 { 427 /* ESP32 memprot requires 16B padding for possible CPU 428 * prefetch and 256B alignment for PMS split lines */ 429 . += 16; 430 . = ALIGN(0x100); 431 _iram_text_end = ABSOLUTE(.); 432 } GROUP_LINK_IN(IRAM_REGION) 433 434 .iram0.data : 435 { 436 . = ALIGN(16); 437 *(.iram.data) 438 *(.iram.data*) 439 } GROUP_DATA_LINK_IN(IRAM_REGION, ROMABLE_REGION) 440 441 .iram0.bss (NOLOAD) : 442 { 443 . = ALIGN(16); 444 _iram_bss_start = ABSOLUTE(.); 445 *(.iram.bss) 446 *(.iram.bss.*) 447 _iram_bss_end = ABSOLUTE(.); 448 449 . = ALIGN(4); 450 _iram_end = ABSOLUTE(.); 451 } GROUP_LINK_IN(IRAM_REGION) 452 453 /* This symbol is here to check SRAM1 usage in case it is used for data too */ 454 _iram_end_at_dram_addr = SRAM1_IRAM_DRAM_CALC(_iram_end); 455 _unallocated_iram_memory_size = ORIGIN(iram0_0_seg) + LENGTH(iram0_0_seg) - _iram_end; 456 457 ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)), "IRAM code does not fit.") 458 459 /* --- IRAM END --- */ 460 461 /* --- DRAM BEGIN --- */ 462 463 .dram0.data : 464 { 465 _dram_data_start = ABSOLUTE(.); 466 _data_start = ABSOLUTE(.); 467 468 _btdm_data_start = ABSOLUTE(.); 469 *libbtdm_app.a:(.data .data.*) 470 . = ALIGN (4); 471 _btdm_data_end = ABSOLUTE(.); 472 473 *(.data) 474 *(.data.*) 475 *(.gnu.linkonce.d.*) 476 *(.data1) 477 *(.sdata) 478 *(.sdata.*) 479 *(.gnu.linkonce.s.*) 480 *(.sdata2) 481 *(.sdata2.*) 482 *(.gnu.linkonce.s2.*) 483 /* rodata for panic handler(libarch__xtensa__core.a) and all 484 * dependent functions should be placed in DRAM to avoid issue 485 * when flash cache is disabled */ 486 *libarch__xtensa__core.a:(.rodata .rodata.*) 487 *libkernel.a:fatal.*(.rodata .rodata.*) 488 *libkernel.a:init.*(.rodata .rodata.*) 489 *libzephyr.a:cbprintf_complete*(.rodata .rodata.*) 490 *libzephyr.a:log_core.*(.rodata .rodata.*) 491 *libzephyr.a:log_backend_uart.*(.rodata .rodata.*) 492 *libzephyr.a:log_output.*(.rodata .rodata.*) 493 *libzephyr.a:loader.*(.rodata .rodata.*) 494 *libzephyr.a:flash_init.*(.rodata .rodata.*) 495 *libzephyr.a:soc_flash_init.*(.rodata .rodata.*) 496 *libzephyr.a:console_init.*(.rodata .rodata.*) 497 *libzephyr.a:soc_random.*(.rodata .rodata.*) 498 *libzephyr.a:soc_init.*(.rodata .rodata.*) 499 *libzephyr.a:hw_init.*(.rodata .rodata.*) 500 *libdrivers__flash.a:flash_esp32.*(.rodata .rodata.*) 501 *libdrivers__serial.a:uart_esp32.*(.rodata .rodata.*) 502 *libzephyr.a:esp_memory_utils.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 503 504 /* [mapping:esp_psram] */ 505 *libzephyr.a:mmu_psram_flash.*(.rodata .rodata.*) 506 *libzephyr.a:esp_psram_impl_quad.*(.rodata .rodata.*) 507 508 /* [mapping:hal] */ 509 *libzephyr.a:mmu_hal.*(.rodata .rodata.*) 510 *libzephyr.a:spi_flash_hal_iram.*(.rodata .rodata.*) 511 *libzephyr.a:spi_flash_encrypt_hal_iram.*(.rodata .rodata.*) 512 *libzephyr.a:cache_utils.*(.rodata .rodata.*) 513 *libzephyr.a:cache_esp32.*(.rodata .rodata.*) 514 *libzephyr.a:cache_hal_esp32.*(.rodata .rodata.*) 515 *libzephyr.a:ledc_hal_iram.*(.rodata .rodata.*) 516 *libzephyr.a:i2c_hal_iram.*(.rodata .rodata.*) 517 *libzephyr.a:wdt_hal_iram.*(.rodata .rodata.*) 518 *libzephyr.a:systimer_hal.*(.rodata .rodata.*) 519 *libzephyr.a:spi_flash_hal_gpspi.*(.rodata .rodata.*) 520 521 /* [mapping:soc] */ 522 *libzephyr.a:lldesc.*(.rodata .rodata.*) 523 524 /* [mapping:log] */ 525 *(.rodata.esp_log_write) 526 *(.rodata.esp_log_timestamp) 527 *(.rodata.esp_log_early_timestamp) 528 *(.rodata.esp_log_impl_lock) 529 *(.rodata.esp_log_impl_lock_timeout) 530 *(.rodata.esp_log_impl_unlock) 531 532 /* [mapping:spi_flash] */ 533 *libzephyr.a:spi_flash_chip_boya.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 534 *libzephyr.a:spi_flash_chip_gd.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 535 *libzephyr.a:spi_flash_chip_generic.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 536 *libzephyr.a:spi_flash_chip_issi.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 537 *libzephyr.a:spi_flash_chip_mxic.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 538 *libzephyr.a:spi_flash_chip_mxic_opi.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 539 *libzephyr.a:spi_flash_chip_th.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 540 *libzephyr.a:spi_flash_chip_winbond.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 541 *libzephyr.a:memspi_host_driver.*(.rodata .rodata.*) 542 *libzephyr.a:flash_brownout_hook.*(.rodata .rodata.*) 543 *libzephyr.a:spi_flash_wrap.*(.rodata .rodata.*) 544 *libzephyr.a:spi_flash_hpm_enable.*(.rodata .rodata.*) 545 *libzephyr.a:flash_ops.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 546 547 /* [mapping:esp_mm] */ 548 *libzephyr.a:esp_cache.*(.rodata .rodata.*) 549 550 /* [mapping:esp_hw_support] */ 551 *(.rodata.esp_cpu_stall) 552 *(.rodata.esp_cpu_unstall) 553 *(.rodata.esp_cpu_reset) 554 *(.rodata.esp_cpu_wait_for_intr) 555 *(.rodata.esp_cpu_compare_and_set) 556 *(.rodata.esp_gpio_reserve_pins) 557 *(.rodata.esp_gpio_is_pin_reserved) 558 *(.rodata.rtc_vddsdio_get_config) 559 *(.rodata.rtc_vddsdio_set_config) 560 *libzephyr.a:esp_memory_utils.*(.rodata .rodata.*) 561 *libzephyr.a:rtc_clk.*(.rodata .rodata.*) 562 *libzephyr.a:rtc_clk_init.*(.rodata .rodata.*) 563 *libzephyr.a:systimer.*(.rodata .rodata.*) 564 *libzephyr.a:mspi_timing_config.*(.rodata .rodata.*) 565 *libzephyr.a:mspi_timing_tuning.*(.rodata .rodata.*) 566 *(.rodata.sar_periph_ctrl_power_enable) 567 568 *libzephyr.a:cache_esp32.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 569 *libzephyr.a:esp_cache.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 570 *libzephyr.a:esp_err.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 571 *libzephyr.a:i2c_hal_iram.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 572 *libzephyr.a:ledc_hal_iram.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 573 *libzephyr.a:mmu_hal.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 574 *libzephyr.a:spi_flash_encrypt_hal_iram.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 575 *libzephyr.a:spi_flash_hal.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 576 *libzephyr.a:spi_flash_hal_iram.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 577 *libzephyr.a:spi_flash_hal_common.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 578 *libzephyr.a:spi_hal_iram.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 579 *libzephyr.a:spi_slave_hal_iram.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 580 *libzephyr.a:flash_brownout_hook.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 581 *libzephyr.a:memspi_host_driver.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 582 *libzephyr.a:spi_flash_wrap.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 583 /* TODO: fix other socs */ 584 *libzephyr.a:heap_caps_zephyr.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 585 586 /* [mapping:esp_rom] */ 587 *libzephyr.a:esp_rom_spiflash.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 588 *libzephyr.a:esp_rom_systimer.*(.rodata .rodata.*) 589 *libzephyr.a:esp_rom_wdt.*(.rodata .rodata.*) 590 *libzephyr.a:esp_rom_efuse.*(.rodata .rodata.*) 591 592 KEEP(*(.jcr)) 593 *(.dram1 .dram1.*) 594 595 . = ALIGN(4); 596 #include <snippets-rwdata.ld> 597 . = ALIGN(4); 598 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) 599 600#ifdef CONFIG_ESP_SIMPLE_BOOT 601 .loader.data : 602 { 603 . = ALIGN(4); 604 _loader_data_start = ABSOLUTE(.); 605 *libzephyr.a:bootloader_esp32.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 606 *libzephyr.a:bootloader_clock_init.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 607 *libzephyr.a:bootloader_wdt.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 608 *libzephyr.a:bootloader_flash.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 609 *libzephyr.a:bootloader_efuse.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 610 611 *libzephyr.a:cpu_util.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 612 *libzephyr.a:clk.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 613 *libzephyr.a:esp_clk.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 614 *libzephyr.a:rtc_clk_init.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 615 *libzephyr.a:rtc_time.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 616 *libzephyr.a:efuse_hal.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 617 *libzephyr.a:cpu_region_protect.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 618 619 *libzephyr.a:periph_ctrl.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 620 621 *libzephyr.a:esp_flash_api.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 622 *libzephyr.a:esp_flash_spi_init.*(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.*) 623 624 . = ALIGN(4); 625 _loader_data_end = ABSOLUTE(.); 626 } GROUP_DATA_LINK_IN(DRAM_REGION, ROMABLE_REGION) 627#endif /* CONFIG_ESP_SIMPLE_BOOT */ 628 629 #include <snippets-data-sections.ld> 630 #include <zephyr/linker/common-ram.ld> 631 #include <snippets-ram-sections.ld> 632 #include <zephyr/linker/cplusplus-ram.ld> 633 634 /* logging sections should be placed in RAM area to avoid flash cache disabled issues */ 635 #pragma push_macro("GROUP_ROM_LINK_IN") 636 #undef GROUP_ROM_LINK_IN 637 #define GROUP_ROM_LINK_IN GROUP_DATA_LINK_IN 638 #include <zephyr/linker/common-rom/common-rom-logging.ld> 639 #pragma pop_macro("GROUP_ROM_LINK_IN") 640 641 .dram0.end : 642 { 643 __data_end = ABSOLUTE(.); 644 _data_end = ABSOLUTE(.); 645 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) 646 647 /* Shared RAM */ 648 .dram0.bss (NOLOAD) : 649 { 650 . = ALIGN (8); 651 _bss_start = ABSOLUTE(.); /* required by bluetooth library */ 652 __bss_start = ABSOLUTE(.); 653 654 _btdm_bss_start = ABSOLUTE(.); 655 *libbtdm_app.a:(.bss .bss.* COMMON) 656 . = ALIGN (4); 657 _btdm_bss_end = ABSOLUTE(.); 658 659 /* Buffer for system heap should be placed in dram0_0_seg */ 660 *libkernel.a:mempool.*(.noinit.kheap_buf__system_heap .noinit.*.kheap_buf__system_heap) 661 662 *(.dynsbss) 663 *(.sbss) 664 *(.sbss.*) 665 *(.gnu.linkonce.sb.*) 666 *(.scommon) 667 *(.sbss2) 668 *(.sbss2.*) 669 *(.gnu.linkonce.sb2.*) 670 *(.dynbss) 671 *(.bss) 672 *(.bss.*) 673 *(.share.mem) 674 *(.gnu.linkonce.b.*) 675 *(COMMON) 676 . = ALIGN (8); 677 __bss_end = ABSOLUTE(.); 678 _bss_end = ABSOLUTE(.); 679 } GROUP_LINK_IN(RAMABLE_REGION) 680 681 .dram0.noinit (NOLOAD) : 682 { 683 . = ALIGN (4); 684 __dram_noinit_start = ABSOLUTE(.); 685#ifdef CONFIG_ESP32_WIFI_NET_ALLOC_SPIRAM 686 *(EXCLUDE_FILE( 687 *libdrivers__wifi.a:* 688 *libsubsys__net__l2__ethernet.a:* 689 *libsubsys__net__lib__config.a:* 690 *libsubsys__net__ip.a:* 691 *libsubsys__net.a:* ) .noinit) 692 *(EXCLUDE_FILE( 693 *libdrivers__wifi.a:* 694 *libsubsys__net__l2__ethernet.a:* 695 *libsubsys__net__lib__config.a:* 696 *libsubsys__net__ip.a:* 697 *libsubsys__net.a:* ) .noinit.*) 698#else 699 *(.noinit) 700 *(.noinit.*) 701#endif /* CONFIG_ESP32_WIFI_NET_ALLOC_SPIRAM */ 702 __dram_noinit_end = ABSOLUTE(.); 703 . = ALIGN (4); 704 } GROUP_LINK_IN(RAMABLE_REGION) 705 706 /* Provide total SRAM usage, including IRAM and DRAM */ 707 _image_ram_start = _dram_data_start; 708 #include <zephyr/linker/ram-end.ld> 709 _image_ram_size += _iram_end - _init_start; 710 711 ASSERT(((_end - ORIGIN(dram0_0_seg)) <= LENGTH(dram0_0_seg)), "DRAM data does not fit.") 712 713 /* --- DRAM END --- */ 714 715 /* --- SPIRAM BEGIN --- */ 716 717#ifdef CONFIG_ESP_SPIRAM 718 .ext_ram.bss (NOLOAD): 719 { 720 _ext_ram_start = ABSOLUTE(.); 721 _ext_ram_noinit_start = ABSOLUTE(.); 722 723#ifdef CONFIG_ESP32_WIFI_NET_ALLOC_SPIRAM 724 *libdrivers__wifi.a:(.noinit .noinit.*) 725 *libsubsys__net__l2__ethernet.a:(.noinit .noinit.*) 726 *libsubsys__net__lib__config.a:(.noinit .noinit.*) 727 *libsubsys__net__ip.a:(.noinit .noinit.*) 728 *libsubsys__net.a:(.noinit .noinit.*) 729#endif /* CONFIG_ESP32_WIFI_NET_ALLOC_SPIRAM */ 730 . = ALIGN(16); 731 _ext_ram_noinit_end = ABSOLUTE(.); 732 733 _ext_ram_bss_start = ABSOLUTE(.); 734 *(.ext_ram.bss*) 735 . = ALIGN(16); 736 _ext_ram_bss_end = ABSOLUTE(.); 737 738 _spiram_heap_start = ABSOLUTE(.); 739 . = . + CONFIG_ESP_SPIRAM_HEAP_SIZE; 740 . = ALIGN(4); 741 742 _ext_ram_end = ABSOLUTE(.); 743 } GROUP_LINK_IN(ext_ram_seg) 744#endif /* CONFIG_ESP_SPIRAM */ 745 746 /* --- SPIRAM END --- */ 747 748 /* --- RODATA BEGIN --- */ 749 750 .flash.rodata_dummy (NOLOAD) : 751 { 752 . = ALIGN(CACHE_ALIGN); 753 } GROUP_LINK_IN(ROMABLE_REGION) 754 755 _image_drom_start = LOADADDR(.flash.rodata); 756 _image_drom_size = LOADADDR(.flash.rodata_end) - LOADADDR(.flash.rodata); 757 _image_drom_vaddr = ADDR(.flash.rodata); 758 759 .flash.rodata : ALIGN(CACHE_ALIGN) 760 { 761 _rodata_start = ABSOLUTE(.); 762 _rodata_reserved_start = ABSOLUTE(.); 763 764 . = ALIGN(4); 765 #include <snippets-rodata.ld> 766 . = ALIGN(4); 767 768 *(.rodata .rodata.* .sdata2 .sdata2.* .srodata .srodata.* ) 769 770 _flash_rodata_start = ABSOLUTE(.); 771 __rodata_region_start = ABSOLUTE(.); 772 773 *(.irom1.text) /* catch stray ICACHE_RODATA_ATTR */ 774 *(.gnu.linkonce.r.*) 775 *(.rodata1) 776 __XT_EXCEPTION_TABLE_ = ABSOLUTE(.); 777 *(.xt_except_table) 778 *(.gcc_except_table .gcc_except_table.*) 779 *(.gnu.linkonce.e.*) 780 *(.gnu.version_r) 781 . = (. + 3) & ~ 3; 782 __eh_frame = ABSOLUTE(.); 783 KEEP(*(.eh_frame)) 784 . = (. + 7) & ~ 3; 785 786 /* C++ exception handlers table: */ 787 __XT_EXCEPTION_DESCS_ = ABSOLUTE(.); 788 *(.xt_except_desc) 789 *(.gnu.linkonce.h.*) 790 __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.); 791 *(.xt_except_desc_end) 792 *(.dynamic) 793 *(.gnu.version_d) 794 . = ALIGN(4); 795 __rodata_region_end = ABSOLUTE(.); 796 /* Literals are also RO data. */ 797 _lit4_start = ABSOLUTE(.); 798 *(*.lit4) 799 *(.lit4.*) 800 *(.gnu.linkonce.lit4.*) 801 _lit4_end = ABSOLUTE(.); 802 . = ALIGN(4); 803 804 *(.rodata_wlog) 805 *(.rodata_wlog*) 806 . = ALIGN(4); 807 } GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION) 808 809 #include <zephyr/linker/cplusplus-rom.ld> 810 #include <zephyr/linker/common-rom/common-rom-init.ld> 811 #include <zephyr/linker/common-rom/common-rom-kernel-devices.ld> 812 #include <zephyr/linker/common-rom/common-rom-ztest.ld> 813 #include <zephyr/linker/common-rom/common-rom-net.ld> 814 #include <zephyr/linker/common-rom/common-rom-bt.ld> 815 #include <zephyr/linker/common-rom/common-rom-debug.ld> 816 #include <zephyr/linker/common-rom/common-rom-misc.ld> 817 #include <zephyr/linker/thread-local-storage.ld> 818 #include <snippets-sections.ld> 819 820 /* Create an explicit section at the end of all the data that shall be mapped into drom. 821 * This is used to calculate the size of the _image_drom_size variable */ 822 .flash.rodata_end : 823 { 824 /* This is a symbol marking the flash.rodata end, this 825 * can be used for mmu driver to maintain virtual address 826 * We don't need to include the noload rodata in this section 827 */ 828 . = ALIGN(CONFIG_MMU_PAGE_SIZE); 829 830 _rodata_end = ABSOLUTE(.); 831 _rodata_reserved_end = ABSOLUTE(.); 832 } GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION) 833 834 /* --- RODATA END --- */ 835 836 /* --- FLASH TEXT BEGIN --- */ 837 838 .flash.text_dummy (NOLOAD): 839 { 840 . = ALIGN(CACHE_ALIGN); 841 } GROUP_LINK_IN(ROMABLE_REGION) 842 843 _image_irom_start = LOADADDR(.flash.text); 844 _image_irom_size = LOADADDR(.flash.text) + SIZEOF(.flash.text) - _image_irom_start; 845 _image_irom_vaddr = ADDR(.flash.text); 846 847 .flash.text : ALIGN(CACHE_ALIGN) 848 { 849 _stext = .; 850 _instruction_reserved_start = ABSOLUTE(.); /* This is a symbol marking the flash.text start, this can be used for mmu driver to maintain virtual address */ 851 _text_start = ABSOLUTE(.); 852 __text_region_start = ABSOLUTE(.); 853 __rom_region_start = ABSOLUTE(.); 854 855#ifndef CONFIG_ESP32_WIFI_IRAM_OPT 856 *libnet80211.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiextrairam .wifiextrairam.*) 857 *libpp.a:( .wifi0iram .wifi0iram.* .wifislpiram .wifislpiram.* .wifiorslpiram .wifiorslpiram.* .wifiextrairam .wifiextrairam.*) 858#endif 859 860#ifndef CONFIG_ESP32_WIFI_RX_IRAM_OPT 861 *libnet80211.a:( .wifirxiram .wifirxiram.* .wifislprxiram .wifislprxiram.*) 862 *libpp.a:( .wifirxiram .wifirxiram.* .wifislprxiram .wifislprxiram.*) 863#endif 864 865 *(.fini.literal) 866 *(.fini) 867 868 *(.literal .text .literal.* .text.*) 869 . = ALIGN(4); 870 _text_end = ABSOLUTE(.); 871 _instruction_reserved_end = ABSOLUTE(.); /* This is a symbol marking the flash.text end, this can be used for mmu driver to maintain virtual address */ 872 __text_region_end = ABSOLUTE(.); 873 __rom_region_end = ABSOLUTE(.); 874 _etext = .; 875 } GROUP_DATA_LINK_IN(FLASH_CODE_REGION, ROMABLE_REGION) 876 877 /* --- FLASH TEXT END --- */ 878 879 /* --- XTENSA GLUE AND DEBUG BEGIN --- */ 880 881#include <zephyr/linker/debug-sections.ld> 882 883 .xtensa.info 0 : { *(.xtensa.info) } 884 .xt.insn 0 : 885 { 886 KEEP (*(.xt.insn)) 887 KEEP (*(.gnu.linkonce.x.*)) 888 } 889 .xt.prop 0 : 890 { 891 KEEP (*(.xt.prop)) 892 KEEP (*(.xt.prop.*)) 893 KEEP (*(.gnu.linkonce.prop.*)) 894 } 895 .xt.lit 0 : 896 { 897 KEEP (*(.xt.lit)) 898 KEEP (*(.xt.lit.*)) 899 KEEP (*(.gnu.linkonce.p.*)) 900 } 901 .xt.profile_range 0 : 902 { 903 KEEP (*(.xt.profile_range)) 904 KEEP (*(.gnu.linkonce.profile_range.*)) 905 } 906 .xt.profile_ranges 0 : 907 { 908 KEEP (*(.xt.profile_ranges)) 909 KEEP (*(.gnu.linkonce.xt.profile_ranges.*)) 910 } 911 .xt.profile_files 0 : 912 { 913 KEEP (*(.xt.profile_files)) 914 KEEP (*(.gnu.linkonce.xt.profile_files.*)) 915 } 916 917#ifdef CONFIG_GEN_ISR_TABLES 918#include <zephyr/linker/intlist.ld> 919#endif 920 921} 922 923 /* --- XTENSA GLUE AND DEBUG END --- */ 924 925#ifdef CONFIG_ESP_SPIRAM 926ASSERT(((_ext_ram_end - _ext_ram_start) <= CONFIG_ESP_SPIRAM_SIZE), 927 "External SPIRAM overflowed.") 928#endif /* CONFIG_ESP_SPIRAM */ 929