diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2024-01-28 00:49:59 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2024-01-28 00:49:59 +0100 |
| commit | 8cdaaa7b4fcf10f1cb5603dc3bb2340ef17c9fc9 (patch) | |
| tree | b1bcb6ec12f1fe1473c3970a6bb69696c0ded407 /src/link | |
| parent | 6337ce16ae76977b2444b5c07f3c436db4d5ece7 (diff) | |
| download | zig-8cdaaa7b4fcf10f1cb5603dc3bb2340ef17c9fc9.tar.gz zig-8cdaaa7b4fcf10f1cb5603dc3bb2340ef17c9fc9.zip | |
macho: move getAtomData switch into Atom
Diffstat (limited to 'src/link')
| -rw-r--r-- | src/link/MachO.zig | 9 | ||||
| -rw-r--r-- | src/link/MachO/Atom.zig | 10 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 0fb38928c6..1f634e45c2 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -613,7 +613,7 @@ pub fn flushModule(self: *MachO, arena: Allocator, prog_node: *std.Progress.Node const atom_size = math.cast(usize, atom.size) orelse return error.Overflow; const code = try gpa.alloc(u8, atom_size); defer gpa.free(code); - zo.getAtomData(self, atom.*, code) catch |err| switch (err) { + atom.getData(self, code) catch |err| switch (err) { error.InputOutput => { try self.reportUnexpectedError("fetching code for '{s}' failed", .{ atom.getName(self), @@ -2591,12 +2591,7 @@ fn writeAtoms(self: *MachO) !void { assert(atom.flags.alive); const off = math.cast(usize, atom.value - header.addr) orelse return error.Overflow; const atom_size = math.cast(usize, atom.size) orelse return error.Overflow; - switch (atom.getFile(self)) { - .internal => |x| try x.getAtomData(atom.*, buffer[off..][0..atom_size]), - .object => |x| try x.getAtomData(atom.*, buffer[off..][0..atom_size]), - .zig_object => |x| try x.getAtomData(self, atom.*, buffer[off..][0..atom_size]), - else => unreachable, - } + try atom.getData(self, buffer[off..][0..atom_size]); atom.resolveRelocs(self, buffer[off..][0..atom_size]) catch |err| switch (err) { error.ResolveFailed => has_resolve_error = true, else => |e| return e, diff --git a/src/link/MachO/Atom.zig b/src/link/MachO/Atom.zig index cbd98490fa..429a7993f1 100644 --- a/src/link/MachO/Atom.zig +++ b/src/link/MachO/Atom.zig @@ -54,6 +54,16 @@ pub fn getFile(self: Atom, macho_file: *MachO) File { return macho_file.getFile(self.file).?; } +pub fn getData(self: Atom, macho_file: *MachO, buffer: []u8) !void { + assert(buffer.len == self.size); + switch (self.getFile(macho_file)) { + .internal => |x| try x.getAtomData(self, buffer), + .object => |x| try x.getAtomData(self, buffer), + .zig_object => |x| try x.getAtomData(macho_file, self, buffer), + else => unreachable, + } +} + pub fn getRelocs(self: Atom, macho_file: *MachO) []const Relocation { return switch (self.getFile(macho_file)) { .dylib => unreachable, |
