mirror of
https://github.com/encounter/objdiff.git
synced 2025-07-03 03:36:08 +00:00
Clear pool relocs in volatile registers on function call
This fixes some false positives.
This commit is contained in:
parent
9051f48731
commit
507b988aa3
@ -520,6 +520,16 @@ fn generate_fake_pool_reloc_for_addr_mapping(
|
|||||||
) => {
|
) => {
|
||||||
active_pool_relocs.insert(addr_dst_gpr.0, reloc.clone()); // `lis` + `ori`
|
active_pool_relocs.insert(addr_dst_gpr.0, reloc.clone()); // `lis` + `ori`
|
||||||
}
|
}
|
||||||
|
(Opcode::B, _, _, _) => {
|
||||||
|
if simplified.mnemonic == "bl" {
|
||||||
|
// When encountering a function call, clear any active pool relocations from
|
||||||
|
// the volatile registers (r0, r3-r12), but not the nonvolatile registers.
|
||||||
|
active_pool_relocs.remove(&0);
|
||||||
|
for gpr in 3..12 {
|
||||||
|
active_pool_relocs.remove(&gpr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
} else if let Some((offset, addr_src_gpr, addr_dst_gpr)) =
|
} else if let Some((offset, addr_src_gpr, addr_dst_gpr)) =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user