fix fix fix!
This commit is contained in:
parent
1d62277f42
commit
65176749bb
5 changed files with 31 additions and 36 deletions
|
|
@ -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,
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue