From e2b98eb517c9b1d3d1451484146f2835e7d7ceae Mon Sep 17 00:00:00 2001 From: Floze <88098863+floze-the-genius@users.noreply.github.com> Date: Sun, 19 Jul 2026 22:23:09 +0400 Subject: [PATCH 1/4] Fix ARM trailing data directive size --- objdiff-core/src/arch/arm.rs | 44 +++++++++++++++++++----- objdiff-core/src/arch/mod.rs | 3 ++ objdiff-core/src/obj/read.rs | 1 + objdiff-core/tests/arch_arm.rs | 22 ++++++++++++ objdiff-core/tests/data/arm/issue_382.o | Bin 0 -> 214920 bytes 5 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 objdiff-core/tests/data/arm/issue_382.o diff --git a/objdiff-core/src/arch/arm.rs b/objdiff-core/src/arch/arm.rs index 4838ed28..50d4dc0a 100644 --- a/objdiff-core/src/arch/arm.rs +++ b/objdiff-core/src/arch/arm.rs @@ -162,6 +162,10 @@ impl ArchArm { } impl Arch for ArchArm { + fn pre_init(&mut self, sections: &[Section], symbols: &[Symbol], _symbol_indices: &[usize]) { + self.disasm_modes = Self::get_mapping_symbols(sections, symbols); + } + fn post_init(&mut self, sections: &[Section], symbols: &[Symbol], _symbol_indices: &[usize]) { self.disasm_modes = Self::get_mapping_symbols(sections, symbols); } @@ -474,20 +478,24 @@ impl Arch for ArchArm { section: &Section, mut next_address: u64, ) -> Result { - // TODO: This should probably check the disasm mode and trim accordingly, - // but self.disasm_modes isn't populated until post_init, so it needs a refactor. - // Trim any trailing 2-byte zeroes from the end (padding) while next_address >= symbol.address + 2 + && !symbol.section.is_some_and(|section_idx| { + self.disasm_modes + .get(§ion_idx) + .and_then(|mappings| { + mappings.iter().rfind(|mapping| mapping.address as u64 <= next_address - 2) + }) + .is_some_and(|mapping| mapping.ends_with_complete_data_words(next_address)) + }) && let Some(data) = section.data_range(next_address - 2, 2) && data == [0u8; 2] + && !section.relocation_at(next_address.saturating_sub(4), 4).is_some_and(|relocation| { + relocation.address + self.data_reloc_size(relocation.flags) as u64 + > next_address - 2 + }) { next_address -= 2; - if let Some(relocation) = section.relocation_at(next_address, 2) { - // Avoid cutting trailing relocations in half. - next_address += self.data_reloc_size(relocation.flags) as u64; - break; - } } Ok(next_address.saturating_sub(symbol.address)) } @@ -500,6 +508,11 @@ struct DisasmMode { } impl DisasmMode { + fn ends_with_complete_data_words(self, end_address: u64) -> bool { + let data_size = end_address.saturating_sub(self.address as u64); + self.mapping == unarm::ParseMode::Data && data_size >= 4 && data_size.is_multiple_of(4) + } + fn from_object_symbol<'a>(sym: &object::Symbol<'a, '_, &'a [u8]>) -> Option { sym.name() .ok() @@ -645,3 +658,18 @@ impl unarm::FormatIns for ArgsFormatter<'_> { Ok(()) } } + +#[cfg(test)] +mod tests { + use super::DisasmMode; + + #[test] + fn complete_data_words_exclude_trailing_halfword_padding() { + let mapping = DisasmMode { address: 0x1000, mapping: unarm::ParseMode::Data }; + + assert!(!mapping.ends_with_complete_data_words(0x1002)); + assert!(mapping.ends_with_complete_data_words(0x1004)); + assert!(!mapping.ends_with_complete_data_words(0x1006)); + assert!(mapping.ends_with_complete_data_words(0x1008)); + } +} diff --git a/objdiff-core/src/arch/mod.rs b/objdiff-core/src/arch/mod.rs index eb0029e6..8fb30c4e 100644 --- a/objdiff-core/src/arch/mod.rs +++ b/objdiff-core/src/arch/mod.rs @@ -390,6 +390,9 @@ impl dyn Arch { } pub trait Arch: Any + Debug + Send + Sync { + /// Performs arch-specific initialization needed before inferring zero-sized symbols. + fn pre_init(&mut self, _sections: &[Section], _symbols: &[Symbol], _symbol_indices: &[usize]) {} + /// Finishes arch-specific initialization that must be done after sections have been combined. fn post_init(&mut self, _sections: &[Section], _symbols: &[Symbol], _symbol_indices: &[usize]) { } diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index 6000159d..eb624615 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -1076,6 +1076,7 @@ pub fn parse(data: &[u8], config: &DiffObjConfig, diff_side: DiffSide) -> Result let (mut symbols, symbol_indices) = map_symbols(arch.as_ref(), &obj_file, §ion_indices, split_meta.as_ref(), config)?; map_relocations(arch.as_ref(), &obj_file, &mut sections, §ion_indices, &symbol_indices)?; + arch.pre_init(§ions, &symbols, &symbol_indices); // Infer symbol sizes for 0-size symbols (must be done after map_relocations is called) infer_symbol_sizes(arch.as_ref(), &mut symbols, §ions)?; parse_line_info(&obj_file, &mut sections, §ion_indices, data)?; diff --git a/objdiff-core/tests/arch_arm.rs b/objdiff-core/tests/arch_arm.rs index 96bc7e17..ed114369 100644 --- a/objdiff-core/tests/arch_arm.rs +++ b/objdiff-core/tests/arch_arm.rs @@ -115,6 +115,28 @@ fn trim_trailing_hword() { insta::assert_snapshot!(output); } +#[test] +#[cfg(feature = "arm")] +fn preserve_trailing_data_directive() { + let diff_config = diff::DiffObjConfig::default(); + let obj = obj::read::parse( + include_object!("data/arm/issue_382.o"), + &diff_config, + diff::DiffSide::Base, + ) + .unwrap(); + let symbol_idx = obj.symbols.iter().position(|s| s.name == "sub_08014184").unwrap(); + let symbol = &obj.symbols[symbol_idx]; + assert_eq!(symbol.size, 0xac); + + let diff = diff::code::no_diff_code(&obj, symbol_idx, &diff_config).unwrap(); + let output = common::display_diff(&obj, &diff, symbol_idx, &diff_config); + assert!( + output.contains(r#"Opcode(".word", 65534)"#), + "the final $d mapping symbol must preserve the 4-byte data directive:\n{output}" + ); +} + #[test] #[cfg(feature = "arm")] fn do_not_trim_trailing_relocations() { diff --git a/objdiff-core/tests/data/arm/issue_382.o b/objdiff-core/tests/data/arm/issue_382.o new file mode 100644 index 0000000000000000000000000000000000000000..37244a7490f13634e1ca53273aa7c612fbe5864a GIT binary patch literal 214920 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�|yybfLj?)0`Fw! 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

C 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 HhQI#}WxV?| literal 0 HcmV?d00001 From 2c6124bd9f7b09cc0f352e6e51735cd5c63b99f8 Mon Sep 17 00:00:00 2001 From: Floze <88098863+floze-the-genius@users.noreply.github.com> Date: Tue, 21 Jul 2026 20:43:06 +0400 Subject: [PATCH 2/4] fix(arm): check all trailing relocations --- objdiff-core/src/arch/arm.rs | 54 ++++++++++++++++++++++++++++++++---- objdiff-core/src/obj/mod.rs | 23 ++++++--------- 2 files changed, 58 insertions(+), 19 deletions(-) diff --git a/objdiff-core/src/arch/arm.rs b/objdiff-core/src/arch/arm.rs index 50d4dc0a..51639b24 100644 --- a/objdiff-core/src/arch/arm.rs +++ b/objdiff-core/src/arch/arm.rs @@ -159,6 +159,19 @@ impl ArchArm { }; Ok(ins) } + + fn has_relocation_overlapping_trailing_halfword( + &self, + section: &Section, + end_address: u64, + ) -> bool { + let word_start = end_address.saturating_sub(4); + let halfword_start = end_address.saturating_sub(2); + section.relocations_at(word_start, 4).any(|relocation| { + relocation.address.saturating_add(self.data_reloc_size(relocation.flags) as u64) + > halfword_start + }) + } } impl Arch for ArchArm { @@ -490,10 +503,7 @@ impl Arch for ArchArm { }) && let Some(data) = section.data_range(next_address - 2, 2) && data == [0u8; 2] - && !section.relocation_at(next_address.saturating_sub(4), 4).is_some_and(|relocation| { - relocation.address + self.data_reloc_size(relocation.flags) as u64 - > next_address - 2 - }) + && !self.has_relocation_overlapping_trailing_halfword(section, next_address) { next_address -= 2; } @@ -661,7 +671,10 @@ impl unarm::FormatIns for ArgsFormatter<'_> { #[cfg(test)] mod tests { - use super::DisasmMode; + use object::elf; + + use super::{ArchArm, DisasmMode}; + use crate::obj::{Relocation, RelocationFlags, Section}; #[test] fn complete_data_words_exclude_trailing_halfword_padding() { @@ -672,4 +685,35 @@ mod tests { assert!(!mapping.ends_with_complete_data_words(0x1006)); assert!(mapping.ends_with_complete_data_words(0x1008)); } + + #[test] + fn checks_every_relocation_before_trimming_trailing_halfword() { + let arch = ArchArm { + disasm_modes: Default::default(), + detected_version: None, + endianness: object::Endianness::Little, + }; + let mut section = Section { + relocations: vec![ + Relocation { + flags: RelocationFlags::Elf(elf::R_ARM_ABS16), + address: 0x1000, + target_symbol: 0, + addend: 0, + }, + Relocation { + flags: RelocationFlags::Elf(elf::R_ARM_ABS16), + address: 0x1002, + target_symbol: 1, + addend: 0, + }, + ], + ..Default::default() + }; + + assert!(arch.has_relocation_overlapping_trailing_halfword(§ion, 0x1004)); + + section.relocations.pop(); + assert!(!arch.has_relocation_overlapping_trailing_halfword(§ion, 0x1004)); + } } diff --git a/objdiff-core/src/obj/mod.rs b/objdiff-core/src/obj/mod.rs index 479186e1..d0c3eca6 100644 --- a/objdiff-core/src/obj/mod.rs +++ b/objdiff-core/src/obj/mod.rs @@ -113,21 +113,16 @@ impl Section { self.align.map_or(MIN_ALIGNMENT, |align| align.get().max(MIN_ALIGNMENT)) } + pub fn relocations_at(&self, address: u64, size: u8) -> impl Iterator { + let start = self.relocations.partition_point(|relocation| relocation.address < address); + let end = address.saturating_add(size as u64); + self.relocations[start..] + .iter() + .take_while(move |relocation| relocation.address == address || relocation.address < end) + } + pub fn relocation_at(&self, address: u64, size: u8) -> Option<&Relocation> { - match self.relocations.binary_search_by_key(&address, |r| r.address) { - Ok(mut i) => { - // Find the first relocation at the address - while i - .checked_sub(1) - .and_then(|n| self.relocations.get(n)) - .is_some_and(|r| r.address == address) - { - i -= 1; - } - self.relocations.get(i) - } - Err(i) => self.relocations.get(i).filter(|r| r.address < address + size as u64), - } + self.relocations_at(address, size).next() } pub fn resolve_relocation_at<'obj>( From 6144e2ecc631cb883ad403a74365b1d27511acdb Mon Sep 17 00:00:00 2001 From: Floze <88098863+floze-the-genius@users.noreply.github.com> Date: Tue, 21 Jul 2026 21:25:48 +0400 Subject: [PATCH 3/4] fix(arm): account for data word alignment --- objdiff-core/src/arch/arm.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/objdiff-core/src/arch/arm.rs b/objdiff-core/src/arch/arm.rs index 51639b24..07ca8de6 100644 --- a/objdiff-core/src/arch/arm.rs +++ b/objdiff-core/src/arch/arm.rs @@ -520,7 +520,12 @@ struct DisasmMode { impl DisasmMode { fn ends_with_complete_data_words(self, end_address: u64) -> bool { let data_size = end_address.saturating_sub(self.address as u64); - self.mapping == unarm::ParseMode::Data && data_size >= 4 && data_size.is_multiple_of(4) + let bytes_until_word_alignment = (4 - (self.address as u64 % 4)) % 4; + let aligned_data_size = data_size.saturating_sub(bytes_until_word_alignment); + self.mapping == unarm::ParseMode::Data + && data_size >= bytes_until_word_alignment + && aligned_data_size >= 4 + && aligned_data_size.is_multiple_of(4) } fn from_object_symbol<'a>(sym: &object::Symbol<'a, '_, &'a [u8]>) -> Option { @@ -684,6 +689,14 @@ mod tests { assert!(mapping.ends_with_complete_data_words(0x1004)); assert!(!mapping.ends_with_complete_data_words(0x1006)); assert!(mapping.ends_with_complete_data_words(0x1008)); + + let unaligned_mapping = + DisasmMode { address: 0x1002, mapping: unarm::ParseMode::Data }; + assert!(!unaligned_mapping.ends_with_complete_data_words(0x1004)); + assert!(!unaligned_mapping.ends_with_complete_data_words(0x1006)); + assert!(unaligned_mapping.ends_with_complete_data_words(0x1008)); + assert!(!unaligned_mapping.ends_with_complete_data_words(0x100a)); + assert!(unaligned_mapping.ends_with_complete_data_words(0x100c)); } #[test] From 64cf49261281db9d63b46cf80649401deb569fcb Mon Sep 17 00:00:00 2001 From: Floze <88098863+floze-the-genius@users.noreply.github.com> Date: Tue, 21 Jul 2026 21:30:32 +0400 Subject: [PATCH 4/4] style(arm): format alignment regression test --- objdiff-core/src/arch/arm.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/objdiff-core/src/arch/arm.rs b/objdiff-core/src/arch/arm.rs index 07ca8de6..67867f93 100644 --- a/objdiff-core/src/arch/arm.rs +++ b/objdiff-core/src/arch/arm.rs @@ -690,8 +690,7 @@ mod tests { assert!(!mapping.ends_with_complete_data_words(0x1006)); assert!(mapping.ends_with_complete_data_words(0x1008)); - let unaligned_mapping = - DisasmMode { address: 0x1002, mapping: unarm::ParseMode::Data }; + let unaligned_mapping = DisasmMode { address: 0x1002, mapping: unarm::ParseMode::Data }; assert!(!unaligned_mapping.ends_with_complete_data_words(0x1004)); assert!(!unaligned_mapping.ends_with_complete_data_words(0x1006)); assert!(unaligned_mapping.ends_with_complete_data_words(0x1008));