| ... | @@ -157,6 +157,7 @@ const LineNumberProgram = struct { | ... | @@ -157,6 +157,7 @@ const LineNumberProgram = struct { |
| 157 | include_dirs: []const []const u8, | 157 | include_dirs: []const []const u8, |
| 158 | file_entries: *ArrayList(FileEntry), | 158 | file_entries: *ArrayList(FileEntry), |
| 159 | | 159 | |
| | 160 | prev_valid: bool, |
| 160 | prev_address: usize, | 161 | prev_address: usize, |
| 161 | prev_file: usize, | 162 | prev_file: usize, |
| 162 | prev_line: i64, | 163 | prev_line: i64, |
| ... | @@ -175,6 +176,7 @@ const LineNumberProgram = struct { | ... | @@ -175,6 +176,7 @@ const LineNumberProgram = struct { |
| 175 | self.basic_block = false; | 176 | self.basic_block = false; |
| 176 | self.end_sequence = false; | 177 | self.end_sequence = false; |
| 177 | // Invalidate all the remaining fields | 178 | // Invalidate all the remaining fields |
| | 179 | self.prev_valid = false; |
| 178 | self.prev_address = 0; | 180 | self.prev_address = 0; |
| 179 | self.prev_file = undefined; | 181 | self.prev_file = undefined; |
| 180 | self.prev_line = undefined; | 182 | self.prev_line = undefined; |
| ... | @@ -197,6 +199,7 @@ const LineNumberProgram = struct { | ... | @@ -197,6 +199,7 @@ const LineNumberProgram = struct { |
| 197 | .file_entries = file_entries, | 199 | .file_entries = file_entries, |
| 198 | .default_is_stmt = is_stmt, | 200 | .default_is_stmt = is_stmt, |
| 199 | .target_address = target_address, | 201 | .target_address = target_address, |
| | 202 | .prev_valid = false, |
| 200 | .prev_address = 0, | 203 | .prev_address = 0, |
| 201 | .prev_file = undefined, | 204 | .prev_file = undefined, |
| 202 | .prev_line = undefined, | 205 | .prev_line = undefined, |
| ... | @@ -208,7 +211,7 @@ const LineNumberProgram = struct { | ... | @@ -208,7 +211,7 @@ const LineNumberProgram = struct { |
| 208 | } | 211 | } |
| 209 | | 212 | |
| 210 | pub fn checkLineMatch(self: *LineNumberProgram) !?debug.LineInfo { | 213 | 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) { |
| 212 | const file_entry = if (self.prev_file == 0) { | 215 | const file_entry = if (self.prev_file == 0) { |
| 213 | return error.MissingDebugInfo; | 216 | return error.MissingDebugInfo; |
| 214 | } else if (self.prev_file - 1 >= self.file_entries.items.len) { | 217 | } else if (self.prev_file - 1 >= self.file_entries.items.len) { |
| ... | @@ -228,6 +231,7 @@ const LineNumberProgram = struct { | ... | @@ -228,6 +231,7 @@ const LineNumberProgram = struct { |
| 228 | }; | 231 | }; |
| 229 | } | 232 | } |
| 230 | | 233 | |
| | 234 | self.prev_valid = true; |
| 231 | self.prev_address = self.address; | 235 | self.prev_address = self.address; |
| 232 | self.prev_file = self.file; | 236 | self.prev_file = self.file; |
| 233 | self.prev_line = self.line; | 237 | self.prev_line = self.line; |