nuttx/Documentation/components
Marco Casaroli 6be9ba5d53 Documentation: Add a developer guide for FDPIC modules.
Documentation/components/fdpic.rst covers what someone building or loading an
FDPIC module needs: how the format works and what the loader does with it, how
it differs from NXFLAT and from the ELF loader's own PIC/XIP path, what the
target and toolchain have to provide, how to build a module, a shared library
and a C++ module, and what a firmware entry point must do to accept a module
callback.

The comparison is the part worth stating plainly, because two of the three
properties are shared.  All three formats run position-independent code from
flash with no MMU and give several instances of one module a shared .text with
private .data.  NXFLAT needs its own tools and cannot export symbols, so it
has no shared libraries.  ELF PIC needs no extra tools at all, but one base
register per task means a shared object is loaded as a single allocation --
its text cannot stay in flash -- and there is no DT_NEEDED walk.  FDPIC costs
an arm-uclinuxfdpiceabi linker and buys a pointer that carries its own data
base, which is what makes shared libraries and callbacks on a thread the
module never created possible.

The reference material at the end is the part that is expensive to
rediscover: the FDPIC marker being in EI_OSABI rather than e_flags, the three
relocation types that survive a static link, why both relocation tables are
bound eagerly, why .rofixup is skipped, and the two binfmt contract details
that fail as a panic or a bare -EINVAL.

Also adds the fdpic and reject sections to the xipfs test suite document, which
apps/testing/fs/xipfs grows in the matching apps change.

Assisted-by: Claude Code:claude-opus-5
Signed-off-by: Marco Casaroli <marco.casaroli@gmail.com>
2026-08-01 12:25:43 +02:00
..
arch
audio docs/audio_tone: Add documentation about the audio tone driver 2026-07-13 09:42:26 +08:00
concurrency Documentation: Add documentation for seqcount. 2025-12-22 10:22:06 -03:00
drivers Documentation: describe the contract for writing a keyboard driver 2026-07-31 11:02:20 -03:00
filesystem Documentation/xipfs: Document the execute-in-place file system. 2026-07-29 07:49:03 -03:00
libs include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
mm mm/iob: add iob_init method to support external buffer init as iob structure 2025-12-25 10:08:49 +08:00
net Documentation/net: document lower-half driver performance tuning 2026-07-13 11:53:26 +02:00
nxgraphics !boards/boardctl: Remove BOARDIOC_INIT 2026-05-26 09:57:29 +08:00
tools tools/nxstyle: add a script to check a whole tree at once 2026-07-28 02:43:24 +08:00
binfmt.rst style: fix typos 2025-04-30 13:45:46 +08:00
boards.rst Documentation/components/boards.rst: fix typo 2026-06-04 09:58:42 +08:00
cmake.rst
crypto.rst crypto: Support SHA2_224_HMAC 2026-07-04 14:15:17 +08:00
fdpic.rst Documentation: Add a developer guide for FDPIC modules. 2026-08-01 12:25:43 +02:00
index.rst Documentation: Add a developer guide for FDPIC modules. 2026-08-01 12:25:43 +02:00
nxflat.rst Documentation/xipfs: Document the execute-in-place file system. 2026-07-29 07:49:03 -03:00
openamp.rst
paging.rst style: fix typos 2025-04-30 13:45:46 +08:00
syscall.rst Documentation: fix spelling 2025-05-15 11:33:41 +08:00
video.rst
wireless.rst