From 0e7fb5a602358f6929ed17c96ca735e01460894e Mon Sep 17 00:00:00 2001 From: Avery Townsend Date: Thu, 29 Jan 2026 12:30:44 -0500 Subject: [PATCH 1/4] merge gnu function and data sections --- objdiff-core/src/obj/read.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index a8aa1dd..7ddb555 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -874,8 +874,11 @@ fn combine_sections( let mut data_sections = BTreeMap::>::new(); let mut text_sections = BTreeMap::>::new(); for (i, section) in sections.iter().enumerate() { - let base_name = - if let Some(i) = section.name.rfind('$') { §ion.name[..i] } else { §ion.name }; + let base_name = if let Some(i) = section.name.rfind(|c| c == '$' || c == '.') { + §ion.name[..i] + } else { + §ion.name + }; match section.kind { SectionKind::Data | SectionKind::Bss => { data_sections.entry(base_name.to_string()).or_default().push(i); From 0f37f3f3a06bc60230f162a6f5d10cad176c8f51 Mon Sep 17 00:00:00 2001 From: Avery Townsend Date: Thu, 29 Jan 2026 12:36:40 -0500 Subject: [PATCH 2/4] fix regression with normal section names --- objdiff-core/src/obj/read.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index 7ddb555..a1be749 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -874,8 +874,8 @@ fn combine_sections( let mut data_sections = BTreeMap::>::new(); let mut text_sections = BTreeMap::>::new(); for (i, section) in sections.iter().enumerate() { - let base_name = if let Some(i) = section.name.rfind(|c| c == '$' || c == '.') { - §ion.name[..i] + let base_name = if let Some(i) = section.name[1..].rfind(|c| c == '$' || c == '.') { + §ion.name[..i + 1] } else { §ion.name }; From 68754f491624d1592e44a8cd446f14741bbd9c0c Mon Sep 17 00:00:00 2001 From: Avery Townsend Date: Thu, 29 Jan 2026 12:40:44 -0500 Subject: [PATCH 3/4] check slice beforehand --- objdiff-core/src/obj/read.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index a1be749..7ceed82 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -874,11 +874,12 @@ fn combine_sections( let mut data_sections = BTreeMap::>::new(); let mut text_sections = BTreeMap::>::new(); for (i, section) in sections.iter().enumerate() { - let base_name = if let Some(i) = section.name[1..].rfind(|c| c == '$' || c == '.') { - §ion.name[..i + 1] - } else { - §ion.name - }; + let base_name = section + .name + .get(1..) + .and_then(|s| s.rfind(|c| c == '$' || c == '.')) + .and_then(|i| section.name.get(..i + 1)) + .unwrap_or(§ion.name); match section.kind { SectionKind::Data | SectionKind::Bss => { data_sections.entry(base_name.to_string()).or_default().push(i); From e3a8237e13dd36f7667b721289861e17fb69159b Mon Sep 17 00:00:00 2001 From: Avery Townsend Date: Thu, 29 Jan 2026 12:45:01 -0500 Subject: [PATCH 4/4] fix clippy --- objdiff-core/src/obj/read.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index 7ceed82..1ba972b 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -877,7 +877,7 @@ fn combine_sections( let base_name = section .name .get(1..) - .and_then(|s| s.rfind(|c| c == '$' || c == '.')) + .and_then(|s| s.rfind(['$', '.'])) .and_then(|i| section.name.get(..i + 1)) .unwrap_or(§ion.name); match section.kind {