diff options
| author | seteiro <[email protected]> | 2026-10-10 20:34:34 +0800 |
|---|---|---|
| committer | Rbb666 <[email protected]> | 2026-10-11 16:11:07 +0800 |
| commit | 3577e7a6ed0f183534e207179de5251e155fd49e (patch) | |
| tree | 424c4f10acd38b0807e7cfe25db1af1e92a44136 /components/cplusplus/cpp11 | |
| parent | 33b1dd58bafbd850e982191b5f138cf8d7578e61 (diff) | |
[components][libc] run .init_array constructors in cplusplus_system_init
Newer GCC emits C++ global constructors into .init_array, which many
linker scripts keep outside [__ctors_start__, __ctors_end__), so they
never ran. Walk __init_array_start/__init_array_end (weak) as well,
skipping entries already covered by the ctors range.
Add RT_USING_CPP_CRT_INIT for ports whose startup runtime already runs
.init_array, default on for the simulator. With it set, only the
.init_array walk is skipped; the ctors range is still walked.
Renesas RA/RA_WIRELESS/RZ families select it when C++ is enabled: FSP
SystemInit() already walks .init_array, so boards whose linker script
only provides __init_array_* would run constructors twice. Boards that
fold .init_array into the ctors range (ra6m3-hmi-board, ra8d1, rz)
still run them once via RT-Thread.
Also source env.sh and restore RTT_EXEC_PATH in ToolsCI project generate
and dist steps so scons is on PATH (exit 127) and the ARM toolchain path
is not overwritten by env.sh.
Fixes #11778
Diffstat (limited to 'components/cplusplus/cpp11')
0 files changed, 0 insertions, 0 deletions
