Removes dead code, updates some tests, fixes typos in comments, formats

This commit is contained in:
Mason Remaley
2026-04-11 23:28:45 -07:00
parent 312ef9558b
commit df2413cf69
10 changed files with 48 additions and 72 deletions
-1
View File
@@ -622,7 +622,6 @@ pub const StackTrace = struct {
return_addresses: []usize,
/// Indicates whether any stack frames were omitted from `return_addresses`.
skipped: SkippedAddresses,
};
/// Indicates how many addresses were skipped in a trace.
+30 -33
View File
@@ -285,7 +285,7 @@ pub const InlineSiteSymIterator = struct {
.inlinesite,
.inlinesite2,
=> return @ptrCast(inline_prefix),
else => {}
else => {},
}
}
@@ -332,9 +332,9 @@ pub const BinaryAnnotation = union(enum) {
.file_id = self.file_id,
.code_offset = self.code_offset,
.code_length = b: {
if (self.code_length) |l| break :b l;
const end = next_code_offset orelse return null;
break :b end - self.code_offset;
if (self.code_length) |l| break :b l;
const end = next_code_offset orelse return null;
break :b end - self.code_offset;
},
};
}
@@ -345,7 +345,7 @@ pub const BinaryAnnotation = union(enum) {
.annotations = annotations,
.curr = .{
.line_offset = 0,
.file_id = null,
.file_id = null,
.code_offset = 0,
.code_length = null,
},
@@ -395,22 +395,22 @@ pub const BinaryAnnotation = union(enum) {
},
// Not emitted by LLVM at the time of writing, and we don't want to add support
// without a test csae. Safe to ignore since we don't use this info right now.
// without a test case. Safe to ignore since we don't use this info right now.
.change_line_end_delta,
.change_column_start,
.change_column_end_delta,
.change_column_end,
=> {},
=> {},
// Not emitted by LLVM at the time of writing. Various sources conflict on how
// these opcodes should be interpreted, so we make no attempt to handle them.
// Not emitted by LLVM at the time of writing. Various sources conflict on how
// these opcodes should be interpreted, so we make no attempt to handle them.
.code_offset,
.change_code_offset_base,
.change_range_kind,
=> {
self.annotations = .empty;
self.prev = null;
return null;
self.annotations = .empty;
self.prev = null;
return null;
},
}
@@ -457,8 +457,8 @@ pub const BinaryAnnotation = union(enum) {
switch (op) {
// Microsoft's docs say that invalid is used as padding, though it is left ambiguous
// whether padding is allowed internally or only after all instructions are complete.
// Empircally, the latter appears to be the case, at lest with the output from LLVM that
// I've tested.
// Empirically, the latter appears to be the case, at least with the output from LLVM
// that I've tested.
.invalid => return error.EndOfStream,
.code_offset => return .{
.code_offset = try expect(takePackedU32(reader)),
@@ -547,7 +547,7 @@ pub const BinaryAnnotation = union(enum) {
}
}
fn expect(value: anytype) error { ReadFailed }!@typeInfo(@TypeOf(value)).error_union.payload {
fn expect(value: anytype) error{ReadFailed}!@typeInfo(@TypeOf(value)).error_union.payload {
comptime assert(@typeInfo(@TypeOf(value)).error_union.error_set == Io.Reader.Error);
return value catch error.ReadFailed;
}
@@ -661,16 +661,16 @@ pub fn getSymbolName(self: *Pdb, proc_sym: *align(1) const pdb.ProcSym) []const
}
pub const InlineeSourceLine = struct {
signature: pdb.InlineeSourceLineSignature,
info: *align(1) const pdb.InlineeSourceLine,
signature: pdb.InlineeSourceLineSignature,
info: *align(1) const pdb.InlineeSourceLine,
fn lessThan(_: void, lhs: InlineeSourceLine, rhs: InlineeSourceLine) bool {
return lhs.info.inlinee < rhs.info.inlinee;
}
fn lessThan(_: void, lhs: InlineeSourceLine, rhs: InlineeSourceLine) bool {
return lhs.info.inlinee < rhs.info.inlinee;
}
fn compare(inlinee: u32, self: InlineeSourceLine) std.math.Order {
return std.math.order(inlinee, self.info.inlinee);
}
fn compare(inlinee: u32, self: InlineeSourceLine) std.math.Order {
return std.math.order(inlinee, self.info.inlinee);
}
};
/// Returns all `InlineeSourceLine`s for a given module with the given inlinee. Ideally there would
@@ -694,7 +694,7 @@ pub fn getInlineeSourceLines(
// Linearly scan to the first match
const begin = b: {
var begin = any;
var begin = any;
while (begin > 0) {
const prev = begin - 1;
if (mod.inlinee_source_lines[prev].info.inlinee != inlinee) break;
@@ -706,10 +706,9 @@ pub fn getInlineeSourceLines(
// Linearly scan to the last match
const end = b: {
var end = any + 1;
while (
end < mod.inlinee_source_lines.len and
mod.inlinee_source_lines[end].info.inlinee == inlinee
) : (end += 1) {}
while (end < mod.inlinee_source_lines.len and
mod.inlinee_source_lines[end].info.inlinee == inlinee) : (end += 1)
{}
break :b end;
};
@@ -844,8 +843,7 @@ pub fn getModule(self: *Pdb, index: usize) !?*Module {
while (subsects.takeStructPointer(pdb.DebugSubsectionHeader) catch null) |subsect_hdr| {
var subsect: Io.Reader = .fixed(subsects.take(subsect_hdr.length) catch return null);
if (subsect_hdr.kind == .inlinee_lines) {
const inlinee_source_line_signature = subsect.takeEnum(pdb.InlineeSourceLineSignature, .little)
catch return error.InvalidDebugInfo;
const inlinee_source_line_signature = subsect.takeEnum(pdb.InlineeSourceLineSignature, .little) catch return error.InvalidDebugInfo;
const has_extra_files = switch (inlinee_source_line_signature) {
.normal => false,
.ex => true,
@@ -855,8 +853,7 @@ pub fn getModule(self: *Pdb, index: usize) !?*Module {
if (has_extra_files) {
const file_count = subsect.takeInt(u32, .little) catch
return error.InvalidDebugInfo;
const file_bytes = std.math.mul(usize, file_count, @sizeOf(u32))
catch return error.InvalidDebugInfo;
const file_bytes = std.math.mul(usize, file_count, @sizeOf(u32)) catch return error.InvalidDebugInfo;
subsect.discardAll(file_bytes) catch
return error.InvalidDebugInfo;
}
@@ -868,7 +865,7 @@ pub fn getModule(self: *Pdb, index: usize) !?*Module {
}
}
}
std.mem.sort(InlineeSourceLine, inlinee_source_lines.items, {}, InlineeSourceLine.lessThan);
break :b try inlinee_source_lines.toOwnedSlice(gpa);
};
-14
View File
@@ -22,20 +22,6 @@ pub fn deinit(si: *SelfInfo, io: Io) void {
si.modules.deinit(gpa);
}
pub const SymbolIterator = struct {
curr: ?Error!std.debug.Symbol,
pub fn deinit(self: *SymbolIterator, _: Io) void {
self.* = undefined;
}
pub fn next(self: *SymbolIterator) ?Error!std.debug.Symbol {
const result = self.curr;
self.curr = null;
return result;
}
};
pub fn getSymbols(si: *SelfInfo, io: Io, address: usize, resolve_inline_callers: bool) Error![]std.debug.Symbol {
_ = resolve_inline_callers;
+1 -6
View File
@@ -616,11 +616,7 @@ pub const InlineSiteSym2 = extern struct {
invocations: u32,
};
pub const InlineeSourceLineSignature = enum(u32) {
normal = 0,
ex = 1,
_
};
pub const InlineeSourceLineSignature = enum(u32) { normal = 0, ex = 1, _ };
pub const InlineeSourceLine = extern struct {
inlinee: u32,
@@ -651,4 +647,3 @@ pub const BinaryAnnotationOpcode = enum(u8) {
change_code_length_and_code_offset = 12,
change_column_end = 13,
};
+2 -2
View File
@@ -138,8 +138,8 @@ pub fn getStackTrace(self: *FailingAllocator) std.debug.StackTrace {
len += 1;
}
return .{
.return_addresses = &self.stack_addresses,
.index = len,
.return_addresses = self.stack_addresses[0..len],
.skipped = if (len == self.stack_addresses.len) .unknown else .none,
};
}
+1 -1
View File
@@ -9,7 +9,7 @@ pub fn main() !void {
const captured_st = try foo(&stdout.interface, &st_buf);
try std.debug.writeStackTrace(&captured_st, .{ .writer = &stdout.interface, .mode = .no_color });
try stdout.interface.print("stack trace index: {d}\n", .{captured_st.index});
try stdout.interface.print("stack trace index: {d}\n", .{captured_st.return_addresses.len});
try stdout.interface.flush();
}
+1 -2
View File
@@ -466,8 +466,7 @@ pub fn addCases(cases: *@import("tests.zig").ErrorTracesContext, os: std.Target.
\\}
,
.expect_error = "ThisIsSoSad",
.expect_trace =
switch (os) {
.expect_trace = switch (os) {
// LLVM doesn't emit column info in the binary annotations for inlinee callees in PDBs,
// so our expected result is slightly different for Windows than on other operating
// systems.
+10 -9
View File
@@ -52,23 +52,24 @@ pub fn main(init: std.process.Init) !void {
continue;
}
// If both the row and column are present, this it he column end. Otherwise it's the line end.
const src_pos_end = std.mem.indexOf(u8, in_line, ": 0x") orelse {
try w.writeAll(in_line);
continue;
};
const src_row_or_path_end = std.mem.lastIndexOfScalar(u8, in_line[0..src_pos_end], ':') orelse {
try w.writeAll(in_line);
continue;
const src_pos_start = b: {
const postfix = ".zig:";
const postfix_index = std.mem.lastIndexOf(u8, in_line[0..src_pos_end], postfix) orelse {
try w.writeAll(in_line);
continue;
};
break :b postfix_index + postfix.len;
};
const src_path_end = std.mem.lastIndexOfScalar(u8, in_line[0..src_row_or_path_end], ':')
orelse src_row_or_path_end;
const addr_end = std.mem.indexOfPos(u8, in_line, src_pos_end, " in ") orelse {
const addr_end = std.mem.findPos(u8, in_line, src_pos_end, " in ") orelse {
try w.writeAll(in_line);
continue;
};
const symbol_end = std.mem.indexOfPos(u8, in_line, addr_end, " (") orelse {
const symbol_end = std.mem.findPos(u8, in_line, addr_end, " (") orelse {
try w.writeAll(in_line);
continue;
};
@@ -87,7 +88,7 @@ pub fn main(init: std.process.Init) !void {
//
// ...with that first '_' being replaced by its basename.
const src_path = in_line[0..src_path_end];
const src_path = in_line[0..src_pos_start];
const basename_start = if (std.mem.lastIndexOfAny(u8, src_path, "/\\")) |i| i + 1 else 0;
const symbol_start = addr_end + " in ".len;
try w.writeAll(in_line[basename_start..src_pos_end]);
+2 -2
View File
@@ -12,13 +12,13 @@ pub fn main(init: std.process.Init) void {
var add_addr: usize = undefined;
_ = add(1, 2, &add_addr);
const symbols = di.getSymbols(io, add_addr) catch |err| fatal("failed to get symbol: {t}", .{err});
const symbols = di.getSymbols(io, add_addr, false) catch |err| fatal("failed to get symbol: {t}", .{err});
const debug_gpa = std.debug.getDebugInfoAllocator();
defer for (symbols) |symbol| {
if (symbol.source_location) |sl| {
debug_gpa.free(sl.file_name);
}
}
};
if (symbols.len != 1) fatal("expected 1 symbol, found {}", .{symbols.len});
const symbol = symbols[0];
+1 -2
View File
@@ -2168,7 +2168,6 @@ pub fn addErrorTraceTests(
error_traces.addCases(darling_cases, .macos);
}
return step;
}
@@ -2291,7 +2290,7 @@ pub fn addCliTests(b: *std.Build) *Step {
\\ return num * num;
\\}
\\extern fn zig_panic() noreturn;
\\pub fn panic(msg: []const u8, error_return_trace: ?*@import("builtin").StackTrace, _: ?usize) noreturn {
\\pub fn panic(msg: []const u8, error_return_trace: ?*@import("std").builtin.StackTrace, _: ?usize) noreturn {
\\ _ = msg;
\\ _ = error_return_trace;
\\ zig_panic();