nuttx-apps/tools
Huang Qi efcfd87b44 tools/Rust: Add support for panic_immediate_abort
Summary:
- Added support for `panic_immediate_abort` in Rust builds, which causes the system to abort immediately on panic instead of unwinding the stack
- Enabled `-Zbuild-std-features=panic_immediate_abort` flag for release builds when `CONFIG_DEBUG_FULLOPT` is set
- Updated both CMake and Makefile build systems to include the new flag

Impact:
- Significantly reduces binary size (e.g., from 2270605 to 84987 bytes for riscv64imc)
- Changes panic behavior to immediate abort, which may be preferred for embedded systems
- Improves system reliability by preventing undefined behavior from stack unwinding in constrained environments
- Maintains compatibility with existing Rust code while providing a more deterministic panic handling mechanism

For example, if it is enabled, the system will panic immediately:
```
NuttShell (NSH) NuttX-12.8.0
nsh> hello_rust_cargo
{"name":"John","age":30}
{"name":"Jane","age":25}
Deserialized: Alice is 28 years old
Pretty JSON:
{
  "name": "Alice",
  "age": 28
}
riscv_exception: EXCEPTION: Illegal instruction. MCAUSE: 0000000000000002, EPC: 0000000080027df6, MTVAL: 0000000000000000
riscv_exception: PANIC!!! Exception = 0000000000000002
dump_assert_info: Current Version: NuttX  12.8.0 8e3621e059 Jan 20 2025 14:45:00 risc-v
dump_assert_info: Assertion failed panic: at file: :0 task: hello_rust_cargo process: hello_rust_cargo 0x80020588
/* Stack dump from NuttX */
```
vs the default behavior:
```
NuttShell (NSH) NuttX-12.8.0
nsh> hello_rust_cargo
{"name":"John","age":30}
{"name":"Jane","age":25}
Deserialized: Alice is 28 years old
Pretty JSON:
{
  "name": "Alice",
  "age": 28
}

thread '<unnamed>' panicked at /home/huang/Work/rust/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/src/rust/library/std/src/sys/random/unix_legacy.rs:19:10:
failed to generate random data: Os { code: 2, kind: NotFound, message: "No such file or directory" }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
nsh>
```

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2025-01-20 19:48:25 +08:00
..
Wasm tools: migrate to SPDX identifier 2024-12-30 18:02:50 +08:00
bitmap_converter.py Remove unneeded semicolons and parentheses from Python files 2020-12-12 19:20:38 +01:00
check-hash.sh tools: migrate to SPDX identifier 2024-12-30 18:02:50 +08:00
CMakeLists.txt tools: migrate to SPDX identifier 2024-12-30 18:02:50 +08:00
Kconfig Fix Kconfig style 2024-04-09 08:16:40 +02:00
mkimport.sh tools: migrate to SPDX identifier 2024-12-30 18:02:50 +08:00
mkkconfig.bat tools: update licenses to Apache 2021-06-10 08:49:24 -05:00
mkkconfig.sh tools: migrate to SPDX identifier 2024-12-30 18:02:50 +08:00
mkromfsimg.sh tools: migrate to SPDX identifier 2024-12-30 18:02:50 +08:00
mksymtab.sh tools: migrate to SPDX identifier 2024-12-30 18:02:50 +08:00
pre-commit tools: migrate to SPDX identifier 2024-12-30 18:02:50 +08:00
Rust.mk tools/Rust: Add support for panic_immediate_abort 2025-01-20 19:48:25 +08:00
WASI-SDK.defs tools: migrate to SPDX identifier 2024-12-30 18:02:50 +08:00
Wasm.mk tools: migrate to SPDX identifier 2024-12-30 18:02:50 +08:00