authorgravatar for michael.dusan@gmail.comMichael Dusan <michael.dusan@gmail.com> 2021-04-12 15:27:59-04:00
committergravatar for michael.dusan@gmail.comMichael Dusan <michael.dusan@gmail.com> 2021-04-12 17:18:56-04:00
log28ae4982542c2bdf90dd355b51bfc309ec315e82
tree034b1ba751807ef3880277be57b67a2fa7aa43f8
parent0fa1a2cb732c85a59e72a720f19bc0d69ac9b08c

dwarf: fix LineNumberProgram check

- on first iteration populate `prev_` fields and do nothing else closes #8421

1 files changed, 5 insertions(+), 1 deletions(-)

lib/std/dwarf.zig+5-1
......@@ -157,6 +157,7 @@ const LineNumberProgram = struct {
157157 include_dirs: []const []const u8,
158158 file_entries: *ArrayList(FileEntry),
159159
160 prev_valid: bool,
160161 prev_address: usize,
161162 prev_file: usize,
162163 prev_line: i64,
......@@ -175,6 +176,7 @@ const LineNumberProgram = struct {
175176 self.basic_block = false;
176177 self.end_sequence = false;
177178 // Invalidate all the remaining fields
179 self.prev_valid = false;
178180 self.prev_address = 0;
179181 self.prev_file = undefined;
180182 self.prev_line = undefined;
......@@ -197,6 +199,7 @@ const LineNumberProgram = struct {
197199 .file_entries = file_entries,
198200 .default_is_stmt = is_stmt,
199201 .target_address = target_address,
202 .prev_valid = false,
200203 .prev_address = 0,
201204 .prev_file = undefined,
202205 .prev_line = undefined,
......@@ -208,7 +211,7 @@ const LineNumberProgram = struct {
208211 }
209212
210213 pub fn checkLineMatch(self: *LineNumberProgram) !?debug.LineInfo {
211 if (self.target_address >= self.prev_address and self.target_address < self.address) {
214 if (self.prev_valid and self.target_address >= self.prev_address and self.target_address < self.address) {
212215 const file_entry = if (self.prev_file == 0) {
213216 return error.MissingDebugInfo;
214217 } else if (self.prev_file - 1 >= self.file_entries.items.len) {
......@@ -228,6 +231,7 @@ const LineNumberProgram = struct {
228231 };
229232 }
230233
234 self.prev_valid = true;
231235 self.prev_address = self.address;
232236 self.prev_file = self.file;
233237 self.prev_line = self.line;