diff --git a/lld/MachO/InputFiles.cpp b/lld/MachO/InputFiles.cpp --- a/lld/MachO/InputFiles.cpp +++ b/lld/MachO/InputFiles.cpp @@ -231,8 +231,14 @@ return std::nullopt; } - if (read32be(&arch[i].cputype) != static_cast(target->cpuType) || - read32be(&arch[i].cpusubtype) != target->cpuSubtype) + uint32_t cuptype = read32be(&arch[i].cputype); + uint32_t cpusubtype = + read32be(&arch[i].cpusubtype) & ~MachO::CPU_SUBTYPE_MASK; + + // FIXME: LD64 has a more complex fallback logic here. + // Consider implementing that as well? + if (cuptype != static_cast(target->cpuType) || + cpusubtype != target->cpuSubtype) continue; uint32_t offset = read32be(&arch[i].offset);