nuttx/arch/arm
Marco Casaroli ebabdd57f3 arch/arm: Keep GCC from making tail calls in an FDPIC module.
With -mfdpic and -mlong-calls, GCC turns a call to an imported function
in tail position into "ldr r3, [r9, #off]; bx r3".  The GOT slot holds
the address of the function descriptor, so the branch goes to the
descriptor in RAM instead of through it, and the core faults.  A normal
call loads the code address and the data base from the descriptor
first.  GCC 13.2 and 15.3 both do this.

Only an optimized build makes tail calls.  The C++ library of
apps/testing/fs/xipfs then faults in its constructor, which ends in a
call to syslog(), and the test stops at "stage the C++ module".

Pass -fno-optimize-sibling-calls with the other FDPIC flags, in the make
build and the CMake build.

Assisted-by: Claude Code:claude-opus-5-5
Signed-off-by: Marco Casaroli <marco.casaroli@gmail.com>
2026-10-07 11:45:09 -03:00
..
include arch/arm/imxrt: ROM api support 2026-10-07 08:20:12 -03:00
src arch/arm: Keep GCC from making tail calls in an FDPIC module. 2026-10-07 11:45:09 -03:00
CMakeLists.txt
Kconfig arch/arm/ra8m1: Add DTC and per-instance SCI FIFO/DTC/termios support 2026-10-06 16:56:58 -03:00