nuttx-apps/testing/fs
Marco Casaroli 20dc5e5167 testing/fs/xipfs: Cover the FDPIC module loader.
Adds two sections to the xipfs suite, guarded by CONFIG_FDPIC so a build
without the loader is unaffected.  They belong here rather than in their own
test because what they exercise is modules loaded *out of the filesystem* --
the pin, the in-place mapping and the loader are one path.

'fdpic' asserts on the loader properties that otherwise fail *quietly*: a
loader that skips DT_INIT_ARRAY runs a C++ module happily with every global
left zero, one that skips DT_JMPREL loads a module that hard-faults only
once it calls out, and one that mis-sizes the descriptor pool corrupts the
heap.  None of those announce themselves.  The module exit status is the
channel -- each module checks its own invariants and reports a bitmask.  It
also covers shared libraries across concurrent instances, per-instance data,
the leaf-library GOT fallback, the R_ARM_FUNCDESC descriptor pool, and every
firmware entry point that has to resolve a module callback, including
mq_notify and timer_create with SIGEV_THREAD.

'reject' mutates a known-good module byte by byte and asserts the loader
refuses it rather than loading something broken: a missing import, and more
DT_NEEDED entries than the walk will follow.

The modules are embedded as headers, for the same reason as in
examples/fdpicxip, and built for cortex-m3 for the same reason: one set of
blobs then runs on both the v7-M and v8-M targets.  Their sources and the
makefile that regenerates these headers live in
apps/examples/fdpicxip/modules, so the copies the two apps carry are built
from the same sources in the same way.

Verified on a Pimoroni Pico Plus 2: fdpic 33/33, reject 7/7, and the whole
suite 130/130 with them included.  The same three numbers on mps2-an500 under
QEMU, which is a Cortex-M7 rather than the RP2350's Cortex-M33.

Assisted-by: Claude Code:claude-opus-5
Signed-off-by: Marco Casaroli <marco.casaroli@gmail.com>
2026-07-31 18:47:17 -03:00
..
epoll include/debug.h: Use <nuttx/debug.h> in apps 2026-04-11 10:39:27 -03:00
fatutf8 apps/testing:move epoll, fatutf8 ... folders to the new fs folder 2025-01-22 01:34:00 +08:00
fdsantest apps/testing:move epoll, fatutf8 ... folders to the new fs folder 2025-01-22 01:34:00 +08:00
fstest !compiler: drop CONFIG_HAVE_LONG_LONG and require long long support 2026-05-11 17:38:32 +08:00
memfd testing/fs: add testcase to test the stability of memfd. 2026-01-22 19:53:39 +08:00
mtd_config_fs include/debug.h: Use <nuttx/debug.h> in apps 2026-04-11 10:39:27 -03:00
nxffs include/debug.h: Use <nuttx/debug.h> in apps 2026-04-11 10:39:27 -03:00
smart include/debug.h: Use <nuttx/debug.h> in apps 2026-04-11 10:39:27 -03:00
smart_test apps: Fix additional open() arguments. 2026-05-22 13:39:04 +08:00
xipfs testing/fs/xipfs: Cover the FDPIC module loader. 2026-07-31 18:47:17 -03:00
.gitignore apps/testing:move epoll, fatutf8 ... folders to the new fs folder 2025-01-22 01:34:00 +08:00
CMakeLists.txt apps/testing:move epoll, fatutf8 ... folders to the new fs folder 2025-01-22 01:34:00 +08:00
Make.defs apps/testing:move epoll, fatutf8 ... folders to the new fs folder 2025-01-22 01:34:00 +08:00
Makefile apps/testing:move epoll, fatutf8 ... folders to the new fs folder 2025-01-22 01:34:00 +08:00