From 6c060aa44c49e05bac11a7a370091cc771ba6364 Mon Sep 17 00:00:00 2001 From: rjkiv <76180273+rjkiv@users.noreply.github.com> Date: Sun, 24 Aug 2025 11:53:37 -0700 Subject: [PATCH 1/6] hide except_data symbols --- objdiff-core/src/arch/ppc/mod.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/objdiff-core/src/arch/ppc/mod.rs b/objdiff-core/src/arch/ppc/mod.rs index a40648eb..41d79240 100644 --- a/objdiff-core/src/arch/ppc/mod.rs +++ b/objdiff-core/src/arch/ppc/mod.rs @@ -358,7 +358,22 @@ impl Arch for ArchPpc { } fn extra_symbol_flags(&self, symbol: &object::Symbol) -> SymbolFlagSet { - if self.extab.as_ref().is_some_and(|extab| extab.contains_key(&(symbol.index().0 - 1))) { + // X360 COFFs should automatically hide all symbols starting with "except_data", + // because those are not functions - they're pointers to exception data structs + if self.extensions.eq(&powerpc::Extensions::xenon()) { + match symbol.name() { + Ok(name) => { + if name.starts_with("except_data_"){ + SymbolFlag::Hidden.into() + } + else { + SymbolFlag::none() + } + } + Err(_) => { SymbolFlag::none() } + } + } + else if self.extab.as_ref().is_some_and(|extab| extab.contains_key(&(symbol.index().0 - 1))) { SymbolFlag::HasExtra.into() } else { SymbolFlag::none() From 66c7b8391736e04310ea41528173b4f6bed82973 Mon Sep 17 00:00:00 2001 From: rjkiv <76180273+rjkiv@users.noreply.github.com> Date: Sun, 24 Aug 2025 12:07:51 -0700 Subject: [PATCH 2/6] hide unwinds by default --- objdiff-core/src/arch/ppc/mod.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/objdiff-core/src/arch/ppc/mod.rs b/objdiff-core/src/arch/ppc/mod.rs index 41d79240..b3f6e5e6 100644 --- a/objdiff-core/src/arch/ppc/mod.rs +++ b/objdiff-core/src/arch/ppc/mod.rs @@ -366,12 +366,18 @@ impl Arch for ArchPpc { if name.starts_with("except_data_"){ SymbolFlag::Hidden.into() } + // if the symbol name starts with __unwind and + // TODO: a "show unwinds" modifier is unchecked, + // hide the symbol + else if name.starts_with("__unwind"){ + SymbolFlag::Hidden.into() + } else { SymbolFlag::none() } } Err(_) => { SymbolFlag::none() } - } + } } else if self.extab.as_ref().is_some_and(|extab| extab.contains_key(&(symbol.index().0 - 1))) { SymbolFlag::HasExtra.into() From 242153e072314c0a648f04dec36d811cf0157ca9 Mon Sep 17 00:00:00 2001 From: rjkiv <76180273+rjkiv@users.noreply.github.com> Date: Sun, 31 Aug 2025 14:47:14 -0700 Subject: [PATCH 3/6] move COFF filters to obj/read.rs --- objdiff-core/src/arch/ppc/mod.rs | 23 +---------------------- objdiff-core/src/obj/read.rs | 11 +++++++++++ 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/objdiff-core/src/arch/ppc/mod.rs b/objdiff-core/src/arch/ppc/mod.rs index b3f6e5e6..a40648eb 100644 --- a/objdiff-core/src/arch/ppc/mod.rs +++ b/objdiff-core/src/arch/ppc/mod.rs @@ -358,28 +358,7 @@ impl Arch for ArchPpc { } fn extra_symbol_flags(&self, symbol: &object::Symbol) -> SymbolFlagSet { - // X360 COFFs should automatically hide all symbols starting with "except_data", - // because those are not functions - they're pointers to exception data structs - if self.extensions.eq(&powerpc::Extensions::xenon()) { - match symbol.name() { - Ok(name) => { - if name.starts_with("except_data_"){ - SymbolFlag::Hidden.into() - } - // if the symbol name starts with __unwind and - // TODO: a "show unwinds" modifier is unchecked, - // hide the symbol - else if name.starts_with("__unwind"){ - SymbolFlag::Hidden.into() - } - else { - SymbolFlag::none() - } - } - Err(_) => { SymbolFlag::none() } - } - } - else if self.extab.as_ref().is_some_and(|extab| extab.contains_key(&(symbol.index().0 - 1))) { + if self.extab.as_ref().is_some_and(|extab| extab.contains_key(&(symbol.index().0 - 1))) { SymbolFlag::HasExtra.into() } else { SymbolFlag::none() diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index 52ac8e2a..647710c2 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -74,6 +74,17 @@ fn map_symbol( { flags |= SymbolFlag::Hidden; } + if file.format() == object::BinaryFormat::Coff + { + match symbol.name(){ + Ok(name) => { + if name.starts_with("except_data_") || name.starts_with("__unwind") || name.starts_with("__catch") { + flags |= SymbolFlag::Hidden; + } + } + Err(_) => {} + } + } let kind = match symbol.kind() { object::SymbolKind::Text => SymbolKind::Function, From 83c659f1d738d9b84b02c429419e78e3301c1f7b Mon Sep 17 00:00:00 2001 From: rjkiv <76180273+rjkiv@users.noreply.github.com> Date: Sun, 31 Aug 2025 14:50:14 -0700 Subject: [PATCH 4/6] cargo fmt read.rs --- objdiff-core/src/obj/read.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index 647710c2..c4f91f0a 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -74,11 +74,13 @@ fn map_symbol( { flags |= SymbolFlag::Hidden; } - if file.format() == object::BinaryFormat::Coff - { - match symbol.name(){ + if file.format() == object::BinaryFormat::Coff { + match symbol.name() { Ok(name) => { - if name.starts_with("except_data_") || name.starts_with("__unwind") || name.starts_with("__catch") { + if name.starts_with("except_data_") + || name.starts_with("__unwind") + || name.starts_with("__catch") + { flags |= SymbolFlag::Hidden; } } From 043888a9270c340cdb3c9b97c98665d3b4964c7b Mon Sep 17 00:00:00 2001 From: rjkiv <76180273+rjkiv@users.noreply.github.com> Date: Sun, 31 Aug 2025 14:54:32 -0700 Subject: [PATCH 5/6] clippy moment --- objdiff-core/src/obj/read.rs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index c4f91f0a..95ffb96b 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -75,16 +75,13 @@ fn map_symbol( flags |= SymbolFlag::Hidden; } if file.format() == object::BinaryFormat::Coff { - match symbol.name() { - Ok(name) => { - if name.starts_with("except_data_") - || name.starts_with("__unwind") - || name.starts_with("__catch") - { - flags |= SymbolFlag::Hidden; - } + if let Ok(name) = symbol.name() { + if name.starts_with("except_data_") + || name.starts_with("__unwind") + || name.starts_with("__catch") + { + flags |= SymbolFlag::Hidden; } - Err(_) => {} } } From c4db0add4eb03819dcc80e356fa7865c46974fa1 Mon Sep 17 00:00:00 2001 From: rjkiv <76180273+rjkiv@users.noreply.github.com> Date: Sun, 31 Aug 2025 15:00:25 -0700 Subject: [PATCH 6/6] clippy pls --- objdiff-core/src/obj/read.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index 95ffb96b..71ed0525 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -74,15 +74,13 @@ fn map_symbol( { flags |= SymbolFlag::Hidden; } - if file.format() == object::BinaryFormat::Coff { - if let Ok(name) = symbol.name() { - if name.starts_with("except_data_") - || name.starts_with("__unwind") - || name.starts_with("__catch") - { - flags |= SymbolFlag::Hidden; - } - } + if file.format() == object::BinaryFormat::Coff + && let Ok(name) = symbol.name() + && (name.starts_with("except_data_") + || name.starts_with("__unwind") + || name.starts_with("__catch")) + { + flags |= SymbolFlag::Hidden; } let kind = match symbol.kind() {