Skip to content

Commit 09595bc

Browse files
committed
More fixes
1 parent 0a6f8e8 commit 09595bc

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

objdiff-gui/src/views/diff.rs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1+
use std::cmp::Ordering;
2+
13
use egui::{Id, Layout, RichText, ScrollArea, TextEdit, Ui, Widget, text::LayoutJob};
24
use objdiff_core::{
35
build::BuildStatus,
46
diff::{
57
DiffObjConfig, ObjectDiff, SymbolDiff,
68
data::BYTES_PER_ROW,
7-
display::{ContextItem, HoverItem, HoverItemColor, SymbolFilter, SymbolNavigationKind, display_row},
9+
display::{ContextItem, DiffText, HoverItem, HoverItemColor, SymbolFilter, SymbolNavigationKind, display_row},
810
},
9-
obj::{Object, Symbol},
11+
obj::{InstructionArgValue, Object, Symbol},
12+
util::ReallySigned,
1013
};
1114
use time::format_description;
1215

@@ -71,7 +74,27 @@ fn get_asm_text(obj: &Object, symbol_diff: &SymbolDiff, symbol_idx: usize, diff_
7174
for ins_row in &symbol_diff.instruction_rows {
7275
let mut line = String::new();
7376
let result = display_row(obj, symbol_idx, ins_row, diff_config, |segment| {
74-
line.push_str(&segment.text.to_string());
77+
let text = match segment.text {
78+
DiffText::Basic(text) => text.to_string(),
79+
DiffText::Line(num) => format!("{num} "),
80+
DiffText::Address(addr) => format!("{addr:x}:"),
81+
DiffText::Opcode(mnemonic, _op) => format!("{mnemonic} "),
82+
DiffText::Argument(arg) => match arg {
83+
InstructionArgValue::Signed(v) => format!("{:#x}", ReallySigned(v)),
84+
InstructionArgValue::Unsigned(v) => format!("{v:#x}"),
85+
InstructionArgValue::Opaque(v) => v.into_owned(),
86+
},
87+
DiffText::BranchDest(addr) => format!("{addr:x}"),
88+
DiffText::Symbol(sym) => sym.demangled_name.as_ref().unwrap_or(&sym.name).clone(),
89+
DiffText::Addend(addend) => match addend.cmp(&0i64) {
90+
Ordering::Greater => format!("+{addend:#x}"),
91+
Ordering::Less => format!("-{:#x}", -addend),
92+
_ => String::new(),
93+
},
94+
DiffText::Spacing(n) => " ".repeat(n),
95+
DiffText::Eol => "\n".to_string(),
96+
};
97+
line.push_str(&text);
7598
Ok(())
7699
});
77100

0 commit comments

Comments
 (0)