Support R_MIPS_GPREL16 relocations correctly (#88)

* Support R_MIPS_GPREL16 relocations correctly

symbols defined in the same file require adding a
special ri_gp_value from the .reginfo section to
their relocation calculations.

* Run nightly rustfmt

* Prevent potential panic when slicing .reginfo
This commit is contained in:
Steven Casper
2024-08-08 22:20:41 -04:00
committed by GitHub
parent fc598af329
commit 09cc9952df
6 changed files with 46 additions and 8 deletions

View File

@@ -1,7 +1,7 @@
use std::{borrow::Cow, collections::BTreeMap};
use anyhow::{bail, Result};
use object::{Architecture, Object, ObjectSymbol, Relocation, RelocationFlags, Symbol};
use object::{Architecture, File, Object, ObjectSymbol, Relocation, RelocationFlags, Symbol};
use crate::{
diff::DiffObjConfig,
@@ -28,8 +28,13 @@ pub trait ObjArch: Send + Sync {
config: &DiffObjConfig,
) -> Result<ProcessCodeResult>;
fn implcit_addend(&self, section: &ObjSection, address: u64, reloc: &Relocation)
-> Result<i64>;
fn implcit_addend(
&self,
file: &File<'_>,
section: &ObjSection,
address: u64,
reloc: &Relocation,
) -> Result<i64>;
fn demangle(&self, _name: &str) -> Option<String> { None }