mirror of
https://github.com/espressif/esp-idf.git
synced 2025-10-06 21:25:02 +00:00

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
32 lines
1.0 KiB
Python
32 lines
1.0 KiB
Python
# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
|
# SPDX-License-Identifier: CC0-1.0
|
|
import textwrap
|
|
|
|
import pytest
|
|
from pytest_embedded import Dut
|
|
from pytest_embedded_idf.utils import idf_parametrize
|
|
|
|
|
|
@pytest.mark.generic
|
|
@idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target'])
|
|
def test_plugins(dut: Dut) -> None:
|
|
log_text = textwrap.dedent(r"""
|
|
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'
|
|
- Plugin 'Nihao'
|
|
Calling greet function of plugin 'Hello'...
|
|
Hello, World!
|
|
Done with greet function of plugin 'Hello'.
|
|
Calling greet function of plugin 'Nihao'...
|
|
你好 World!
|
|
Done with greet function of plugin 'Nihao'.
|
|
""").strip('\n')
|
|
|
|
for line in log_text.split('\n'):
|
|
dut.expect_exact(line.encode('utf-8'))
|