Releases: Decompollaborate/mapfile_parser
Releases · Decompollaborate/mapfile_parser
2.12.0
[2.12.0] - 2025-10-11
Added
- Install a
mapfile_parserprogram 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
uvxorpipx.
- This provides the same functionality as running the library module with
- Prebuilt binaries for Python 3.14.
Changed
- Update the
pyo3dependency version.
2.11.0
[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_MATCHINGmarkers 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: Trueon yourdecomp.yamlfile.
- Data progress reporting requires
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
checkingSymbol::inferred_static.
- For every inferred static sym a corresponding symbol will be inserted into
- The
--emit-categoriesflag ofobjdiff_reportnot sets
check_asm_paths: Falseandreport_data: Trueby default.
Fixed
- Fix the vram address plf-resolved mapfiles when the sections of those plfs
were not relative to zero.
2.10.0
[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 thatplf. - Rust:
MapFile::resolve_partially_linked_files(). - Python:
MapFile::resolvePartiallyLinkedFiles().
- This is done by calling a function with a user provided callback that
- All the CLI utilities include basic support for
plfs.- Pass the flag
-x .extensionor--plf-ext .extensionto specify the
extension of the partially linked objects files that should be replaced with
a.mapextension. - The frontends API allow to further customize this behavior by passing a
callback like the one used byMapFile::resolvePartiallyLinkedFiles.
- Pass the flag
2.9.4
[2.9.4] - 2025-06-02
Changed
- Implement parsing for
mwld2.7+ generated mapfiles. - Handle
*fill*s inmwld.
2.9.3
[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
[2.9.2] - 2025-05-28
Changed
objdiff_report:- Simplify emitted entries by avoiding using quotes as much as possible when
using the--emit-categoriesflag. - 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.
- Simplify emitted entries by avoiding using quotes as much as possible when
2.9.1
[2.9.1] - 2025-05-27
Added
- Add
--emit-categoriesflag toobjdiff_report.- Prints to stdout automatically-generated categories from the mapfile.
Categories will use thedecomp.yamlformat. - 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.
- Prints to stdout automatically-generated categories from the mapfile.
- 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 the segment's metadata (name, address, etc) when the
- Fix parsing if the mapfile contains Carriage Returns characters (
\r).
2.9.0
[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_reportfeature. - Use
MapFile::get_objdiff_report()to generate the report. - It is recommended to mix with the
serdefeature to make serialization of
the report easier.
- Disabled by default, it is gated by the
- Python:
- Use
MapFile::writeObjdiffReportToFile()to write an objdiff report as a
jsonfile.
- Use
- Relies mainly on
- Add
objdiff_reportas a new CLI utility to the Python library.- Generate a simple
objdiffprogress report from your terminal! - This utility supports the
decomp.yamlformat. This format is the preferred
way of invoking the tool, given the long list of arguments needed for the
tool to properly work.
- Generate a simple
- 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) andMapFile::newFromMwMapStr()
(Python): Parses specifically a Metrowerks ld mapfile without guessing.
- Existing catch-all functions will try to guess if the given mapfile
Changed
- Update
decomp_settingsto version 0.0.9. - Bump MSRV from
1.65.0to1.74.0.
2.8.1
[2.8.1] - 2025-05-22
Fixed
- Fix broken CLI utilities when a decomp.yaml file is not detected.
2.8.0
[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.trueif the section is a*fill*entry.MapFile::get_every_section_except_section_type. Provides the same
functionallity as the oldMapFile::get_every_file_except_section_type
function.Segment::get_every_section_except_section_type. Provides the same
functionallity as the oldSegment::get_every_file_except_section_type
function.MapFile::new_from_map_file,MapFile::new_from_map_str,
MapFile::new_from_gnu_map_strandMapFile::new_from_lld_map_str.Symbol::nonmatching_sym_exists. This will be set totrueif a symbol with
the same name but with a.NON_MATCHINGsuffix 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.
- The other suffixed symbol (
- Add support for the
decomp.yamlspecification from the
decomp_settingsproject on all
the provided CLI utilities.- If a
decomp.yamlfile 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 thedecomp.yamlfile. It defaults to
the first listed version.
- If a
Changed
- Change
Symbol.sizetou64fromOption<u64>. - Rename
FiletoSection.Fileis still available as an alias toSection, but it is recommended to
use the new name instead.
- Detect
.NON_MATCHINGsymbols and fix the size of both the real symbol and
the.NON_MATCHINGone during parsing.
Deprecated
File. UseSectioninstead.MapFile::get_every_file_except_section_type. Use
MapFile::get_every_section_except_section_typeinstead.Segment::get_every_file_except_section_type. Use
Segment::get_every_section_except_section_typeinstead.MapFile::new. Use eitherMapFile::new_from_map_fileor
MapFile::new_from_map_strinstead.MapFile::read_map_file. Use eitherMapFile::new_from_map_fileinstead.MapFile::parse_map_contents. Use eitherMapFile::new_from_map_strinstead.MapFile::parse_map_contents_gnu. Use eitherMapFile::new_from_gnu_map_str
instead.MapFile::parse_map_contents_lld. Use eitherMapFile::new_from_lld_map_str
instead.- Deprecate
MapFile::fixup_non_matching_symbolsand 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.