diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2023-10-04 12:06:52 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2023-10-16 19:33:04 +0200 |
| commit | d6cec5a586c55f471d3f830f34d7a5f668337fb9 (patch) | |
| tree | 65080226790b92497314415963eb2f132c2c3f13 /src/link/Elf/Object.zig | |
| parent | 66f34b15e8573d669ef99d47337162f2aa91d602 (diff) | |
| download | zig-d6cec5a586c55f471d3f830f34d7a5f668337fb9.tar.gz zig-d6cec5a586c55f471d3f830f34d7a5f668337fb9.zip | |
elf: add more prepwork for linking c++ objects
Diffstat (limited to 'src/link/Elf/Object.zig')
| -rw-r--r-- | src/link/Elf/Object.zig | 29 |
1 files changed, 1 insertions, 28 deletions
diff --git a/src/link/Elf/Object.zig b/src/link/Elf/Object.zig index 723b76469f..9baa5c07ed 100644 --- a/src/link/Elf/Object.zig +++ b/src/link/Elf/Object.zig @@ -20,7 +20,6 @@ cies: std.ArrayListUnmanaged(Cie) = .{}, alive: bool = true, num_dynrelocs: u32 = 0, -output_sections: std.AutoArrayHashMapUnmanaged(u16, std.ArrayListUnmanaged(Atom.Index)) = .{}, output_symtab_size: Elf.SymtabSize = .{}, pub fn isObject(file: std.fs.File) bool { @@ -43,10 +42,6 @@ pub fn deinit(self: *Object, allocator: Allocator) void { self.comdat_groups.deinit(allocator); self.fdes.deinit(allocator); self.cies.deinit(allocator); - for (self.output_sections.values()) |*list| { - list.deinit(allocator); - } - self.output_sections.deinit(allocator); } pub fn parse(self: *Object, elf_file: *Elf) !void { @@ -635,7 +630,7 @@ pub fn addAtomsToOutputSections(self: *Object, elf_file: *Elf) !void { if (shdr.sh_type == elf.SHT_NOBITS) continue; const gpa = elf_file.base.allocator; - const gop = try self.output_sections.getOrPut(gpa, atom.output_section_index); + const gop = try elf_file.output_sections.getOrPut(gpa, atom.output_section_index); if (!gop.found_existing) gop.value_ptr.* = .{}; try gop.value_ptr.append(gpa, atom_index); } @@ -680,28 +675,6 @@ pub fn allocateAtoms(self: Object, elf_file: *Elf) void { } } -pub fn writeAtoms(self: Object, elf_file: *Elf, output_section_index: u16, buffer: []u8, undefs: anytype) !void { - const gpa = elf_file.base.allocator; - const atom_list = self.output_sections.get(output_section_index) orelse return; - const shdr = elf_file.shdrs.items[output_section_index]; - for (atom_list.items) |atom_index| { - const atom = elf_file.atom(atom_index).?; - assert(atom.flags.alive); - const offset = atom.value - shdr.sh_addr; - log.debug("writing atom({d}) at 0x{x}", .{ atom_index, shdr.sh_offset + offset }); - // TODO decompress directly into provided buffer - const out_code = buffer[offset..][0..atom.size]; - const in_code = try self.codeDecompressAlloc(elf_file, atom_index); - defer gpa.free(in_code); - @memcpy(out_code, in_code); - - if (shdr.sh_flags & elf.SHF_ALLOC == 0) - try atom.resolveRelocsNonAlloc(elf_file, out_code, undefs) - else - try atom.resolveRelocsAlloc(elf_file, out_code); - } -} - pub fn updateSymtabSize(self: *Object, elf_file: *Elf) void { for (self.locals()) |local_index| { const local = elf_file.symbol(local_index); |
