From 8edf764fa3e2f760757d881d0e7e5eb80649bccb Mon Sep 17 00:00:00 2001 From: Arnaud Ysmal Date: Tue, 10 Sep 2013 11:50:34 -0700 Subject: [PATCH] libmach: accept OS X binary generated by external linker Fixes cpu subtype check when using external linker which sets the CPU_SUBTYPE_LIB64 bit (1<<31). Fixes #6197. R=golang-dev, minux.ma, rsc CC=golang-dev https://golang.org/cl/13248046 --- src/libmach/executable.c | 2 +- src/libmach/macho.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libmach/executable.c b/src/libmach/executable.c index 91c0cbe76b..eae14441a0 100644 --- a/src/libmach/executable.c +++ b/src/libmach/executable.c @@ -1076,7 +1076,7 @@ machdotout(int fd, Fhdr *fp, ExecHdr *hp) return 0; } - if (mp->cpusubtype != MACH_CPU_SUBTYPE_X86) { + if (mp->cpusubtype != MACH_CPU_SUBTYPE_X86 && mp->cpusubtype != MACH_CPU_SUBTYPE_X86_64) { werrstr("bad MACH cpu subtype - not amd64"); return 0; } diff --git a/src/libmach/macho.h b/src/libmach/macho.h index df039d0485..9dfea5a85c 100644 --- a/src/libmach/macho.h +++ b/src/libmach/macho.h @@ -87,6 +87,7 @@ enum { MACH_CPU_TYPE_X86_64 = (1<<24)|7, MACH_CPU_TYPE_X86 = 7, MACH_CPU_SUBTYPE_X86 = 3, + MACH_CPU_SUBTYPE_X86_64 = (1<<31)|3, MACH_EXECUTABLE_TYPE = 2, MACH_SEGMENT_32 = 1, /* 32-bit mapped segment */ MACH_SEGMENT_64 = 0x19, /* 64-bit mapped segment */ -- 2.50.0