Static VMU Pro application ABI review, 2026-10-23
ELF SHA256: 8e142500b19ba070b9af5b173e381d5e75edd2d58882f3c5fffe195e57430995
Reference: official espressif/elf_loader 1.0.0, ESP32-S3 section loader.

PASS: 45 imports have pinned public SDK declarations/documentation evidence.
PASS: every live relocation uses supported Xtensa type 2, 4 or 5.
PASS: every relocation destination is in a loader-mapped section.
PASS: every RELATIVE relocation's existing word refers to a mapped section.
PASS: no C++ constructors/destructors, TLS, or exception runtime imports.
PASS: .data/.rodata/.data.rel.ro end-padding preserves loader concatenation
alignment; without this app-local linker fragment .data would misalign rodata.
PASS: official package layout contains the exact gated ELF bytes.

Inert retained metadata was inspected against the native link map:
- .got (4 bytes) is the _DYNAMIC sentinel. The actual GOT/PLT import area is
  inside mapped .text. No live relocation reads or writes the standalone .got.
- .eh_frame (68 bytes) comes from libgcc _udivdi3/_umoddi3. No unwinder,
  exception runtime or frame-registration code is linked, and no live
  relocation reads or writes this metadata.
Leaving these unused metadata sections unmapped does not require firmware
changes or bypassing the static import/relocation checks.

Mapped ELF sections total 983515 bytes. The loader rounds text to 4 bytes,
requesting 983516 bytes before allocator overhead, runtime heap, SDK buffers,
stacks, and any retained ELF/package image. Device free memory is unmeasured.

This is static analysis and local packaging evidence, not device execution,
firmware export-table inspection, installation verification or hardware FPS.
