Skip to content

Commit f998f4d

Browse files
committed
Support parsing fat MachO objects produced by Metal.
1 parent 05a2e5c commit f998f4d

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

src/MachO/MachOHeader.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ function macho_header_type(magic::UInt32)
4242
return MachOHeader32{MachOHandle}
4343
elseif magic in (MH_MAGIC_64, MH_CIGAM_64)
4444
return MachOHeader64{MachOHandle}
45-
elseif magic in (FAT_MAGIC, FAT_CIGAM, FAT_MAGIC_64, FAT_CIGAM_64)
45+
elseif magic in (FAT_MAGIC, FAT_CIGAM, FAT_MAGIC_64, FAT_CIGAM_64, FAT_MAGIC_METAL, FAT_CIGAM_METAL)
4646
return MachOFatHeader{MachOHandle}
4747
else
4848
throw(MagicMismatch("Invalid Magic ($(string(magic, base=16)))!"))
@@ -58,7 +58,7 @@ Mach-O header.
5858
function macho_is64bit(magic::UInt32)
5959
if magic in (MH_MAGIC_64, MH_CIGAM_64, FAT_MAGIC_64, FAT_CIGAM_64)
6060
return true
61-
elseif magic in (MH_MAGIC, MH_CIGAM, FAT_MAGIC, FAT_CIGAM)
61+
elseif magic in (MH_MAGIC, MH_CIGAM, FAT_MAGIC, FAT_CIGAM, FAT_MAGIC_METAL, FAT_CIGAM_METAL)
6262
return false
6363
else
6464
throw(MagicMismatch("Invalid Magic ($(string(magic, base=16)))!"))
@@ -72,9 +72,9 @@ Given the `magic` field from a Mach-O file header, return the endianness of the
7272
Mach-O header.
7373
"""
7474
function macho_endianness(magic::UInt32)
75-
if magic in (MH_CIGAM, MH_CIGAM_64, FAT_CIGAM)
75+
if magic in (MH_CIGAM, MH_CIGAM_64, FAT_CIGAM, FAT_CIGAM_METAL)
7676
return :BigEndian
77-
elseif magic in (MH_MAGIC, MH_MAGIC_64, FAT_MAGIC)
77+
elseif magic in (MH_MAGIC, MH_MAGIC_64, FAT_MAGIC, FAT_MAGIC_METAL)
7878
return :LittleEndian
7979
else
8080
throw(MagicMismatch("Invalid Magic ($(string(magic, base=16)))!"))

src/MachO/constants.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111

1212
const FAT_MAGIC_64 = 0xCAFEBABF
1313
const FAT_CIGAM_64 = bswap(FAT_MAGIC_64)
14+
15+
const FAT_MAGIC_METAL = 0xCBFEBABE
16+
const FAT_CIGAM_METAL = bswap(FAT_MAGIC_METAL)
1417
end
1518

1619
const CPU_ARCH_MASK = 0xff000000

0 commit comments

Comments
 (0)