fix fix fix!

This commit is contained in:
Jean-Marie Mineau 2025-01-17 11:32:44 +01:00
parent 1d62277f42
commit 65176749bb
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
5 changed files with 31 additions and 36 deletions

View file

@ -384,7 +384,7 @@ impl DebugInfoReader {
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct DebugInfoBuilder {
debug_infos: Vec<DbgBytecode>,
line_start: u32,
line_start: Option<u32>,
parameter_names: Vec<Uleb128p1>,
//pub pc: usize,
@ -402,7 +402,7 @@ impl DebugInfoBuilder {
pub fn new(parameter_names: Vec<Uleb128p1>) -> Self {
Self {
debug_infos: vec![],
line_start: 0,
line_start: None,
parameter_names,
//pc: 0,
address: 0,
@ -578,19 +578,12 @@ impl DebugInfoBuilder {
self.address
)));
}
if self.line_start == 0 {
self.line_start = *line_num;
if self.line_start.is_none() {
self.line_start = Some(*line_num);
self.line = *line_num;
}
let mut line_diff = *line_num as i32 - self.line as i32;
let mut addr_diff = addr - self.address;
if addr_diff > (0xff - 0x0a) / 15 {
self.debug_infos.push(DbgBytecode::AdvancePC {
addr_diff: Uleb128(addr_diff),
});
self.address = *addr;
addr_diff = 0;
}
if !(-4..15 - 4).contains(&line_diff) {
self.debug_infos.push(DbgBytecode::AdvanceLine {
line_diff: Sleb128(line_diff),
@ -598,6 +591,13 @@ impl DebugInfoBuilder {
self.line = *line_num;
line_diff = 0;
}
if addr_diff as i32 * 15 + 0x0a + line_diff + 4 > 0xff {
self.debug_infos.push(DbgBytecode::AdvancePC {
addr_diff: Uleb128(addr_diff),
});
self.address = *addr;
addr_diff = 0;
}
let op = 0x0a + addr_diff as u8 * 15 + (line_diff + 4) as u8;
self.debug_infos.push(DbgBytecode::SpecialOpcode(op));
self.address += addr_diff;
@ -637,7 +637,7 @@ impl DebugInfoBuilder {
None
} else {
Some(DebugInfoItem {
line_start: Uleb128(self.line_start),
line_start: Uleb128(self.line_start.unwrap_or(0)),
parameter_names: self.parameter_names,
bytecode: self.debug_infos,
})