mirror of
https://github.com/espressif/esp-idf.git
synced 2025-11-19 17:00:20 +01:00
feat(esp_system): switch to standard __libc_init_array initialization
Initially, ESP-IDF used the do_global_ctors() function to run global
constructors. This was done to accommodate Xtensa targets that emit
.ctors.* sections, which are ordered in descending order.
For RISC-V, compilation used .init_array.* sections, which are designed
to have ascending order. Priority constructors in .init_array.* sections
were correctly processed in ascending order. However, non-priority
.init_array section was processed in descending order, as it was done
for Xtensa .ctors.
Starting with ESP-IDF v6.0, the implementation switched to the standard
LibC behavior (__libc_init_array()), which processes both priority and
non-priority constructors in ascending order.
To achieve this, a breaking changes were introduced:
- Xtensa .ctors.* priority entries converted to .init_array.* format
(ascending), to be passed to __libc_init_array().
- Processing order of non-priority .init_array and .ctors sections was
changed from descending to ascending.
Also, this change introduces .preinit_array for linking. This may be
needed for some C++ or sanitizer features.
Related to https://github.com/espressif/esp-idf/issues/15529
This commit is contained in:
@@ -11,10 +11,10 @@ from pytest_embedded_idf.utils import idf_parametrize
|
||||
@idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target'])
|
||||
def test_plugins(dut: Dut) -> None:
|
||||
log_text = textwrap.dedent(r"""
|
||||
Nihao plugin performing self-registration...
|
||||
Successfully registered plugin 'Nihao'
|
||||
Hello plugin performing self-registration...
|
||||
Successfully registered plugin 'Hello'
|
||||
Nihao plugin performing self-registration...
|
||||
Successfully registered plugin 'Nihao'
|
||||
main_task: Calling app_main()
|
||||
List of plugins:
|
||||
- Plugin 'Hello'
|
||||
|
||||
Reference in New Issue
Block a user