zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 4adb8f786f5d1fb49f87ef549eabf09692671e44 (tree)
parent e8839074315635c8d049bc5eac6816ed52c82b42
Author: Jakub Konka <kubkon@jakubkonka.com>
Date:   Tue, 14 Nov 2023 16:51:25 +0100

elf: do not pointlessly store zerofill data for TLVs

Diffstat:
Msrc/link/Elf/ZigObject.zig | 9+++++++--
1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/link/Elf/ZigObject.zig b/src/link/Elf/ZigObject.zig @@ -933,7 +933,12 @@ fn updateTlv( { const gop = try self.tls_variables.getOrPut(gpa, atom_ptr.atom_index); assert(!gop.found_existing); // TODO incremental updates - gop.value_ptr.* = .{ .symbol_index = sym_index, .code = try gpa.dupe(u8, code) }; + gop.value_ptr.* = .{ .symbol_index = sym_index }; + + // We only store the data for the TLV if it's non-zerofill. + if (elf_file.shdrs.items[shndx].sh_type != elf.SHT_NOBITS) { + gop.value_ptr.code = try gpa.dupe(u8, code); + } } { @@ -1514,7 +1519,7 @@ const DeclMetadata = struct { const TlsVariable = struct { symbol_index: Symbol.Index, - code: []const u8, + code: []const u8 = &[0]u8{}, fn deinit(tlv: *TlsVariable, allocator: Allocator) void { allocator.free(tlv.code);