From 0c2e82579c319faa947396b6c988799c28aa02df Mon Sep 17 00:00:00 2001 From: dbalatoni13 <40299962+dbalatoni13@users.noreply.github.com> Date: Sat, 1 Nov 2025 20:22:59 +0100 Subject: [PATCH 1/3] Adjust symbol name matching logic for GCC --- objdiff-core/src/diff/data.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/objdiff-core/src/diff/data.rs b/objdiff-core/src/diff/data.rs index 17bf1e81..f4af9453 100644 --- a/objdiff-core/src/diff/data.rs +++ b/objdiff-core/src/diff/data.rs @@ -37,12 +37,13 @@ pub fn diff_bss_symbol( pub fn symbol_name_matches(left_name: &str, right_name: &str) -> bool { // Match Metrowerks symbol$1234 against symbol$2345 - if let Some((prefix, suffix)) = left_name.split_once('$') { + // and GCC symbol.1234 against symbol.2345 + if let Some((prefix, suffix)) = left_name.split_once(|c| c == '$' || c == '.') { if !suffix.chars().all(char::is_numeric) { return false; } right_name - .split_once('$') + .split_once(|c| c == '$' || c == '.') .is_some_and(|(p, s)| p == prefix && s.chars().all(char::is_numeric)) } else { left_name == right_name From ff284f8031980ed8da578f04a2a26f4375dce8d3 Mon Sep 17 00:00:00 2001 From: dbalatoni13 <40299962+dbalatoni13@users.noreply.github.com> Date: Sat, 1 Nov 2025 20:29:45 +0100 Subject: [PATCH 2/3] Turn $ and . into a list --- objdiff-core/src/diff/data.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/objdiff-core/src/diff/data.rs b/objdiff-core/src/diff/data.rs index f4af9453..cff90e77 100644 --- a/objdiff-core/src/diff/data.rs +++ b/objdiff-core/src/diff/data.rs @@ -38,12 +38,12 @@ pub fn diff_bss_symbol( pub fn symbol_name_matches(left_name: &str, right_name: &str) -> bool { // Match Metrowerks symbol$1234 against symbol$2345 // and GCC symbol.1234 against symbol.2345 - if let Some((prefix, suffix)) = left_name.split_once(|c| c == '$' || c == '.') { + if let Some((prefix, suffix)) = left_name.split_once(&['$', '.']) { if !suffix.chars().all(char::is_numeric) { return false; } right_name - .split_once(|c| c == '$' || c == '.') + .split_once(&['$', '.']) .is_some_and(|(p, s)| p == prefix && s.chars().all(char::is_numeric)) } else { left_name == right_name From fca00bb915ab3bf9c6832f875b6c83a5e4e75171 Mon Sep 17 00:00:00 2001 From: dbalatoni13 <40299962+dbalatoni13@users.noreply.github.com> Date: Sat, 1 Nov 2025 20:33:31 +0100 Subject: [PATCH 3/3] Fix borrow issue --- objdiff-core/src/diff/data.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/objdiff-core/src/diff/data.rs b/objdiff-core/src/diff/data.rs index cff90e77..6842c90e 100644 --- a/objdiff-core/src/diff/data.rs +++ b/objdiff-core/src/diff/data.rs @@ -38,12 +38,12 @@ pub fn diff_bss_symbol( pub fn symbol_name_matches(left_name: &str, right_name: &str) -> bool { // Match Metrowerks symbol$1234 against symbol$2345 // and GCC symbol.1234 against symbol.2345 - if let Some((prefix, suffix)) = left_name.split_once(&['$', '.']) { + if let Some((prefix, suffix)) = left_name.split_once(['$', '.']) { if !suffix.chars().all(char::is_numeric) { return false; } right_name - .split_once(&['$', '.']) + .split_once(['$', '.']) .is_some_and(|(p, s)| p == prefix && s.chars().all(char::is_numeric)) } else { left_name == right_name