nuttx-apps/testing/fs/xipfs
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
..
callback_bin.h testing/fs/xipfs: Cover the FDPIC module loader. 2026-07-31 18:47:17 -03:00
CMakeLists.txt testing/fs/xipfs: Add a test suite for the xipfs file system. 2026-07-28 16:47:49 +08:00
counteruser_bin.h testing/fs/xipfs: Cover the FDPIC module loader. 2026-07-31 18:47:17 -03:00
cxxuser_bin.h testing/fs/xipfs: Cover the FDPIC module loader. 2026-07-31 18:47:17 -03:00
funcdesc_bin.h testing/fs/xipfs: Cover the FDPIC module loader. 2026-07-31 18:47:17 -03:00
Kconfig testing/fs/xipfs: Cover the FDPIC module loader. 2026-07-31 18:47:17 -03:00
lazymod_bin.h testing/fs/xipfs: Cover the FDPIC module loader. 2026-07-31 18:47:17 -03:00
libcounter_bin.h testing/fs/xipfs: Cover the FDPIC module loader. 2026-07-31 18:47:17 -03:00
libshape_bin.h testing/fs/xipfs: Cover the FDPIC module loader. 2026-07-31 18:47:17 -03:00
Make.defs testing/fs/xipfs: Add a test suite for the xipfs file system. 2026-07-28 16:47:49 +08:00
Makefile testing/fs/xipfs: Add a test suite for the xipfs file system. 2026-07-28 16:47:49 +08:00
manyneeded_bin.h testing/fs/xipfs: Cover the FDPIC module loader. 2026-07-31 18:47:17 -03:00
missingsym_bin.h testing/fs/xipfs: Cover the FDPIC module loader. 2026-07-31 18:47:17 -03:00
xipfs_main.c testing/fs/xipfs: Cover the FDPIC module loader. 2026-07-31 18:47:17 -03:00