From 7b9a2c9e38d705949acc1a00e9326da452ad2cd4 Mon Sep 17 00:00:00 2001 From: BR Date: Wed, 18 Jun 2025 01:10:59 -0700 Subject: [PATCH 1/3] show symbol size in symbol list --- objdiff-gui/src/views/symbol_diff.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/objdiff-gui/src/views/symbol_diff.rs b/objdiff-gui/src/views/symbol_diff.rs index 6b088e10..9ba37162 100644 --- a/objdiff-gui/src/views/symbol_diff.rs +++ b/objdiff-gui/src/views/symbol_diff.rs @@ -572,6 +572,12 @@ 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()); + write_text( + &format!(" (size={})", 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)); From ee02a790505f78f206f3ee06f266bfaa5144ded0 Mon Sep 17 00:00:00 2001 From: BR Date: Fri, 3 Oct 2025 21:22:16 -0700 Subject: [PATCH 2/3] configs for show symbol size --- objdiff-gui/src/views/appearance.rs | 28 ++++++++++++++++++++++++++++ objdiff-gui/src/views/symbol_diff.rs | 23 ++++++++++++++++------- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/objdiff-gui/src/views/appearance.rs b/objdiff-gui/src/views/appearance.rs index 3eb09327..be1dbbd1 100644 --- a/objdiff-gui/src/views/appearance.rs +++ b/objdiff-gui/src/views/appearance.rs @@ -13,6 +13,7 @@ pub struct Appearance { pub diff_colors: Vec, pub diff_bg_color: Option, pub theme: egui::Theme, + pub show_symbol_sizes: ShowSymbolSizeState, // Applied by theme #[serde(skip)] @@ -43,6 +44,12 @@ pub struct Appearance { pub next_code_font: Option, } +#[derive(serde::Deserialize, serde::Serialize, PartialEq, Debug)] +pub enum ShowSymbolSizeState { + Off, + Decimal, + Hex, +} pub struct FontState { definitions: egui::FontDefinitions, source: font_kit::source::SystemSource, @@ -60,6 +67,7 @@ impl Default for Appearance { code_font: DEFAULT_CODE_FONT, diff_colors: DEFAULT_COLOR_ROTATION.to_vec(), theme: egui::Theme::Dark, + show_symbol_sizes: ShowSymbolSizeState::Off, text_color: Color32::GRAY, emphasized_text_color: Color32::LIGHT_GRAY, deemphasized_text_color: Color32::DARK_GRAY, @@ -302,6 +310,26 @@ pub fn appearance_window(ctx: &egui::Context, show: &mut bool, appearance: &mut appearance, ); ui.separator(); + egui::ComboBox::from_label("Show symbol sizes") + .selected_text(format!("{:?}", appearance.show_symbol_sizes)) + .show_ui(ui, |ui| { + ui.selectable_value( + &mut appearance.show_symbol_sizes, + ShowSymbolSizeState::Off, + "Off", + ); + ui.selectable_value( + &mut appearance.show_symbol_sizes, + ShowSymbolSizeState::Decimal, + "Decimal", + ); + ui.selectable_value( + &mut appearance.show_symbol_sizes, + ShowSymbolSizeState::Hex, + "Hex", + ); + }); + ui.separator(); ui.horizontal(|ui| { ui.label("Diff fill color:"); let mut diff_bg_color = diff --git a/objdiff-gui/src/views/symbol_diff.rs b/objdiff-gui/src/views/symbol_diff.rs index 9ba37162..1def79da 100644 --- a/objdiff-gui/src/views/symbol_diff.rs +++ b/objdiff-gui/src/views/symbol_diff.rs @@ -22,7 +22,7 @@ use crate::{ hotkeys, jobs::{is_create_scratch_available, start_create_scratch}, views::{ - appearance::Appearance, + appearance::{Appearance, ShowSymbolSizeState}, diff::{context_menu_items_ui, hover_items_ui}, function_diff::FunctionViewState, write_text, @@ -572,12 +572,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()); - write_text( - &format!(" (size={})", symbol.size), - appearance.deemphasized_text_color, - &mut job, - appearance.code_font.clone(), - ); + if appearance.show_symbol_sizes == ShowSymbolSizeState::Decimal { + write_text( + &format!(" (size={})", symbol.size), + appearance.deemphasized_text_color, + &mut job, + appearance.code_font.clone(), + ); + } else if appearance.show_symbol_sizes == ShowSymbolSizeState::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)); From 4fddcd4a4cee5d6b39e74bf5c65c8c03a3c654b5 Mon Sep 17 00:00:00 2001 From: BR Date: Sat, 4 Oct 2025 17:19:19 -0700 Subject: [PATCH 3/3] move symbol size config to config-schema --- objdiff-core/config-schema.json | 22 ++++++++++++++++++++++ objdiff-gui/src/app_config.rs | 5 ++++- objdiff-gui/src/views/appearance.rs | 28 ---------------------------- objdiff-gui/src/views/diff.rs | 2 ++ objdiff-gui/src/views/symbol_diff.rs | 11 +++++++---- 5 files changed, 35 insertions(+), 33 deletions(-) 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/appearance.rs b/objdiff-gui/src/views/appearance.rs index be1dbbd1..3eb09327 100644 --- a/objdiff-gui/src/views/appearance.rs +++ b/objdiff-gui/src/views/appearance.rs @@ -13,7 +13,6 @@ pub struct Appearance { pub diff_colors: Vec, pub diff_bg_color: Option, pub theme: egui::Theme, - pub show_symbol_sizes: ShowSymbolSizeState, // Applied by theme #[serde(skip)] @@ -44,12 +43,6 @@ pub struct Appearance { pub next_code_font: Option, } -#[derive(serde::Deserialize, serde::Serialize, PartialEq, Debug)] -pub enum ShowSymbolSizeState { - Off, - Decimal, - Hex, -} pub struct FontState { definitions: egui::FontDefinitions, source: font_kit::source::SystemSource, @@ -67,7 +60,6 @@ impl Default for Appearance { code_font: DEFAULT_CODE_FONT, diff_colors: DEFAULT_COLOR_ROTATION.to_vec(), theme: egui::Theme::Dark, - show_symbol_sizes: ShowSymbolSizeState::Off, text_color: Color32::GRAY, emphasized_text_color: Color32::LIGHT_GRAY, deemphasized_text_color: Color32::DARK_GRAY, @@ -310,26 +302,6 @@ pub fn appearance_window(ctx: &egui::Context, show: &mut bool, appearance: &mut appearance, ); ui.separator(); - egui::ComboBox::from_label("Show symbol sizes") - .selected_text(format!("{:?}", appearance.show_symbol_sizes)) - .show_ui(ui, |ui| { - ui.selectable_value( - &mut appearance.show_symbol_sizes, - ShowSymbolSizeState::Off, - "Off", - ); - ui.selectable_value( - &mut appearance.show_symbol_sizes, - ShowSymbolSizeState::Decimal, - "Decimal", - ); - ui.selectable_value( - &mut appearance.show_symbol_sizes, - ShowSymbolSizeState::Hex, - "Hex", - ); - }); - ui.separator(); ui.horizontal(|ui| { ui.label("Diff fill color:"); let mut diff_bg_color = 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 1def79da..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, @@ -22,7 +22,7 @@ use crate::{ hotkeys, jobs::{is_create_scratch_available, start_create_scratch}, views::{ - appearance::{Appearance, ShowSymbolSizeState}, + appearance::Appearance, diff::{context_menu_items_ui, hover_items_ui}, function_diff::FunctionViewState, write_text, @@ -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,14 +573,14 @@ 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 appearance.show_symbol_sizes == ShowSymbolSizeState::Decimal { + 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 appearance.show_symbol_sizes == ShowSymbolSizeState::Hex { + } else if diff_config.show_symbol_sizes == ShowSymbolSizes::Hex { write_text( &format!(" (size={:x})", symbol.size), appearance.deemphasized_text_color, @@ -661,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| { @@ -785,6 +787,7 @@ pub fn symbol_list_ui( state, appearance, column, + diff_config, ) { ret = Some(result); }