fix(build): Fixed constructors placement by Clang for Xtensa

By default Clang puts constructors into '.init_array'.
Close https://github.com/espressif/esp-idf/issues/17990
This commit is contained in:
Alexey Gerenkov
2025-12-08 19:44:53 +03:00
parent e751ec1b1c
commit c79d304c4d
3 changed files with 15 additions and 0 deletions
@@ -352,8 +352,13 @@ SECTIONS
KEEP (*(.preinit_array))
__preinit_array_end = ABSOLUTE(.);
ALIGNED_SYMBOL(4, __init_array_start)
#if CONFIG_IDF_TOOLCHAIN_CLANG
KEEP (*(SORT_BY_INIT_PRIORITY(EXCLUDE_FILE (*crtend.* *crtbegin.*) .init_array.*)))
KEEP (*(EXCLUDE_FILE (*crtend.* *crtbegin.*) .init_array))
#else
KEEP (*(SORT_BY_INIT_PRIORITY(EXCLUDE_FILE (*crtend.* *crtbegin.*) .ctors.*)))
KEEP (*(EXCLUDE_FILE (*crtend.* *crtbegin.*) .ctors))
#endif
__init_array_end = ABSOLUTE(.);
__bothinit_array_end = ABSOLUTE(.);
@@ -356,8 +356,13 @@ SECTIONS
KEEP (*(.preinit_array))
__preinit_array_end = ABSOLUTE(.);
ALIGNED_SYMBOL(4, __init_array_start)
#if CONFIG_IDF_TOOLCHAIN_CLANG
KEEP (*(SORT_BY_INIT_PRIORITY(EXCLUDE_FILE (*crtend.* *crtbegin.*) .init_array.*)))
KEEP (*(EXCLUDE_FILE (*crtend.* *crtbegin.*) .init_array))
#else
KEEP (*(SORT_BY_INIT_PRIORITY(EXCLUDE_FILE (*crtend.* *crtbegin.*) .ctors.*)))
KEEP (*(EXCLUDE_FILE (*crtend.* *crtbegin.*) .ctors))
#endif
__init_array_end = ABSOLUTE(.);
__bothinit_array_end = ABSOLUTE(.);
@@ -365,8 +365,13 @@ SECTIONS
KEEP (*(.preinit_array))
__preinit_array_end = ABSOLUTE(.);
ALIGNED_SYMBOL(4, __init_array_start)
#if CONFIG_IDF_TOOLCHAIN_CLANG
KEEP (*(SORT_BY_INIT_PRIORITY(EXCLUDE_FILE (*crtend.* *crtbegin.*) .init_array.*)))
KEEP (*(EXCLUDE_FILE (*crtend.* *crtbegin.*) .init_array))
#else
KEEP (*(SORT_BY_INIT_PRIORITY(EXCLUDE_FILE (*crtend.* *crtbegin.*) .ctors.*)))
KEEP (*(EXCLUDE_FILE (*crtend.* *crtbegin.*) .ctors))
#endif
__init_array_end = ABSOLUTE(.);
__bothinit_array_end = ABSOLUTE(.);