diff --git a/objdiff-core/config-schema.json b/objdiff-core/config-schema.json index 515f1bbf..dab2c33c 100644 --- a/objdiff-core/config-schema.json +++ b/objdiff-core/config-schema.json @@ -82,6 +82,27 @@ "name": "Space between args", "description": "Adds a space between arguments in the diff output." }, + { + "id": "showSymbolSizes", + "type": "choice", + "default": "off", + "name": "Show symbol sizes", + "description": "Shows symbol sizes in the symbol view.", + "items": [ + { + "value": "off", + "name": "Off" + }, + { + "value": "hex", + "name": "Hex" + }, + { + "value": "decimal", + "name": "Decimal" + } + ] + }, { "id": "combineDataSections", "type": "boolean", @@ -296,6 +317,7 @@ "properties": [ "functionRelocDiffs", "demangler", + "showSymbolSizes", "spaceBetweenArgs", "combineDataSections", "combineTextSections" diff --git a/objdiff-gui/src/app_config.rs b/objdiff-gui/src/app_config.rs index 3a058c29..0bbde3be 100644 --- a/objdiff-gui/src/app_config.rs +++ b/objdiff-gui/src/app_config.rs @@ -6,7 +6,7 @@ use objdiff_core::{ config::ScratchConfig, diff::{ ArmArchVersion, ArmR9Usage, DiffObjConfig, FunctionRelocDiffs, MipsAbi, MipsInstrCategory, - X86Formatter, + ShowSymbolSizes, X86Formatter, }, }; use typed_path::{Utf8PlatformPathBuf, Utf8UnixPathBuf}; @@ -227,6 +227,7 @@ pub struct DiffObjConfigV1 { pub relax_reloc_diffs: bool, #[serde(default = "bool_true")] pub space_between_args: bool, + pub show_symbol_sizes: ShowSymbolSizes, pub combine_data_sections: bool, // x86 pub x86_formatter: X86Formatter, @@ -248,6 +249,7 @@ impl Default for DiffObjConfigV1 { Self { relax_reloc_diffs: false, space_between_args: true, + show_symbol_sizes: Default::default(), combine_data_sections: false, x86_formatter: Default::default(), mips_abi: Default::default(), @@ -272,6 +274,7 @@ impl DiffObjConfigV1 { FunctionRelocDiffs::default() }, space_between_args: self.space_between_args, + show_symbol_sizes: self.show_symbol_sizes, combine_data_sections: self.combine_data_sections, x86_formatter: self.x86_formatter, mips_abi: self.mips_abi, diff --git a/objdiff-gui/src/views/diff.rs b/objdiff-gui/src/views/diff.rs index cb8804e1..3e52021f 100644 --- a/objdiff-gui/src/views/diff.rs +++ b/objdiff-gui/src/views/diff.rs @@ -665,6 +665,7 @@ fn diff_col_ui( appearance, column, open_sections, + diff_config, ) { match (column, action) { ( @@ -703,6 +704,7 @@ fn diff_col_ui( appearance, column, open_sections, + diff_config, ) { ret = Some(result); } diff --git a/objdiff-gui/src/views/symbol_diff.rs b/objdiff-gui/src/views/symbol_diff.rs index 6b088e10..abd49529 100644 --- a/objdiff-gui/src/views/symbol_diff.rs +++ b/objdiff-gui/src/views/symbol_diff.rs @@ -6,7 +6,7 @@ use egui::{ }; use objdiff_core::{ diff::{ - ObjectDiff, SymbolDiff, + DiffObjConfig, ObjectDiff, ShowSymbolSizes, SymbolDiff, display::{ HighlightKind, SectionDisplay, SymbolFilter, SymbolNavigationKind, display_sections, symbol_context, symbol_hover, @@ -525,6 +525,7 @@ fn symbol_ui( state: &SymbolViewState, appearance: &Appearance, column: usize, + diff_config: &DiffObjConfig, ) -> Option { let mut ret = None; let mut job = LayoutJob::default(); @@ -572,6 +573,21 @@ fn symbol_ui( write_text(") ", appearance.text_color, &mut job, appearance.code_font.clone()); } write_text(name, appearance.highlight_color, &mut job, appearance.code_font.clone()); + if diff_config.show_symbol_sizes == ShowSymbolSizes::Decimal { + write_text( + &format!(" (size={})", symbol.size), + appearance.deemphasized_text_color, + &mut job, + appearance.code_font.clone(), + ); + } else if diff_config.show_symbol_sizes == ShowSymbolSizes::Hex { + write_text( + &format!(" (size={:x})", symbol.size), + appearance.deemphasized_text_color, + &mut job, + appearance.code_font.clone(), + ); + } let response = egui::Button::selectable(selected, job) .ui(ui) .on_hover_ui_at_pointer(|ui| symbol_hover_ui(ui, ctx, symbol_idx, appearance)); @@ -646,6 +662,7 @@ pub fn symbol_list_ui( appearance: &Appearance, column: usize, open_sections: Option, + diff_config: &DiffObjConfig, ) -> Option { let mut ret = None; ScrollArea::both().auto_shrink([false, false]).show(ui, |ui| { @@ -770,6 +787,7 @@ pub fn symbol_list_ui( state, appearance, column, + diff_config, ) { ret = Some(result); }