Skip to content

Releases: Decompollaborate/mapfile_parser

2.12.0

11 Oct 16:59

Choose a tag to compare

[2.12.0] - 2025-10-11

Added

  • Install a mapfile_parser program script when installing the library through
    pip.
    • This provides the same functionality as running the library module with
      python3 -m mapfile_parser.
    • This should allow better integration with tools like uvx or pipx.
  • Prebuilt binaries for Python 3.14.

Changed

  • Update the pyo3 dependency version.

2.11.0

08 Sep 21:34
01b5596

Choose a tag to compare

[2.11.0] - 2025-09-08

Added

  • Progress reports using the objdiff's report format can now emit progress for
    data symbols!
    • Data progress reporting requires .NON_MATCHING markers for every data
      symbol that is not considered matched yet (i.e. from an automatic disassembly).
    • It is turned off by default in objdiff_report. To turn it on set
      report_data: True on your decomp.yaml file.

Changed

  • Mapfile parsing will now try to infer static symbols by analyzing mismatches
    on section address and size vs the addresses and sizes of symbols within that
    section.
    • For every inferred static sym a corresponding symbol will be inserted into
      the section. Its name will be prefixed with $_static_symbol_.
    • It is possible to check if a symbol is an inferred static in the API by
      checking Symbol::inferred_static.
  • The --emit-categories flag of objdiff_report not sets
    check_asm_paths: False and report_data: True by default.

Fixed

  • Fix the vram address plf-resolved mapfiles when the sections of those plfs
    were not relative to zero.

2.10.0

02 Sep 03:39
22a03f2

Choose a tag to compare

[2.10.0] - 2025-09-01

Added

  • Support for partially linked objects (a.k.a. plf).
    • This is done by calling a function with a user provided callback that
      converts a given object path into the corresponding mapfile for that plf.
    • Rust: MapFile::resolve_partially_linked_files().
    • Python: MapFile::resolvePartiallyLinkedFiles().
  • All the CLI utilities include basic support for plfs.
    • Pass the flag -x .extension or --plf-ext .extension to specify the
      extension of the partially linked objects files that should be replaced with
      a .map extension.
    • The frontends API allow to further customize this behavior by passing a
      callback like the one used by MapFile::resolvePartiallyLinkedFiles.

2.9.4

02 Jun 17:03
afa7600

Choose a tag to compare

[2.9.4] - 2025-06-02

Changed

  • Implement parsing for mwld 2.7+ generated mapfiles.
  • Handle *fill*s in mwld.

2.9.3

01 Jun 15:05
85a283e

Choose a tag to compare

[2.9.3] - 2025-06-01

Fixed

  • Try to infer the rom address of sections and segments even when the mapfile
    does not have it explictly on GNU mapfiles.

2.9.2

28 May 14:04
ca3e688

Choose a tag to compare

[2.9.2] - 2025-05-28

Changed

  • objdiff_report:
    • Simplify emitted entries by avoiding using quotes as much as possible when
      using the --emit-categories flag.
    • Avoid printing the summary table when using the --emit-categories.
    • Allow customizing the output of the summary table a little bit via the
      Python API.

2.9.1

27 May 19:18
96e0ea7

Choose a tag to compare

[2.9.1] - 2025-05-27

Added

  • Add --emit-categories flag to objdiff_report.
    • Prints to stdout automatically-generated categories from the mapfile.
      Categories will use the decomp.yaml format.
    • Intended to facilitate to integrate this progress reporting method.
    • The generated categories are expected to be modified by the user and not
      used as is.
  • Print a summary from the generated progress report in objdiff_report.
    • Printed to stdout by default.
    • This will be printed as a summary step if the script detects it is being run
      in a Github Action.

Changed

  • Metroweks ld: Parse alignment column.

Fixed

  • GNU maps:
    • Fix parsing the segment's metadata (name, address, etc) when the
      segment does not have a rom address.
    • Properly drop empty segments from the parsed output.
  • Fix parsing if the mapfile contains Carriage Returns characters (\r).

2.9.0

25 May 14:50
dd01f8c

Choose a tag to compare

[2.9.0] - 2025-05-25

Added

  • Support emitting progress reports using
    objdiff's format.
    • Relies mainly on .NON_MATCHING-suffixed marker symbols being present on
      the mapfile for each non-matched symbol.
    • Rust:
      • Disabled by default, it is gated by the objdiff_report feature.
      • Use MapFile::get_objdiff_report() to generate the report.
      • It is recommended to mix with the serde feature to make serialization of
        the report easier.
    • Python:
      • Use MapFile::writeObjdiffReportToFile() to write an objdiff report as a
        json file.
  • Add objdiff_report as a new CLI utility to the Python library.
    • Generate a simple objdiff progress report from your terminal!
    • This utility supports the decomp.yaml format. This format is the preferred
      way of invoking the tool, given the long list of arguments needed for the
      tool to properly work.
  • Add support for Metrowerks ld mapfiles.
    • Existing catch-all functions will try to guess if the given mapfile
      correspond to this kind of map by default.
    • New functions:
      • MapFile::new_from_mw_map_str() (Rust) and MapFile::newFromMwMapStr()
        (Python): Parses specifically a Metrowerks ld mapfile without guessing.

Changed

  • Update decomp_settings to version 0.0.9.
  • Bump MSRV from 1.65.0 to 1.74.0.

2.8.1

22 May 14:13
083eb5f

Choose a tag to compare

[2.8.1] - 2025-05-22

Fixed

  • Fix broken CLI utilities when a decomp.yaml file is not detected.

2.8.0

20 May 15:56
ad438a7

Choose a tag to compare

[2.8.0] - 2025-05-20

Added

  • File::symbol_match_state_iter() function. Returns an iterator over
    SymbolDecompState, which allows to know if a symbol is considered decompiled
    or not decompiled yet.
  • Section::is_fill. true if the section is a *fill* entry.
  • MapFile::get_every_section_except_section_type. Provides the same
    functionallity as the old MapFile::get_every_file_except_section_type
    function.
  • Segment::get_every_section_except_section_type. Provides the same
    functionallity as the old Segment::get_every_file_except_section_type
    function.
  • MapFile::new_from_map_file, MapFile::new_from_map_str,
    MapFile::new_from_gnu_map_str and MapFile::new_from_lld_map_str.
  • Symbol::nonmatching_sym_exists. This will be set to true if a symbol with
    the same name but with a .NON_MATCHING suffix is found on the same section.
    • The other suffixed symbol (.NON_MATCHING) is still retained in the section.
    • The suffixed symbol will have this member set to false.
  • Add support for the decomp.yaml specification from the
    decomp_settings project on all
    the provided CLI utilities.
    • If a decomp.yaml file is detected, then every CLI argument that can be
      inferred from that file will be be considered optional instead.
    • Most CLI utilites will also add a new optional "version" argument to allow
      picking the version to process from the decomp.yaml file. It defaults to
      the first listed version.

Changed

  • Change Symbol.size to u64 from Option<u64>.
  • Rename File to Section.
    • File is still available as an alias to Section, but it is recommended to
      use the new name instead.
  • Detect .NON_MATCHING symbols and fix the size of both the real symbol and
    the .NON_MATCHING one during parsing.

Deprecated

  • File. Use Section instead.
  • MapFile::get_every_file_except_section_type. Use
    MapFile::get_every_section_except_section_type instead.
  • Segment::get_every_file_except_section_type. Use
    Segment::get_every_section_except_section_type instead.
  • MapFile::new. Use either MapFile::new_from_map_file or
    MapFile::new_from_map_str instead.
  • MapFile::read_map_file. Use either MapFile::new_from_map_file instead.
  • MapFile::parse_map_contents. Use either MapFile::new_from_map_str instead.
  • MapFile::parse_map_contents_gnu. Use either MapFile::new_from_gnu_map_str
    instead.
  • MapFile::parse_map_contents_lld. Use either MapFile::new_from_lld_map_str
    instead.
  • Deprecate MapFile::fixup_non_matching_symbols and family. This functionality
    is perform automatically during parsing now.
    • Calling this function is effectively a no-op now.

Fixed

  • Avoid pointless internal copy during the parsing of GNU mapfiles.