mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-04-26 13:01:34 +03:00
Removes dead code, updates some tests, fixes typos in comments, formats
This commit is contained in:
@@ -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
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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]);
|
||||
|
||||
@@ -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
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user