mirror of
https://github.com/encounter/objdiff.git
synced 2025-12-12 14:46:12 +00:00
PPC: Display data values on hover for pools as well (#140)
* 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
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use std::default::Default;
|
||||
use std::{cmp::Ordering, default::Default};
|
||||
|
||||
use egui::{text::LayoutJob, Id, Label, Response, RichText, Sense, Widget};
|
||||
use egui_extras::TableRow;
|
||||
@@ -123,7 +123,15 @@ fn ins_hover_ui(
|
||||
|
||||
if let Some(reloc) = &ins.reloc {
|
||||
ui.label(format!("Relocation type: {}", obj.arch.display_reloc(reloc.flags)));
|
||||
ui.colored_label(appearance.highlight_color, format!("Name: {}", reloc.target.name));
|
||||
let addend_str = match reloc.addend.cmp(&0i64) {
|
||||
Ordering::Greater => format!("+{:x}", reloc.addend),
|
||||
Ordering::Less => format!("-{:x}", -reloc.addend),
|
||||
_ => "".to_string(),
|
||||
};
|
||||
ui.colored_label(
|
||||
appearance.highlight_color,
|
||||
format!("Name: {}{}", reloc.target.name, addend_str),
|
||||
);
|
||||
if let Some(orig_section_index) = reloc.target.orig_section_index {
|
||||
if let Some(section) =
|
||||
obj.sections.iter().find(|s| s.orig_index == orig_section_index)
|
||||
@@ -135,18 +143,18 @@ fn ins_hover_ui(
|
||||
}
|
||||
ui.colored_label(
|
||||
appearance.highlight_color,
|
||||
format!("Address: {:x}", reloc.target.address),
|
||||
format!("Address: {:x}{}", reloc.target.address, addend_str),
|
||||
);
|
||||
ui.colored_label(
|
||||
appearance.highlight_color,
|
||||
format!("Size: {:x}", reloc.target.size),
|
||||
);
|
||||
if let Some(s) = obj
|
||||
.arch
|
||||
.guess_data_type(ins)
|
||||
.and_then(|ty| obj.arch.display_data_type(ty, &reloc.target.bytes))
|
||||
{
|
||||
ui.colored_label(appearance.highlight_color, s);
|
||||
if reloc.addend >= 0 && reloc.target.bytes.len() > reloc.addend as usize {
|
||||
if let Some(s) = obj.arch.guess_data_type(ins).and_then(|ty| {
|
||||
obj.arch.display_data_type(ty, &reloc.target.bytes[reloc.addend as usize..])
|
||||
}) {
|
||||
ui.colored_label(appearance.highlight_color, s);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ui.colored_label(appearance.highlight_color, "Extern".to_string());
|
||||
|
||||
Reference in New Issue
Block a user