All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.7.3 - 2025-02-09
- Fix symbol's VROM calculation not properly accounting for the first symbol of
the section being a
static
symbol (missing from the mapfile).- This fix only applies to GNU mapfiles.
2.7.2 - 2024-12-15
- Prebuilt binaries for Python 3.13.
- Python 3.9 or later is now required.
- Bump from Python 3.8 to 3.9.
- Older versions can't be checked on CI anymore, so I prefer to not claim to support something that may have broken without anybody noticing.
- Nothing really changed. Just the CI tools I was using are refusing to use any Python version older than this. Sorry if you were affected by this.
- Use newer pyo3 version.
- From 0.20 to 0.23.
- Updated to avoid warnings with newer Rust versions.
- Fix issues introduced by updating pyo3.
2.7.1 - 2024-09-25
- Add
--json
flag toprogress
frontend.- Prints the output as json instead of using a human readable format.
- Improve lifetime usage and avoid unnecessary clones on Rust side.
2.7.0 - 2024-09-24
MapFile.findSymbolByVram
andMapFile.findSymbolByVrom
methods.- Allow to search a symbol given a given address. The address will be treated as either a vram address or a vrom address respectively.
- Add
--vram
,--vrom
and--name
arguments tosym_info
frontend.- Allow to tell to
sym_info
exactly how to treat the argument instead of trying to guess how to use it.
- Allow to tell to
sym_info
can now detect that an address may belong to a file even when the symbol itself may not exist on the mapfile.- This can happen for local symbols, for example for rodata literals.
MapFile.findSymbolByVramOrVrom
.- Use
MapFile.findSymbolByVram
andMapFile.findSymbolByVrom
instead.
- Use
- Fix typo that prevented using
jsonify
.
2.6.0 - 2024-08-26
- Add new parameters to
bss_check.printSymbolComparison
.printGoods
: Allows toggling printing the GOOD symbols.printingStyle
: The style to use to print the symbols, either"csv"
or"listing"
.- TODO: port to Rust.
- New
MapFile.fixupNonMatchingSymbols
method.- Allows to fixup size calculation of symbols messed up by symbols with the
same name suffixed with
.NON_MATCHING
.
- Allows to fixup size calculation of symbols messed up by symbols with the
same name suffixed with
- Add support for
.NON_MATCHING
suffix on symbols on progress calculation.- If a symbol exists and has a
.NON_MATCHING
-suffixed counterpart then consider it not mateched yet.
- If a symbol exists and has a
- Minor cleanups.
2.5.1 - 2024-08-09
- Fix Github Action file.
2.5.0 - 2024-08-09
- Add Minimal Supported Rust Version (MSRV) to Cargo.toml.
- Add
MapFile::new_from_map_file
function to simplifyMapFile
creation. - Add
serde
feature to the Rust crate.- Allows serializing and deserializing a
MapFile
object using serde.
- Allows serializing and deserializing a
- Tweak symbol comparison logic a bit.
- Symbol shifting (due to different sizes or extra/missing symbols) should not affect comparing non shifted files.
Cargo.lock
file is now committed to the repo.- Change Rust functions to properly take references instead of consuming the argument.
- Fix
MapFile::find_lowest_differing_symbol
not returning a previous symbol from a previous file if the symbol found is the first symbol from the file.
2.4.0 - 2024-03-25
- Add
endian
argument todoFirstDiff
. - Add
--endian
option tofirst_diff
script.
- Dropped Python 3.7 support.
- Python 3.8 is the minimum supported version now.
2.3.7 - 2024-02-27
- Fix not recognizing file entries which are splited in two lines because its section name was too long to fit.
2.3.6 - 2024-02-23
- Add issue templates for bug reports and feature suggestions.
- Fix not recognizing sections that don't start with dots (
.
).
2.3.5 - 2024-02-04
- Fix
MapFile.compareFilesAndSymbols
reporting the wrong address as the expected address.
2.3.4 - 2024-01-26
- Frontend scripts now give a better error if the mapfile does not exist.
2.3.2 - 2024-01-17
- Add optional
categoryColumnSize
parameter toProgressStats.getHeaderAsStr
andProgressStats.getEntryAsStr
.- Allows to set the size of the first column.
- Fix Rust's implementation of
File
not returning apathlib.Path
object for thefilepath
member.
2.3.1 - 2023-12-23
- Add a few utility methods to
ProgressStats
.
pyo3
is no longer needed to use this crate as Rust-only library.- Updated Rust dependencies.
2.3.0 - 2023-11-05
- Support for parsing clang lld's map fles.
- New functions:
MapFile.parseMapContents
/MapFile::parse_map_contents
- Parses the map contents passed as the argument, without requiring the map being on an actual file.
- The map format will be guessed on the contents. Currently both the GNU ld and clang ld.lld map formats are recognized.
MapFile.parseMapContentsGNU
/MapFile::parse_map_contents_gnu
- Parses the map contents passed as the argument, without requiring the map being on an actual file.
- This function only parses the GNU ld map format.
MapFile.parseMapContentsLLD
/MapFile::parse_map_contents_lld
- Parses the map contents passed as the argument, without requiring the map being on an actual file.
- This function only parses the clang ld.lld map format.
- New members:
Symbol.align
/Symbol::align
,File.align
/File::align
andSegment.align
/Segment::align
: The alignment the given type. This member will be filled by the parser only if the mapfile provides this information.
MapFile.readMapFile
/MapFile::read_map_file
can now guess the map format between any of the known formats.- Some known symbol names will be automatically filtered out during the parsing
step.
- Currently only
gcc2_compiled.
is filtered out.
- Currently only
- Fix parser not detecting
*fill*
lines on GNU ld maps if they specified the value that was used for filling/padding. .sbss
,COMMON
and.scommon
sections are now properly considered noload sections.
2.2.1 - 2023-10-08
- Fix Rust crate size being too big
- crates.io was rejecting the package because of the size
- Cargo was packaging all the map files and test cases, making the package be 15 MiB. Now it is around 16.3 KiB
2.2.0 - 2023-10-08
- Add new Rust re-implementation (#15)
- Allows using this library in native Rust projects
- It does not replace the Python implementation due to restrictions on how Rust bindings work.
- Python bindings for the Rust implementation exists, but they are not used or exposed to the user
- Now this library has a Rust crate.
- Check it at https://crates.io/crates/mapfile_parser
- Speed-up the actual parsing of a mapfile by using the native Rust implementation
- Up to 10 times faster parsing has been registered
- Change build system from
hatchling
tomaturin
2.1.5 - 2023-10-02
- Add
CHANGELOG.md
- Add markdown linter to CI
- Cleanup the
README.md
a bit - Update Github Action's dependencies
- Deprecate
File.getName
- The method itself doesn't make sense, instead operate on
File.filepath
directly
- The method itself doesn't make sense, instead operate on
- Deprecate
MapFile.debugging
- Deprecate
progress
frontend's--debugging
flag
2.1.4 - 2023-09-11
- Fix vrom calculation if the first symbol of a file is not available in the map file
1.3.2 - 2023-09-11
- Add version info to the cli
- Add small testing suite
- Add machine-friendly/non-human-readable option for json generation.
- Numbers are outputted as real numbers instead of prettified strings
- Allow csv conversion to be written to a file instead of only printing to stdout
- Output
none
instead of"None"
for symbols with no vrom when generating json output.
- Fix vrom calculation if the first symbol of a file is not available in the map file
2.1.3 - 2023-08-30
- Fix version number
- pypi thought previous version was a prerelease instead of a full release
2.1.2 - 2023-08-30
- Add machine-friendly/non-human-readable option for json generation.
- Numbers are outputted as real numbers instead of prettified strings
- Add some CI tests
- Output
none
instead of"None"
for symbols with no vrom when generating json output. - Make dummy files for
*fill*
lines instead of adding them to the previous file. - Don't drop the dummy segment if it actually has data on it
2.1.1 - 2023-08-15
- Fix off-by-one issue which was throwing away tons of data
2.1.0 - 2023-08-14
- Add
bss_check
frontend- Allows to search for reordered bss variables by comparing two map files.
- Don't skip important lines in some kinds of map files.
- This may produce map parsing to be a bit slower but it should work properly with more kinds of mapfiles
- Try to prevent crashes if a file is found before the first segment is found
2.0.1 - 2023-08-07
- Makes
Symbol
,File
andSegment
hashable
1.3.1 - 2023-08-06
- Make
Symbol
andFile
types hashable
2.0.0 - 2023-08-01
toJson
method which allow serializing map files into the json format.jsonify
frontend which allows converting a mapfile into a json format from the CLI.
- Change logic of
MapFile
so it can parse and organize each file in proper segments.- This breaks old ways of iterating the
MapFile
class. Now iterating it yields aSegment
, iterating that yields aFile
.
- This breaks old ways of iterating the
- Rename
segmentType
tosectionType
andfilterBySegmentType
tofilterBySectionType
.
1.3.0 - 2023-08-01
- Add function
toJson
to export map file as a json. It returns adict
. - New
jsonify
frontend, which allows converting a map file in the cli.
1.2.1 - 2023-07-28
- Fix missing
:
colon even when passingaddColons=True
to thefirst_diff
frontend
1.2.0 - 2023-07-28
first_diff
frontend:- Allow an optional bytes converter callback. It can be useful to perform analysis or instruction decoding on the caller side.
- Parameter to toggle colons (
:
) in bytes difference output
1.1.5 - 2023-07-28
- Fix map parsing ignoring some
*fill*
entries - Improve symbol info output a bit
1.1.4 - 2023-04-03
- Add missing
request
requirement
1.1.3 - 2023-02-22
- Add flag to enable debug prints
- Add flag to specify the path index
- Properly handle files with multiple extensions
1.1.2 - 2022-12-14
- Modularize
upload_frogress
frontend
1.1.1 - 2022-12-14
- Add examples to README
1.1.0 - 2022-12-14
- Compute vrom addresses of symbols and files
- Provide various front-ends clis (see README for more info):
first_diff
pj64_syms
progress
sym_info
symbol_sizes_csv
upload_frogress
1.0.0 - 2022-12-13
- Initial release