diff --git a/objdiff-core/src/arch/mod.rs b/objdiff-core/src/arch/mod.rs index 93e0ff8..64a633b 100644 --- a/objdiff-core/src/arch/mod.rs +++ b/objdiff-core/src/arch/mod.rs @@ -462,6 +462,7 @@ impl Arch for ArchDummy { fn data_reloc_size(&self, _flags: RelocationFlags) -> usize { 0 } } +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum RelocationOverrideTarget { Keep, Skip, @@ -469,6 +470,7 @@ pub enum RelocationOverrideTarget { Section(object::SectionIndex), } +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct RelocationOverride { pub target: RelocationOverrideTarget, pub addend: i64, diff --git a/objdiff-core/src/arch/ppc/mod.rs b/objdiff-core/src/arch/ppc/mod.rs index 573cbab..b7cc034 100644 --- a/objdiff-core/src/arch/ppc/mod.rs +++ b/objdiff-core/src/arch/ppc/mod.rs @@ -229,13 +229,19 @@ impl Arch for ArchPpc { typ: pe::IMAGE_REL_PPC_PAIR }) }) - .map_or(Ok(None), |(_, reloc)| match reloc.target() { - object::RelocationTarget::Symbol(index) => Ok(Some(RelocationOverride { + .map_or( + Ok(Some(RelocationOverride { target: RelocationOverrideTarget::Keep, - addend: index.0 as u16 as i16 as i64, + addend: 0, })), - target => Err(anyhow!("Unsupported IMAGE_REL_PPC_PAIR target {target:?}")), - }), + |(_, reloc)| match reloc.target() { + object::RelocationTarget::Symbol(index) => Ok(Some(RelocationOverride { + target: RelocationOverrideTarget::Keep, + addend: index.0 as u16 as i16 as i64, + })), + target => Err(anyhow!("Unsupported IMAGE_REL_PPC_PAIR target {target:?}")), + }, + ), // Skip PAIR relocations as they are handled by the previous case object::RelocationFlags::Coff { typ: pe::IMAGE_REL_PPC_PAIR } => { Ok(Some(RelocationOverride { target: RelocationOverrideTarget::Skip, addend: 0 })) diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index 1eb40be..d443ace 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -361,7 +361,8 @@ fn map_section_relocations( None => { ensure!( !reloc.has_implicit_addend(), - "Unsupported implicit relocation {:?}", + "Unsupported {:?} implicit relocation {:?}", + obj_file.architecture(), reloc.flags() ); }