diff options
| author | Tom Maenan Read Cutting <readcuttingt@gmail.com> | 2021-06-24 23:29:39 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2021-06-25 08:38:47 +0200 |
| commit | 177b1b6bf9a7402eb688159dfa94ea5a5ea6f550 (patch) | |
| tree | 2b14f44eb4fd81a0f3e0067190f71e09f8a2cffb /src/link/MachO/Object.zig | |
| parent | 2d2a6ed1a46349355650bfdd68688738c67bbf9c (diff) | |
| download | zig-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.zig | 14 |
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(); |
