aboutsummaryrefslogtreecommitdiff
path: root/lib/std/debug/Coverage.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-08-11 15:08:43 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-08-13 15:02:53 -0700
commita9e7fb0e0189e01ebf67b144aca3fd8c318925c3 (patch)
tree3809f63bdc8902b8119805a2be7f07b3f37767d4 /lib/std/debug/Coverage.zig
parente8e49efe211f85d854388e95c6fe0344f133ea2d (diff)
downloadzig-a9e7fb0e0189e01ebf67b144aca3fd8c318925c3.tar.gz
zig-a9e7fb0e0189e01ebf67b144aca3fd8c318925c3.zip
avoid a branch in resolveAddressesDwarf
Diffstat (limited to 'lib/std/debug/Coverage.zig')
-rw-r--r--lib/std/debug/Coverage.zig30
1 files changed, 16 insertions, 14 deletions
diff --git a/lib/std/debug/Coverage.zig b/lib/std/debug/Coverage.zig
index bb6f7aabcb..3971d770f3 100644
--- a/lib/std/debug/Coverage.zig
+++ b/lib/std/debug/Coverage.zig
@@ -174,28 +174,30 @@ pub fn resolveAddressesDwarf(
continue :next_pc;
}
const cu = &d.compile_unit_list.items[range.compile_unit_index];
- if (cu.src_loc_cache == null) {
- cov.mutex.unlock();
- defer cov.mutex.lock();
- d.populateSrcLocCache(gpa, cu) catch |err| switch (err) {
- error.MissingDebugInfo, error.InvalidDebugInfo => {
- out.* = SourceLocation.invalid;
- continue :next_pc;
- },
- else => |e| return e,
- };
- }
- const slc = &cu.src_loc_cache.?;
- const table_addrs = slc.line_table.keys();
if (cu != prev_cu) {
prev_cu = cu;
+ if (cu.src_loc_cache == null) {
+ cov.mutex.unlock();
+ defer cov.mutex.lock();
+ d.populateSrcLocCache(gpa, cu) catch |err| switch (err) {
+ error.MissingDebugInfo, error.InvalidDebugInfo => {
+ out.* = SourceLocation.invalid;
+ continue :next_pc;
+ },
+ else => |e| return e,
+ };
+ }
+ const slc = &cu.src_loc_cache.?;
+ const table_addrs = slc.line_table.keys();
line_table_i = std.sort.upperBound(u64, table_addrs, pc, struct {
fn order(context: u64, item: u64) std.math.Order {
return std.math.order(item, context);
}
}.order);
}
- while (line_table_i < table_addrs.len and table_addrs[line_table_i] < pc) line_table_i += 1;
+ const slc = &cu.src_loc_cache.?;
+ const table_addrs = slc.line_table.keys();
+ while (line_table_i < table_addrs.len and table_addrs[line_table_i] <= pc) line_table_i += 1;
const entry = slc.line_table.values()[line_table_i - 1];
const corrected_file_index = entry.file - @intFromBool(slc.version < 5);