show symbol size in symbol list (#268)

* show symbol size in symbol list

* configs for show symbol size

* move symbol size config to config-schema
This commit is contained in:
BR-
2025-10-08 19:32:07 -07:00
committed by GitHub
parent 572afa8551
commit 781071761a
4 changed files with 47 additions and 2 deletions

View File

@@ -82,6 +82,27 @@
"name": "Space between args", "name": "Space between args",
"description": "Adds a space between arguments in the diff output." "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", "id": "combineDataSections",
"type": "boolean", "type": "boolean",
@@ -296,6 +317,7 @@
"properties": [ "properties": [
"functionRelocDiffs", "functionRelocDiffs",
"demangler", "demangler",
"showSymbolSizes",
"spaceBetweenArgs", "spaceBetweenArgs",
"combineDataSections", "combineDataSections",
"combineTextSections" "combineTextSections"

View File

@@ -6,7 +6,7 @@ use objdiff_core::{
config::ScratchConfig, config::ScratchConfig,
diff::{ diff::{
ArmArchVersion, ArmR9Usage, DiffObjConfig, FunctionRelocDiffs, MipsAbi, MipsInstrCategory, ArmArchVersion, ArmR9Usage, DiffObjConfig, FunctionRelocDiffs, MipsAbi, MipsInstrCategory,
X86Formatter, ShowSymbolSizes, X86Formatter,
}, },
}; };
use typed_path::{Utf8PlatformPathBuf, Utf8UnixPathBuf}; use typed_path::{Utf8PlatformPathBuf, Utf8UnixPathBuf};
@@ -227,6 +227,7 @@ pub struct DiffObjConfigV1 {
pub relax_reloc_diffs: bool, pub relax_reloc_diffs: bool,
#[serde(default = "bool_true")] #[serde(default = "bool_true")]
pub space_between_args: bool, pub space_between_args: bool,
pub show_symbol_sizes: ShowSymbolSizes,
pub combine_data_sections: bool, pub combine_data_sections: bool,
// x86 // x86
pub x86_formatter: X86Formatter, pub x86_formatter: X86Formatter,
@@ -248,6 +249,7 @@ impl Default for DiffObjConfigV1 {
Self { Self {
relax_reloc_diffs: false, relax_reloc_diffs: false,
space_between_args: true, space_between_args: true,
show_symbol_sizes: Default::default(),
combine_data_sections: false, combine_data_sections: false,
x86_formatter: Default::default(), x86_formatter: Default::default(),
mips_abi: Default::default(), mips_abi: Default::default(),
@@ -272,6 +274,7 @@ impl DiffObjConfigV1 {
FunctionRelocDiffs::default() FunctionRelocDiffs::default()
}, },
space_between_args: self.space_between_args, space_between_args: self.space_between_args,
show_symbol_sizes: self.show_symbol_sizes,
combine_data_sections: self.combine_data_sections, combine_data_sections: self.combine_data_sections,
x86_formatter: self.x86_formatter, x86_formatter: self.x86_formatter,
mips_abi: self.mips_abi, mips_abi: self.mips_abi,

View File

@@ -665,6 +665,7 @@ fn diff_col_ui(
appearance, appearance,
column, column,
open_sections, open_sections,
diff_config,
) { ) {
match (column, action) { match (column, action) {
( (
@@ -703,6 +704,7 @@ fn diff_col_ui(
appearance, appearance,
column, column,
open_sections, open_sections,
diff_config,
) { ) {
ret = Some(result); ret = Some(result);
} }

View File

@@ -6,7 +6,7 @@ use egui::{
}; };
use objdiff_core::{ use objdiff_core::{
diff::{ diff::{
ObjectDiff, SymbolDiff, DiffObjConfig, ObjectDiff, ShowSymbolSizes, SymbolDiff,
display::{ display::{
HighlightKind, SectionDisplay, SymbolFilter, SymbolNavigationKind, display_sections, HighlightKind, SectionDisplay, SymbolFilter, SymbolNavigationKind, display_sections,
symbol_context, symbol_hover, symbol_context, symbol_hover,
@@ -525,6 +525,7 @@ fn symbol_ui(
state: &SymbolViewState, state: &SymbolViewState,
appearance: &Appearance, appearance: &Appearance,
column: usize, column: usize,
diff_config: &DiffObjConfig,
) -> Option<DiffViewAction> { ) -> Option<DiffViewAction> {
let mut ret = None; let mut ret = None;
let mut job = LayoutJob::default(); 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(") ", appearance.text_color, &mut job, appearance.code_font.clone());
} }
write_text(name, appearance.highlight_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) let response = egui::Button::selectable(selected, job)
.ui(ui) .ui(ui)
.on_hover_ui_at_pointer(|ui| symbol_hover_ui(ui, ctx, symbol_idx, appearance)); .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, appearance: &Appearance,
column: usize, column: usize,
open_sections: Option<bool>, open_sections: Option<bool>,
diff_config: &DiffObjConfig,
) -> Option<DiffViewAction> { ) -> Option<DiffViewAction> {
let mut ret = None; let mut ret = None;
ScrollArea::both().auto_shrink([false, false]).show(ui, |ui| { ScrollArea::both().auto_shrink([false, false]).show(ui, |ui| {
@@ -770,6 +787,7 @@ pub fn symbol_list_ui(
state, state,
appearance, appearance,
column, column,
diff_config,
) { ) {
ret = Some(result); ret = Some(result);
} }