# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [2.3.7] - 2024-02-27
### Fixed
- 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
### Added
- Add issue templates for bug reports and feature suggestions.
### Fixed
- Fix not recognizing sections that don't start with dots (`.`).
## [2.3.5] - 2024-02-04
### Fixed
- Fix `MapFile.compareFilesAndSymbols` reporting the wrong address as the
expected address.
## [2.3.4] - 2024-01-26
### Changed
- Frontend scripts now give a better error if the mapfile does not exist.
## [2.3.2] - 2024-01-17
### Added
- Add optional `categoryColumnSize` parameter to `ProgressStats.getHeaderAsStr`
and `ProgressStats.getEntryAsStr`.
- Allows to set the size of the first column.
### Fixed
- Fix Rust's implementation of `File` not returning a `pathlib.Path` object for
the `filepath` member.
## [2.3.1] - 2023-12-23
### Added
- Add a few utility methods to `ProgressStats`.
### Changed
- `pyo3` is no longer needed to use this crate as Rust-only library.
- Updated Rust dependencies.
## [2.3.0] - 2023-11-05
### Added
- 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` and
`Segment.align`/`Segment::align`: The alignment the given type. This member
will be filled by the parser only if the mapfile provides this information.
### Changed
- `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.
### Fixed
- 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
### Fixed
- 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
### Added
- 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>
### Changed
- 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` to `maturin`
## [2.1.5] - 2023-10-02
### Added
- Add `CHANGELOG.md`
- Add markdown linter to CI
### Changed
- Cleanup the `README.md` a bit
- Update Github Action's dependencies
### Deprecated
- Deprecate `File.getName`
- The method itself doesn't make sense, instead operate on `File.filepath` directly
- Deprecate `MapFile.debugging`
- Deprecate `progress` frontend's `--debugging` flag
## [2.1.4] - 2023-09-11
### Fixed
- Fix vrom calculation if the first symbol of a file is not available in the
map file
## [1.3.2] - 2023-09-11
### Added
- 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
### Changed
- 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.
### Fixed
- Fix vrom calculation if the first symbol of a file is not available in the
map file
Full changes: <https://github.com/Decompollaborate/mapfile_parser/compare/702a73452059ce4e97cda011e09dc4ef2a7b9dec...ba444b0bbfdfad7fb07347bf656b7fd4381596fb>
## [2.1.3] - 2023-08-30
### Fixed
- Fix version number
- pypi thought previous version was a prerelease instead of a full release
## [2.1.2] - 2023-08-30
### Added
- Add machine-friendly/non-human-readable option for json generation.
- Numbers are outputted as real numbers instead of prettified strings
- Add some CI tests
### Changed
- 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
### Fixed
- Fix off-by-one issue which was throwing away tons of data
## [2.1.0] - 2023-08-14
### Added
- Add `bss_check` frontend
- Allows to search for reordered bss variables by comparing two map files.
### Changed
- 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
### Fixed
- Try to prevent crashes if a file is found before the first segment is found
## [2.0.1] - 2023-08-07
### Changed
- Makes `Symbol`, `File` and `Segment` hashable
## [1.3.1] - 2023-08-06
### Changed
- Make `Symbol` and `File` types hashable
## [2.0.0] - 2023-08-01
### Added
- `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.
### Changed
- 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 a `Segment`, iterating that yields a `File`.
- Rename `segmentType` to `sectionType` and `filterBySegmentType` to
`filterBySectionType`.
## [1.3.0] - 2023-08-01
### Added
- Add function `toJson` to export map file as a json. It returns a `dict`.
- New `jsonify` frontend, which allows converting a map file in the cli.
## [1.2.1] - 2023-07-28
### Fixed
- Fix missing `:` colon even when passing `addColons=True` to the `first_diff`
frontend
## [1.2.0] - 2023-07-28
### Added
- `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
### Fixed
- Fix map parsing ignoring some `*fill*` entries
- Improve symbol info output a bit
## [1.1.4] - 2023-04-03
### Fixed
- Add missing `request` requirement
## [1.1.3] - 2023-02-22
### Added
- Add flag to enable debug prints
- Add flag to specify the path index
### Fixed
- Properly handle files with multiple extensions
## [1.1.2] - 2022-12-14
### Changed
- Modularize `upload_frogress` frontend
## [1.1.1] - 2022-12-14
### Added
- Add examples to README
## [1.1.0] - 2022-12-14
### Added
- 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`
[Full changelog](https://github.com/Decompollaborate/mapfile_parser/compare/1.0.0...1.1.0)
## [1.0.0] - 2022-12-13
### Added
- Initial release
[unreleased]: https://github.com/Decompollaborate/mapfile_parser/compare/master...develop
[2.3.7]: https://github.com/Decompollaborate/mapfile_parser/compare/2.3.6...2.3.7
[2.3.6]: https://github.com/Decompollaborate/mapfile_parser/compare/2.3.5...2.3.6
[2.3.5]: https://github.com/Decompollaborate/mapfile_parser/compare/2.3.4...2.3.5
[2.3.4]: https://github.com/Decompollaborate/mapfile_parser/compare/2.3.2...2.3.4
[2.3.2]: https://github.com/Decompollaborate/mapfile_parser/compare/2.3.1...2.3.2
[2.3.1]: https://github.com/Decompollaborate/mapfile_parser/compare/2.3.0...2.3.1
[2.3.0]: https://github.com/Decompollaborate/mapfile_parser/compare/2.2.1...2.3.0
[2.2.1]: https://github.com/Decompollaborate/mapfile_parser/compare/2.2.0...2.2.1
[2.2.0]: https://github.com/Decompollaborate/mapfile_parser/compare/2.1.5...2.2.0
[2.1.5]: https://github.com/Decompollaborate/mapfile_parser/compare/2.1.4...2.1.5
[2.1.4]: https://github.com/Decompollaborate/mapfile_parser/compare/2.1.3...2.1.4
[1.3.2]: https://github.com/Decompollaborate/mapfile_parser/compare/1.3.1...1.3.2
[2.1.3]: https://github.com/Decompollaborate/mapfile_parser/compare/2.1.2...2.1.3
[2.1.2]: https://github.com/Decompollaborate/mapfile_parser/compare/2.1.1...2.1.2
[2.1.1]: https://github.com/Decompollaborate/mapfile_parser/compare/2.1.0...2.1.1
[2.1.0]: https://github.com/Decompollaborate/mapfile_parser/compare/2.0.1...2.1.0
[2.0.1]: https://github.com/Decompollaborate/mapfile_parser/compare/2.0.0...2.0.1
[1.3.1]: https://github.com/Decompollaborate/mapfile_parser/compare/1.3.0...1.3.1
[2.0.0]: https://github.com/Decompollaborate/mapfile_parser/compare/1.3.0...2.0.0
[1.3.0]: https://github.com/Decompollaborate/mapfile_parser/compare/1.2.1...1.3.0
[1.2.1]: https://github.com/Decompollaborate/mapfile_parser/compare/1.2.0...1.2.1
[1.2.0]: https://github.com/Decompollaborate/mapfile_parser/compare/1.1.5...1.2.0
[1.1.5]: https://github.com/Decompollaborate/mapfile_parser/compare/1.1.4...1.1.5
[1.1.4]: https://github.com/Decompollaborate/mapfile_parser/compare/1.1.3...1.1.4
[1.1.3]: https://github.com/Decompollaborate/mapfile_parser/compare/1.1.2...1.1.3
[1.1.2]: https://github.com/Decompollaborate/mapfile_parser/compare/1.1.1...1.1.2
[1.1.1]: https://github.com/Decompollaborate/mapfile_parser/compare/1.1.0...1.1.1
[1.1.0]: https://github.com/Decompollaborate/mapfile_parser/compare/1.0.0...1.1.0
[1.0.0]: https://github.com/Decompollaborate/mapfile_parser/releases/tag/1.0.0