* Implement diffing individual data symbols
* Remove unused code for diffing sections
* Data diff view: Make rows show offset within the symbol, not within the section
* Remove SelectedSymbol enum as it only has a single variant now
* Create fake data section symbols to allow diffing entire sections again
* Fix text sections not having their size zeroed out
* Update test snapshots
* Clean up code for inferring section symbol size
* Fix bug where PPC pool references weren't ignoring section symbols
* Update comment
* Always add unique section symbols for data sections
* Update test snapshots
* Remove unnecessary clone in format! call
* Auto-start mapping for unpaired data symbols
* Fix filtering out symbols from the target side that have a symbol with the same name and a `.NON_MATCHING` suffix.
- Target side: Show all the symbols except the `.NON_MATCHING` ones.
- Base side: Ignore all the `.NON_MATCHING` symbols and also ignore the ones with the same name without the suffix
* fmt
* comment
* tests
* fmt tests
* maybe this could fix wasm?
* Fix wasm?
* fmt
* Move `DiffSide` to `diff` mod
* Update the stuff the advisories CI told me to
* Show reloc diff in func view when data content differs
* Add "Relax shifted data diffs" option
* Display fake pool relocations at end of line
* Diff reloc data by display string instead of raw bytes
This is to handle data symbols that contain multiple values in them at once, such as stringBase. If you compare the target symbol's bytes directly, then any part of the symbol having different bytes will cause *all* relocations to that symbol to show as a diff, even if the specific string being accessed is the same.
* Fix weak stripped symbols showing as a false diff
Fixed this by showing extern symbols correctly instead of skipping them.
* Add "Relax shifted data diffs" option to objdiff-cli
Includes both a command line argument and a keyboard shortcut (S).
* Remove addi string data hack and ... pool name hack
* Clippy fix
* PPC: Clear relocs from GPRs when overwritten
* PPC: Follow branches to improve pool detection accuracy
* PPC: Handle following bctr jump table control flow
* Clippy fixes
* PPC: Fix extern relocations not having their addend copied
* Add option to disable func data value diffing
* PPC: Handle lmw when clearing GPRs
* PPC: Handle moving reloc address with `add` inst
* Combine "relax reloc diffs" with other reloc diff options
* Add v3 config and migrate from v2
---------
Co-authored-by: Luke Street <luke@street.dev>
This allows users to "map" (or "link") symbols with different names so that they can be compared without having to update either the target or base objects. Symbol mappings are persisted in objdiff.json, so generators will need to ensure that they're preserved when updating. (Example: d1334bb79e)
Resolves#117
This migrates to using protobuf to
define the "report" and "changes"
formats in objdiff-cli.
The JSON output now uses the Proto3
"JSON Mapping", which is slightly
incompatible with the existing JSON
format. Mainly, 64-bit numbers are
represented as strings, and addresses
are decimal strings instead of hex.
However, the older JSON format is
still accepted by "report changes"
to ease migration.
- Add `objdiff-cli report changes` for diffing two reports
- Unify some click-to-highlight logic between CLI and GUI
- Load .splitmeta section for extra object metadata (original virtual addr, etc)
- More work on objdiff-cli diff