Skip to content

v0.3.0 β€” the project's symbol map

Choose a tag to compare

@macabeus macabeus released this 02 Aug 13:26
· 398 commits to main since this release

@asmlift/core@0.3.0 and @asmlift/cli@0.3.0 are live on npm.

npm i @asmlift/cli   # pulls @asmlift/core ^0.3.0

What's new since 0.2.0

The project's symbol map (#8)

Point asmlift at your project's built ELF with one decomp.yaml key, and it spells the code the way your project does:

tools:
  asmlift:
    elf: rom.elf

Three channels feed the map β€” each one your ELF carries is used:

  • .symtab β€” names for globals and functions: gInputState instead of *(u16 *)0x03004668
  • DWARF (-g) β€” declaration shapes (gState.timer, gBlendModeTable[i], signedness, volatile/const) and callee signatures for every function the ELF compiled from C β€” arity drives call-argument recovery
  • .debug_macinfo (-g3) β€” address-cast macro names (#define gCounter (*(u16 *)0x03001234)), which no symbol table can carry

Every map fact is a ranked lever, never an override: the named spelling and its raw-address sibling are both scored, and --score-against's byte-diff picks the winner. Scored candidates declare themselves β€” no header wrangling, and the compile world is probed, not configured.

The CLI README covers how to produce a good ELF; the Klonoa decomp's asmlift-elf target is a worked example with all three channels.

Also

  • Playground: a Symbols pane ranks with your map in-browser, plus a byte-matching symbol-map example
  • Benchmark: all 192 real rows run symbol-fed with full provenance and reproduction scripts β€” asmlift 343 matches vs m2c 340 across 675 rows
  • Depends on the new @gba-kit/debug-info@0.4.0

Full changelog: v0.2.0...v0.3.0