* 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
This allows explicitly ignoring changes to certain
files or directories, even if the changed file ends
up matching `watch_patterns`. The default value,
`build/**/*` will ensure that changes in the build
directory will not trigger a duplicate rebuild.
Resolves#143Resolves#215
This has been unimplemented since v3.0.0-alpha.1,
and I don't currently have plans to bring it back.
If you need it for something, please open an issue!
* WIP implementation
* * Move flow analysis to dedicated file
* Show string constants inline
* Handle calls to MWCC "sled" helpers which otherwise disrupt flow analysis
* Run cargo insta review
* Apply clippy feedback
* Update more tests.
* Remove std use from ppc flow analysis
* Try to make wasm build work again
* More test changes
* Probably last wasm fix
* Formatting
* Fix WASM
* One more clippy thing
* Fixed display of float constants in a LFS or LFD instruction in case where there is a branch to the subsequent instruction with a different register value.
* On lines with a reloc, only hide Symbol type data flow values rather than all data flow values.
* Formatting
When searching for a symbol by name, only look at
symbols that are defined within the object,
ignoring extern symbols (symbols without section).
Fixes#180Fixes#181
* 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.