authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2025-09-11 13:34:02+01:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2025-09-30 13:44:53+01:00
log7601b397ef95b57c05e9a4ed3670782d2dddf84c
tree84bebfbce790c3726096ab0c979d239adb80c82c
parent02a0ade138c035a7d45bd1ed26fe49dfec2942d2
signaturelock-open Commit is signed but in an unrecognized format.

fix bad merge

The API of `std.debug.Pdb` changed.

1 files changed, 22 insertions(+), 5 deletions(-)

lib/std/debug/SelfInfo/WindowsModule.zig+22-5
...@@ -154,17 +154,29 @@ fn loadDebugInfo(module: *const WindowsModule, gpa: Allocator, di: *DebugInfo) !...@@ -154,17 +154,29 @@ fn loadDebugInfo(module: *const WindowsModule, gpa: Allocator, di: *DebugInfo) !
154 };154 };
155 defer if (path.ptr != raw_path.ptr) gpa.free(path);155 defer if (path.ptr != raw_path.ptr) gpa.free(path);
156156
157 di.pdb = Pdb.init(gpa, path) catch |err| switch (err) {157 const pdb_file = std.fs.cwd().openFile(path, .{}) catch |err| switch (err) {
158 error.FileNotFound, error.IsDir => break :pdb,158 error.FileNotFound, error.IsDir => break :pdb,
159 else => |e| return e,159 else => |e| return e,
160 };160 };
161 try di.pdb.?.parseInfoStream();161 errdefer pdb_file.close();
162 try di.pdb.?.parseDbiStream();
163162
164 if (!mem.eql(u8, &coff_obj.guid, &di.pdb.?.guid) or coff_obj.age != di.pdb.?.age)163 const pdb_reader = try gpa.create(std.fs.File.Reader);
164 errdefer gpa.destroy(pdb_reader);
165
166 pdb_reader.* = pdb_file.reader(try gpa.alloc(u8, 4096));
167 errdefer gpa.free(pdb_reader.interface.buffer);
168
169 var pdb: Pdb = try .init(gpa, pdb_reader);
170 errdefer pdb.deinit();
171 try pdb.parseInfoStream();
172 try pdb.parseDbiStream();
173
174 if (!mem.eql(u8, &coff_obj.guid, &pdb.guid) or coff_obj.age != pdb.age)
165 return error.InvalidDebugInfo;175 return error.InvalidDebugInfo;
166176
167 di.coff_section_headers = try coff_obj.getSectionHeadersAlloc(gpa);177 di.coff_section_headers = try coff_obj.getSectionHeadersAlloc(gpa);
178
179 di.pdb = pdb;
168 }180 }
169181
170 di.loaded = true;182 di.loaded = true;
...@@ -204,7 +216,12 @@ pub const DebugInfo = struct {...@@ -204,7 +216,12 @@ pub const DebugInfo = struct {
204 pub fn deinit(di: *DebugInfo, gpa: Allocator) void {216 pub fn deinit(di: *DebugInfo, gpa: Allocator) void {
205 if (!di.loaded) return;217 if (!di.loaded) return;
206 if (di.dwarf) |*dwarf| dwarf.deinit(gpa);218 if (di.dwarf) |*dwarf| dwarf.deinit(gpa);
207 if (di.pdb) |*pdb| pdb.deinit();219 if (di.pdb) |*pdb| {
220 pdb.file_reader.file.close();
221 gpa.free(pdb.file_reader.interface.buffer);
222 gpa.destroy(pdb.file_reader);
223 pdb.deinit();
224 }
208 gpa.free(di.coff_section_headers);225 gpa.free(di.coff_section_headers);
209 if (di.mapped_file) |mapped| {226 if (di.mapped_file) |mapped| {
210 const process_handle = windows.GetCurrentProcess();227 const process_handle = windows.GetCurrentProcess();