aboutsummaryrefslogtreecommitdiff
path: root/src/link/MachO/Object.zig
diff options
context:
space:
mode:
authorTom Maenan Read Cutting <readcuttingt@gmail.com>2021-06-24 23:29:39 +0100
committerJakub Konka <kubkon@jakubkonka.com>2021-06-25 08:38:47 +0200
commit177b1b6bf9a7402eb688159dfa94ea5a5ea6f550 (patch)
tree2b14f44eb4fd81a0f3e0067190f71e09f8a2cffb /src/link/MachO/Object.zig
parent2d2a6ed1a46349355650bfdd68688738c67bbf9c (diff)
downloadzig-177b1b6bf9a7402eb688159dfa94ea5a5ea6f550.tar.gz
zig-177b1b6bf9a7402eb688159dfa94ea5a5ea6f550.zip
Add fat/universal dylib support to zig ld
With this change zig ld can link with dynamic libraries contained within a fat/universal file that had multiple seperate binaries embedded within it for multi-arch support (in macOS). Whilst zig can still only create single-architecture executables - the ability to link with fat libraries is useful for cases where they are the easiest (or only) option to link against.
Diffstat (limited to 'src/link/MachO/Object.zig')
-rw-r--r--src/link/MachO/Object.zig14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/link/MachO/Object.zig b/src/link/MachO/Object.zig
index 747adaab87..671199670f 100644
--- a/src/link/MachO/Object.zig
+++ b/src/link/MachO/Object.zig
@@ -247,18 +247,14 @@ pub fn parse(self: *Object) !void {
try reader.context.seekTo(offset);
}
- self.header = try reader.readStruct(macho.mach_header_64);
-
- if (self.header.?.filetype != macho.MH_OBJECT) {
- log.debug("invalid filetype: expected 0x{x}, found 0x{x}", .{
- macho.MH_OBJECT,
- self.header.?.filetype,
- });
+ const header = try reader.readStruct(macho.mach_header_64);
+ if (header.filetype != macho.MH_OBJECT) {
+ log.debug("invalid filetype: expected 0x{x}, found 0x{x}", .{ macho.MH_OBJECT, header.filetype });
return error.NotObject;
}
- const this_arch: Arch = switch (self.header.?.cputype) {
+ const this_arch: Arch = switch (header.cputype) {
macho.CPU_TYPE_ARM64 => .aarch64,
macho.CPU_TYPE_X86_64 => .x86_64,
else => |value| {
@@ -271,6 +267,8 @@ pub fn parse(self: *Object) !void {
return error.MismatchedCpuArchitecture;
}
+ self.header = header;
+
try self.readLoadCommands(reader);
try self.parseSymbols();
try self.parseSections();