diff --git a/components/esp_system/ld/elf_misc.ld.in b/components/esp_system/ld/elf_misc.ld.in index 5f15c0a8f7..84de2e16eb 100644 --- a/components/esp_system/ld/elf_misc.ld.in +++ b/components/esp_system/ld/elf_misc.ld.in @@ -55,10 +55,10 @@ */ *(.rela.*) *(.got .got.plt) /* TODO: GCC-382 */ -#if !(CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME) +#if !EH_FRAME_LINKING_ENABLED *(.eh_frame_hdr) *(.eh_frame) -#endif // !(CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME) +#endif // !EH_FRAME_LINKING_ENABLED } #elif CONFIG_IDF_TARGET_ARCH_XTENSA /** @@ -79,9 +79,9 @@ { *(.fini) *(.eh_frame_hdr) -#if !CONFIG_COMPILER_CXX_EXCEPTIONS +#if !EH_FRAME_LINKING_ENABLED *(.eh_frame) -#endif // !CONFIG_COMPILER_CXX_EXCEPTIONS +#endif // !EH_FRAME_LINKING_ENABLED } #else #error "Target architecture is not supported!" diff --git a/components/esp_system/ld/esp32/sections.ld.in b/components/esp_system/ld/esp32/sections.ld.in index 066994b743..17b6fc276e 100644 --- a/components/esp_system/ld/esp32/sections.ld.in +++ b/components/esp_system/ld/esp32/sections.ld.in @@ -353,7 +353,7 @@ SECTIONS __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.); *(.xt_except_desc_end) -#if CONFIG_COMPILER_CXX_EXCEPTIONS +#if EH_FRAME_LINKING_ENABLED ALIGNED_SYMBOL(4, __eh_frame) KEEP(*(.eh_frame)) /** @@ -361,7 +361,7 @@ SECTIONS * (see __FRAME_END__ in libgcc sources), it is manually provided here. */ LONG(0); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS +#endif // EH_FRAME_LINKING_ENABLED /** * C++ constructor tables. diff --git a/components/esp_system/ld/esp32c2/sections.ld.in b/components/esp_system/ld/esp32c2/sections.ld.in index d6cd375783..529e5ee5e2 100644 --- a/components/esp_system/ld/esp32c2/sections.ld.in +++ b/components/esp_system/ld/esp32c2/sections.ld.in @@ -227,19 +227,18 @@ SECTIONS _esp_system_init_fn_array_end = ABSOLUTE(.); _rodata_end = ABSOLUTE(.); - . = ALIGN(ALIGNOF(.eh_frame_hdr)); + . = ALIGN(ALIGNOF(SECTION_AFTER_FLASH_RODATA)); } > default_rodata_seg - ASSERT_SECTIONS_GAP(.flash.rodata, .eh_frame_hdr) + ASSERT_SECTIONS_GAP(.flash.rodata, SECTION_AFTER_FLASH_RODATA) +#if EH_FRAME_LINKING_ENABLED .eh_frame_hdr : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame_hdr) KEEP (*(.eh_frame_hdr)) __eh_frame_hdr_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.eh_frame)); } > default_rodata_seg @@ -247,7 +246,6 @@ SECTIONS .eh_frame : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame) KEEP (*(.eh_frame)) @@ -258,11 +256,11 @@ SECTIONS LONG(0); __eh_frame_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.flash.tdata)); } > default_rodata_seg ASSERT_SECTIONS_GAP(.eh_frame, .flash.tdata) +#endif // EH_FRAME_LINKING_ENABLED .flash.tdata : { diff --git a/components/esp_system/ld/esp32c3/sections.ld.in b/components/esp_system/ld/esp32c3/sections.ld.in index 1077f6966d..e4bdd72eef 100644 --- a/components/esp_system/ld/esp32c3/sections.ld.in +++ b/components/esp_system/ld/esp32c3/sections.ld.in @@ -345,19 +345,18 @@ SECTIONS _esp_system_init_fn_array_end = ABSOLUTE(.); _rodata_end = ABSOLUTE(.); - . = ALIGN(ALIGNOF(.eh_frame_hdr)); + . = ALIGN(ALIGNOF(SECTION_AFTER_FLASH_RODATA)); } > default_rodata_seg - ASSERT_SECTIONS_GAP(.flash.rodata, .eh_frame_hdr) + ASSERT_SECTIONS_GAP(.flash.rodata, SECTION_AFTER_FLASH_RODATA) +#if EH_FRAME_LINKING_ENABLED .eh_frame_hdr : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame_hdr) KEEP (*(.eh_frame_hdr)) __eh_frame_hdr_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.eh_frame)); } > default_rodata_seg @@ -365,7 +364,6 @@ SECTIONS .eh_frame : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame) KEEP (*(.eh_frame)) @@ -376,11 +374,11 @@ SECTIONS LONG(0); __eh_frame_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.flash.tdata)); } > default_rodata_seg ASSERT_SECTIONS_GAP(.eh_frame, .flash.tdata) +#endif // EH_FRAME_LINKING_ENABLED .flash.tdata : { diff --git a/components/esp_system/ld/esp32c5/sections.ld.in b/components/esp_system/ld/esp32c5/sections.ld.in index 7ebf3390dc..9e91ed9e7e 100644 --- a/components/esp_system/ld/esp32c5/sections.ld.in +++ b/components/esp_system/ld/esp32c5/sections.ld.in @@ -378,9 +378,9 @@ SECTIONS _esp_system_init_fn_array_end = ABSOLUTE(.); _rodata_end = ABSOLUTE(.); - . = ALIGN(ALIGNOF(.eh_frame_hdr)); + . = ALIGN(ALIGNOF(SECTION_AFTER_FLASH_RODATA)); } > default_rodata_seg - ASSERT_SECTIONS_GAP(.flash.rodata, .eh_frame_hdr) + ASSERT_SECTIONS_GAP(.flash.rodata, SECTION_AFTER_FLASH_RODATA) /* External RAM */ /** @@ -421,15 +421,14 @@ SECTIONS } > extern_ram_seg #endif //CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY +#if EH_FRAME_LINKING_ENABLED .eh_frame_hdr : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame_hdr) KEEP (*(.eh_frame_hdr)) __eh_frame_hdr_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.eh_frame)); } > default_rodata_seg @@ -437,7 +436,6 @@ SECTIONS .eh_frame : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame) KEEP (*(.eh_frame)) @@ -448,11 +446,11 @@ SECTIONS LONG(0); __eh_frame_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.flash.tdata)); } > default_rodata_seg ASSERT_SECTIONS_GAP(.eh_frame, .flash.tdata) +#endif // EH_FRAME_LINKING_ENABLED .flash.tdata : { diff --git a/components/esp_system/ld/esp32c6/sections.ld.in b/components/esp_system/ld/esp32c6/sections.ld.in index 407d34390a..e89336d044 100644 --- a/components/esp_system/ld/esp32c6/sections.ld.in +++ b/components/esp_system/ld/esp32c6/sections.ld.in @@ -394,19 +394,18 @@ SECTIONS _esp_system_init_fn_array_end = ABSOLUTE(.); _rodata_end = ABSOLUTE(.); - . = ALIGN(ALIGNOF(.eh_frame_hdr)); + . = ALIGN(ALIGNOF(SECTION_AFTER_FLASH_RODATA)); } > default_rodata_seg - ASSERT_SECTIONS_GAP(.flash.rodata, .eh_frame_hdr) + ASSERT_SECTIONS_GAP(.flash.rodata, SECTION_AFTER_FLASH_RODATA) +#if EH_FRAME_LINKING_ENABLED .eh_frame_hdr : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame_hdr) KEEP (*(.eh_frame_hdr)) __eh_frame_hdr_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.eh_frame)); } > default_rodata_seg @@ -414,7 +413,6 @@ SECTIONS .eh_frame : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame) KEEP (*(.eh_frame)) @@ -425,11 +423,11 @@ SECTIONS LONG(0); __eh_frame_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.flash.tdata)); } > default_rodata_seg ASSERT_SECTIONS_GAP(.eh_frame, .flash.tdata) +#endif // EH_FRAME_LINKING_ENABLED .flash.tdata : { diff --git a/components/esp_system/ld/esp32c61/sections.ld.in b/components/esp_system/ld/esp32c61/sections.ld.in index f69dd45f7f..f1e6972431 100644 --- a/components/esp_system/ld/esp32c61/sections.ld.in +++ b/components/esp_system/ld/esp32c61/sections.ld.in @@ -236,10 +236,9 @@ SECTIONS _esp_system_init_fn_array_end = ABSOLUTE(.); _rodata_end = ABSOLUTE(.); - . = ALIGN(ALIGNOF(.eh_frame_hdr)); + . = ALIGN(ALIGNOF(SECTION_AFTER_FLASH_RODATA)); } > default_rodata_seg - ASSERT_SECTIONS_GAP(.flash.rodata, .eh_frame_hdr) - + ASSERT_SECTIONS_GAP(.flash.rodata, SECTION_AFTER_FLASH_RODATA) /* External RAM */ /** @@ -280,15 +279,14 @@ SECTIONS } > extern_ram_seg #endif //CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY +#if EH_FRAME_LINKING_ENABLED .eh_frame_hdr : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame_hdr) KEEP (*(.eh_frame_hdr)) __eh_frame_hdr_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.eh_frame)); } > default_rodata_seg @@ -296,7 +294,6 @@ SECTIONS .eh_frame : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame) KEEP (*(.eh_frame)) @@ -307,11 +304,11 @@ SECTIONS LONG(0); __eh_frame_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.flash.tdata)); } > default_rodata_seg ASSERT_SECTIONS_GAP(.eh_frame, .flash.tdata) +#endif // EH_FRAME_LINKING_ENABLED .flash.tdata : { diff --git a/components/esp_system/ld/esp32h2/sections.ld.in b/components/esp_system/ld/esp32h2/sections.ld.in index 5fb84f6b3b..6282646923 100644 --- a/components/esp_system/ld/esp32h2/sections.ld.in +++ b/components/esp_system/ld/esp32h2/sections.ld.in @@ -383,19 +383,18 @@ SECTIONS _esp_system_init_fn_array_end = ABSOLUTE(.); _rodata_end = ABSOLUTE(.); - . = ALIGN(ALIGNOF(.eh_frame_hdr)); + . = ALIGN(ALIGNOF(SECTION_AFTER_FLASH_RODATA)); } > default_rodata_seg - ASSERT_SECTIONS_GAP(.flash.rodata, .eh_frame_hdr) + ASSERT_SECTIONS_GAP(.flash.rodata, SECTION_AFTER_FLASH_RODATA) +#if EH_FRAME_LINKING_ENABLED .eh_frame_hdr : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame_hdr) KEEP (*(.eh_frame_hdr)) __eh_frame_hdr_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.eh_frame)); } > default_rodata_seg @@ -403,7 +402,6 @@ SECTIONS .eh_frame : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame) KEEP (*(.eh_frame)) @@ -414,11 +412,11 @@ SECTIONS LONG(0); __eh_frame_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.flash.tdata)); } > default_rodata_seg ASSERT_SECTIONS_GAP(.eh_frame, .flash.tdata) +#endif // EH_FRAME_LINKING_ENABLED .flash.tdata : { diff --git a/components/esp_system/ld/esp32p4/sections.ld.in b/components/esp_system/ld/esp32p4/sections.ld.in index 0a48714d3e..e1de398dd1 100644 --- a/components/esp_system/ld/esp32p4/sections.ld.in +++ b/components/esp_system/ld/esp32p4/sections.ld.in @@ -400,19 +400,18 @@ SECTIONS _esp_system_init_fn_array_end = ABSOLUTE(.); _rodata_end = ABSOLUTE(.); - . = ALIGN(ALIGNOF(.eh_frame_hdr)); + . = ALIGN(ALIGNOF(SECTION_AFTER_FLASH_RODATA)); } > rodata_seg_low - ASSERT_SECTIONS_GAP(.flash.init_array, .eh_frame_hdr) + ASSERT_SECTIONS_GAP(.flash.init_array, SECTION_AFTER_FLASH_RODATA) +#if EH_FRAME_LINKING_ENABLED .eh_frame_hdr : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame_hdr) KEEP (*(.eh_frame_hdr)) __eh_frame_hdr_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.eh_frame)); } > rodata_seg_low @@ -420,7 +419,6 @@ SECTIONS .eh_frame : { -#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME ALIGNED_SYMBOL(4, __eh_frame) KEEP (*(.eh_frame)) @@ -431,11 +429,11 @@ SECTIONS LONG(0); __eh_frame_end = ABSOLUTE(.); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME . = ALIGN(ALIGNOF(.flash.tdata)); } > rodata_seg_low ASSERT_SECTIONS_GAP(.eh_frame, .flash.tdata) +#endif // EH_FRAME_LINKING_ENABLED .flash.tdata : { diff --git a/components/esp_system/ld/esp32s2/sections.ld.in b/components/esp_system/ld/esp32s2/sections.ld.in index 1b6e992da6..fee3ceedeb 100644 --- a/components/esp_system/ld/esp32s2/sections.ld.in +++ b/components/esp_system/ld/esp32s2/sections.ld.in @@ -353,7 +353,7 @@ SECTIONS __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.); *(.xt_except_desc_end) -#if CONFIG_COMPILER_CXX_EXCEPTIONS +#if EH_FRAME_LINKING_ENABLED ALIGNED_SYMBOL(4, __eh_frame) KEEP(*(.eh_frame)) /** @@ -361,7 +361,7 @@ SECTIONS * (see __FRAME_END__ in libgcc sources), it is manually provided here. */ LONG(0); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS +#endif // EH_FRAME_LINKING_ENABLED /** * C++ constructor tables. diff --git a/components/esp_system/ld/esp32s3/sections.ld.in b/components/esp_system/ld/esp32s3/sections.ld.in index 499a117a98..38fb25911f 100644 --- a/components/esp_system/ld/esp32s3/sections.ld.in +++ b/components/esp_system/ld/esp32s3/sections.ld.in @@ -363,7 +363,7 @@ SECTIONS __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.); *(.xt_except_desc_end) -#if CONFIG_COMPILER_CXX_EXCEPTIONS +#if EH_FRAME_LINKING_ENABLED ALIGNED_SYMBOL(4, __eh_frame) KEEP(*(.eh_frame)) /** @@ -371,7 +371,7 @@ SECTIONS * (see __FRAME_END__ in libgcc sources), it is manually provided here. */ LONG(0); -#endif // CONFIG_COMPILER_CXX_EXCEPTIONS +#endif // EH_FRAME_LINKING_ENABLED /** * C++ constructor tables. diff --git a/components/esp_system/ld/ld.common b/components/esp_system/ld/ld.common index ca35c79094..a4a9b4e892 100644 --- a/components/esp_system/ld/ld.common +++ b/components/esp_system/ld/ld.common @@ -78,3 +78,13 @@ ASSERT((ADDR(NEXT_SECTION) == ADDR(PREV_SECTION) + SIZEOF(PREV_SECTION)), \ #define ALIGNED_SYMBOL(X, SYMBOL) \ \n . = ALIGN(X); \ \n SYMBOL = ABSOLUTE(.); + +#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME +#define EH_FRAME_LINKING_ENABLED 1 +#endif + +#if EH_FRAME_LINKING_ENABLED +#define SECTION_AFTER_FLASH_RODATA .eh_frame_hdr +#else +#define SECTION_AFTER_FLASH_RODATA .flash.tdata +#endif