| ... | ... | @@ -174,28 +174,30 @@ pub fn resolveAddressesDwarf( |
| 174 | 174 | continue :next_pc; |
| 175 | 175 | } |
| 176 | 176 | const cu = &d.compile_unit_list.items[range.compile_unit_index]; |
| 177 | | if (cu.src_loc_cache == null) { |
| 178 | | cov.mutex.unlock(); |
| 179 | | defer cov.mutex.lock(); |
| 180 | | d.populateSrcLocCache(gpa, cu) catch |err| switch (err) { |
| 181 | | error.MissingDebugInfo, error.InvalidDebugInfo => { |
| 182 | | out.* = SourceLocation.invalid; |
| 183 | | continue :next_pc; |
| 184 | | }, |
| 185 | | else => |e| return e, |
| 186 | | }; |
| 187 | | } |
| 188 | | const slc = &cu.src_loc_cache.?; |
| 189 | | const table_addrs = slc.line_table.keys(); |
| 190 | 177 | if (cu != prev_cu) { |
| 191 | 178 | prev_cu = cu; |
| 179 | if (cu.src_loc_cache == null) { |
| 180 | cov.mutex.unlock(); |
| 181 | defer cov.mutex.lock(); |
| 182 | d.populateSrcLocCache(gpa, cu) catch |err| switch (err) { |
| 183 | error.MissingDebugInfo, error.InvalidDebugInfo => { |
| 184 | out.* = SourceLocation.invalid; |
| 185 | continue :next_pc; |
| 186 | }, |
| 187 | else => |e| return e, |
| 188 | }; |
| 189 | } |
| 190 | const slc = &cu.src_loc_cache.?; |
| 191 | const table_addrs = slc.line_table.keys(); |
| 192 | 192 | line_table_i = std.sort.upperBound(u64, table_addrs, pc, struct { |
| 193 | 193 | fn order(context: u64, item: u64) std.math.Order { |
| 194 | 194 | return std.math.order(item, context); |
| 195 | 195 | } |
| 196 | 196 | }.order); |
| 197 | 197 | } |
| 198 | | while (line_table_i < table_addrs.len and table_addrs[line_table_i] < pc) line_table_i += 1; |
| 198 | const slc = &cu.src_loc_cache.?; |
| 199 | const table_addrs = slc.line_table.keys(); |
| 200 | while (line_table_i < table_addrs.len and table_addrs[line_table_i] <= pc) line_table_i += 1; |
| 199 | 201 | |
| 200 | 202 | const entry = slc.line_table.values()[line_table_i - 1]; |
| 201 | 203 | const corrected_file_index = entry.file - @intFromBool(slc.version < 5); |