aboutsummaryrefslogtreecommitdiff
path: root/src/link/Dwarf.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-02-01 11:49:07 +0100
committerJakub Konka <kubkon@jakubkonka.com>2023-02-01 11:49:07 +0100
commitd98fc53b8fbe479f828114b0276d5290146cc2a3 (patch)
tree446b6e4a430ee44d10fca677af4add27a804614a /src/link/Dwarf.zig
parentb3277c893691c462ec2e82577a78e7baafb42bf6 (diff)
downloadzig-d98fc53b8fbe479f828114b0276d5290146cc2a3.tar.gz
zig-d98fc53b8fbe479f828114b0276d5290146cc2a3.zip
link: use strtab.StringTable in Dwarf
Diffstat (limited to 'src/link/Dwarf.zig')
-rw-r--r--src/link/Dwarf.zig20
1 files changed, 6 insertions, 14 deletions
diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig
index 8278377095..61ddda3494 100644
--- a/src/link/Dwarf.zig
+++ b/src/link/Dwarf.zig
@@ -18,8 +18,9 @@ const LinkBlock = File.LinkBlock;
const LinkFn = File.LinkFn;
const LinkerLoad = @import("../codegen.zig").LinkerLoad;
const Module = @import("../Module.zig");
-const Value = @import("../value.zig").Value;
+const StringTable = @import("strtab.zig").StringTable;
const Type = @import("../type.zig").Type;
+const Value = @import("../value.zig").Value;
allocator: Allocator,
bin_file: *File,
@@ -42,7 +43,7 @@ abbrev_table_offset: ?u64 = null,
/// TODO replace with InternPool
/// Table of debug symbol names.
-strtab: std.ArrayListUnmanaged(u8) = .{},
+strtab: StringTable(.strtab) = .{},
/// Quick lookup array of all defined source files referenced by at least one Decl.
/// They will end up in the DWARF debug_line header as two lists:
@@ -1770,11 +1771,11 @@ pub fn writeDbgInfoHeader(self: *Dwarf, module: *Module, low_pc: u64, high_pc: u
},
}
// Write the form for the compile unit, which must match the abbrev table above.
- const name_strp = try self.makeString(module.root_pkg.root_src_path);
+ const name_strp = try self.strtab.insert(self.allocator, module.root_pkg.root_src_path);
var compile_unit_dir_buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined;
const compile_unit_dir = resolveCompilationDir(module, &compile_unit_dir_buffer);
- const comp_dir_strp = try self.makeString(compile_unit_dir);
- const producer_strp = try self.makeString(link.producer_string);
+ const comp_dir_strp = try self.strtab.insert(self.allocator, compile_unit_dir);
+ const producer_strp = try self.strtab.insert(self.allocator, link.producer_string);
di_buf.appendAssumeCapacity(@enumToInt(AbbrevKind.compile_unit));
if (self.bin_file.tag == .macho) {
@@ -2435,15 +2436,6 @@ fn getRelocDbgInfoSubprogramHighPC(self: Dwarf) u32 {
return dbg_info_low_pc_reloc_index + self.ptrWidthBytes();
}
-/// TODO Improve this to use a table.
-fn makeString(self: *Dwarf, bytes: []const u8) !u32 {
- try self.strtab.ensureUnusedCapacity(self.allocator, bytes.len + 1);
- const result = self.strtab.items.len;
- self.strtab.appendSliceAssumeCapacity(bytes);
- self.strtab.appendAssumeCapacity(0);
- return @intCast(u32, result);
-}
-
fn padToIdeal(actual_size: anytype) @TypeOf(actual_size) {
return actual_size +| (actual_size / ideal_factor);
}