zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit a9e7fb0e0189e01ebf67b144aca3fd8c318925c3 (tree)
parent e8e49efe211f85d854388e95c6fe0344f133ea2d
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Sun, 11 Aug 2024 15:08:43 -0700

avoid a branch in resolveAddressesDwarf

Diffstat:
Mlib/std/Build/Fuzz/WebServer.zig | 4++--
Mlib/std/debug/Coverage.zig | 30++++++++++++++++--------------
2 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/lib/std/Build/Fuzz/WebServer.zig b/lib/std/Build/Fuzz/WebServer.zig @@ -664,8 +664,8 @@ fn addEntryPoint(ws: *WebServer, coverage_id: u64, addr: u64) error{ AlreadyRepo if (false) { const sl = coverage_map.source_locations[index]; const file_name = coverage_map.coverage.stringAt(coverage_map.coverage.fileAt(sl.file).basename); - log.debug("server found entry point {s}:{d}:{d}", .{ - file_name, sl.line, sl.column, + log.debug("server found entry point for 0x{x} at {s}:{d}:{d}", .{ + addr, file_name, sl.line, sl.column, }); } const gpa = ws.gpa; diff --git 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);