aboutsummaryrefslogtreecommitdiff
path: root/src/link/Coff.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2022-12-28 03:20:06 -0500
committerAndrew Kelley <andrew@ziglang.org>2022-12-28 14:24:27 -0500
commit74b14edea8b7d8ae7816feda2ee37a4ca016bc03 (patch)
tree2e5beb75cf5f179d947021a981ddc6210d0c9630 /src/link/Coff.zig
parent70ac9fc7afe672d39cdcc2f1fa4df00d34f5a775 (diff)
downloadzig-74b14edea8b7d8ae7816feda2ee37a4ca016bc03.tar.gz
zig-74b14edea8b7d8ae7816feda2ee37a4ca016bc03.zip
link: fix memory leaks
* Fix linker memory leaks found while running `zig build test-cases`. * Add missing target to test manifest.
Diffstat (limited to 'src/link/Coff.zig')
-rw-r--r--src/link/Coff.zig10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/link/Coff.zig b/src/link/Coff.zig
index 232342dd7f..9c05114a1f 100644
--- a/src/link/Coff.zig
+++ b/src/link/Coff.zig
@@ -289,6 +289,7 @@ pub fn deinit(self: *Coff) void {
self.unresolved.deinit(gpa);
self.locals_free_list.deinit(gpa);
+ self.globals_free_list.deinit(gpa);
self.strtab.deinit(gpa);
self.got_entries.deinit(gpa);
self.got_entries_free_list.deinit(gpa);
@@ -1150,8 +1151,10 @@ fn updateDeclCode(self: *Coff, decl_index: Module.Decl.Index, code: []const u8,
}
fn freeRelocationsForAtom(self: *Coff, atom: *Atom) void {
- _ = self.relocs.remove(atom);
- _ = self.base_relocs.remove(atom);
+ var removed_relocs = self.relocs.fetchRemove(atom);
+ if (removed_relocs) |*relocs| relocs.value.deinit(self.base.allocator);
+ var removed_base_relocs = self.base_relocs.fetchRemove(atom);
+ if (removed_base_relocs) |*base_relocs| base_relocs.value.deinit(self.base.allocator);
}
fn freeUnnamedConsts(self: *Coff, decl_index: Module.Decl.Index) void {
@@ -1489,9 +1492,8 @@ pub fn getGlobalSymbol(self: *Coff, name: []const u8) !u32 {
gop.value_ptr.* = sym_loc;
const gpa = self.base.allocator;
- const sym_name = try gpa.dupe(u8, name);
const sym = self.getSymbolPtr(sym_loc);
- try self.setSymbolName(sym, sym_name);
+ try self.setSymbolName(sym, name);
sym.storage_class = .EXTERNAL;
try self.unresolved.putNoClobber(gpa, global_index, true);