* Fix missing dependency feature for objdiff-gui
* Update .gitignore
* PPC: Display data values on hover for pools as well
* Tooltip data display: Format floats and doubles better
Floats and doubles will now always be displayed with a decimal point and one digit after it, even if they are whole numbers. Floats will also have the f suffix. This is so you can tell the data type just by glancing at the value.
* Move big functions to bottom ppc.rs
* Clear pool relocs in volatile registers on function call
This fixes some false positives.
* Revert ObjArch API changes, add fake target symbol hack
Because we no longer have access to the actual symbol name via sections, guess_data_type can no longer detect the String data type for pooled references.
* Add hack to detect strings via the addi opcode
* Move hack to resolve placeholder symbol into process_code_symbol
* Merge reloc and fake_pool_reloc fields of ObjIns
* Fix missing dependency feature for objdiff-gui
* Update .gitignore
* Add enter and back hotkeys
* Add scroll hotkeys
* Add hotkeys to select the next symbol above/below the current one in the listing
* Do not clear highlighted symbol when backing out of diff view
* Do not clear highlighted symbol when hovering mouse over an unpaired symbol
* Auto-scroll the keyboard-selected symbols into view if offscreen
* Fix some hotkeys stealing input from focused widgets
e.g. The symbol list was stealing the W/S key presses when typing into the symbol filter text edit.
If the user actually wants to use these shortcuts while a widget is focused, they can simply press the escape key to unfocus all widgets and then press the shortcut.
* Add Ctrl+F/S shortcuts for focusing the object and symbol filter text edits
* Add space as alternative to enter hotkey
This is for consistency with egui's builtint enter/space hotkey for interacting with the focused widget.
* Add hotkeys to change target and base functions
* Split function diff view: Enable PageUp/PageDown/Home/End for scrolling
* Add escape as an alternative to back hotkey
* Fix auto-scrolling to highlighted symbol only working for the left side
The flag is cleared after one scroll to avoid doing it continuously, but this breaks when we need to scroll to both the left and the right symbol at the same time. So now each side has its own flag to keep track of this state independently.
* Simplify clearing of the autoscroll flag, remove &mut State
* Found a better place to clear the autoscroll flag
DiffViewState::post_update is where the flag gets set, so clearing it right before that at the start of the function seems to make the most sense, instead of doing it in App::update.
* Fix missing dependency feature for objdiff-gui
* Update .gitignore
* Display decoded rlwinm info to hover tooltip
* Remove trailing newline when displaying decoded rlwinm info
* Change variable name
* Also update variable name in rlwinm.rs
The Ghidra delinker plugin emits functions with type STT_OBJECT,
rather than STT_FUNC. The current logic was preventing these from
being compared based on their symbol type. Relax this condition
for now.
* Reduce dependencies for no features
* Add missing deps to every feature
* Add missing `dep:`s
* Gate even more deps behind features
Removes dependency on tsify-next / wasm-bindgen unless
compiling with the wasm feature by using `#[cfg_attr]`
* Fix wasm
---------
Co-authored-by: Luke Street <luke@street.dev>
* Fix panic when parsing DWARF 2 line info for empty section
* Fix panic when parsing DWARF 2 line info for empty section
May as well remove both unwraps :p
* Fix data tooltip panic
Prevents panicing when attempting to display the data tooltip for a symbol that is too large by just using as many bytes as needed from the begging of the symbol.
* Don't attempt to interpret wrongly sized data
* Reference data display improvment issue
* Log failure to display a symbol's value
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
Job status is now shown in the top menu bar,
with a new Jobs window that can be toggled.
Build and diff errors are now handled more
gracefully.
Fixes#40
Before, this was running 2 fs::metadata
calls every frame. We don't need to do it
nearly that often, so now it only checks
once every 500ms.
This required refactoring AppConfig into
a separate AppState that holds transient
runtime state along with the loaded
AppConfig.