mirror of
https://github.com/encounter/objdiff.git
synced 2025-12-08 13:15:04 +00:00
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:
@@ -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"
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user