aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-01-28 00:49:59 +0100
committerJakub Konka <kubkon@jakubkonka.com>2024-01-28 00:49:59 +0100
commit8cdaaa7b4fcf10f1cb5603dc3bb2340ef17c9fc9 (patch)
treeb1bcb6ec12f1fe1473c3970a6bb69696c0ded407
parent6337ce16ae76977b2444b5c07f3c436db4d5ece7 (diff)
downloadzig-8cdaaa7b4fcf10f1cb5603dc3bb2340ef17c9fc9.tar.gz
zig-8cdaaa7b4fcf10f1cb5603dc3bb2340ef17c9fc9.zip
macho: move getAtomData switch into Atom
-rw-r--r--src/link/MachO.zig9
-rw-r--r--src/link/MachO/Atom.zig10
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,