Merge pull request #2788 from emekoi/pdb-fix

fixed coff header parsing
This commit is contained in:
Andrew Kelley 2019-07-02 14:48:45 -04:00 committed by GitHub
commit 06733c3ff5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 11 deletions

View File

@ -39,6 +39,18 @@ pub const Coff = struct {
guid: [16]u8,
age: u32,
pub fn init(allocator: *mem.Allocator, in_file: File) Coff {
return Coff{
.in_file = in_file,
.allocator = allocator,
.coff_header = undefined,
.pe_header = undefined,
.sections = ArrayList(Section).init(allocator),
.guid = undefined,
.age = undefined,
};
}
pub fn loadHeader(self: *Coff) !void {
const pe_pointer_offset = 0x3C;
@ -142,10 +154,10 @@ pub const Coff = struct {
}
pub fn loadSections(self: *Coff) !void {
if (self.sections.len != 0)
if (self.sections.len == self.coff_header.number_of_sections)
return;
self.sections = ArrayList(Section).init(self.allocator);
try self.sections.ensureCapacity(self.coff_header.number_of_sections);
var file_stream = self.in_file.inStream();
const in = &file_stream.stream;

View File

@ -826,15 +826,7 @@ fn openSelfDebugInfoWindows(allocator: *mem.Allocator) !DebugInfo {
defer self_file.close();
const coff_obj = try allocator.create(coff.Coff);
coff_obj.* = coff.Coff{
.in_file = self_file,
.allocator = allocator,
.coff_header = undefined,
.pe_header = undefined,
.sections = undefined,
.guid = undefined,
.age = undefined,
};
coff_obj.* = coff.Coff.init(allocator, self_file);
var di = DebugInfo{
.coff = coff_obj,