Initial support for line number info

This commit is contained in:
2023-01-21 00:03:56 -05:00
parent ba74d63a99
commit bea0a0007d
6 changed files with 74 additions and 14 deletions

View File

@@ -1,3 +1,5 @@
use std::collections::BTreeMap;
use anyhow::Result;
use ppc750cl::{disasm_iter, Argument};
@@ -19,6 +21,7 @@ pub fn process_code(
data: &[u8],
address: u64,
relocs: &[ObjReloc],
line_info: &Option<BTreeMap<u32, u32>>,
) -> Result<(Vec<u8>, Vec<ObjIns>)> {
let ins_count = data.len() / 4;
let mut ops = Vec::<u8>::with_capacity(ins_count);
@@ -74,6 +77,9 @@ pub fn process_code(
}
}
ops.push(simplified.ins.op as u8);
let line = line_info
.as_ref()
.and_then(|map| map.range(..=simplified.ins.addr).last().map(|(_, &b)| b));
insts.push(ObjIns {
address: simplified.ins.addr,
code: simplified.ins.code,
@@ -82,6 +88,7 @@ pub fn process_code(
reloc: reloc.cloned(),
op: 0,
branch_dest: None,
line,
});
}
Ok((ops, insts))