|  | 
|  | 1 | +use std::cmp::Ordering; | 
|  | 2 | + | 
| 1 | 3 | use egui::{Id, Layout, RichText, ScrollArea, TextEdit, Ui, Widget, text::LayoutJob}; | 
| 2 | 4 | use objdiff_core::{ | 
| 3 | 5 |     build::BuildStatus, | 
| 4 | 6 |     diff::{ | 
| 5 | 7 |         DiffObjConfig, ObjectDiff, SymbolDiff, | 
| 6 | 8 |         data::BYTES_PER_ROW, | 
| 7 |  | -        display::{ContextItem, HoverItem, HoverItemColor, SymbolFilter, SymbolNavigationKind, display_row}, | 
|  | 9 | +        display::{ContextItem, DiffText, HoverItem, HoverItemColor, SymbolFilter, SymbolNavigationKind, display_row}, | 
| 8 | 10 |     }, | 
| 9 |  | -    obj::{Object, Symbol}, | 
|  | 11 | +    obj::{InstructionArgValue, Object, Symbol}, | 
|  | 12 | +    util::ReallySigned, | 
| 10 | 13 | }; | 
| 11 | 14 | use time::format_description; | 
| 12 | 15 | 
 | 
| @@ -71,7 +74,27 @@ fn get_asm_text(obj: &Object, symbol_diff: &SymbolDiff, symbol_idx: usize, diff_ | 
| 71 | 74 |     for ins_row in &symbol_diff.instruction_rows { | 
| 72 | 75 |         let mut line = String::new(); | 
| 73 | 76 |         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); | 
| 75 | 98 |             Ok(()) | 
| 76 | 99 |         }); | 
| 77 | 100 | 
 | 
|  | 
0 commit comments