- const cpu_type_t native = Architecture::local().cpuType();
- const fat_arch *end = mArchList + mArchCount;
- for (const fat_arch *arch = mArchList; arch < end; ++arch)
- if (cpu_type_t(ntohl(arch->cputype)) == native) // ignoring subarch
- return Architecture(native);
- if (mArchCount == 1)
- return Architecture(ntohl(mArchList->cputype));
- UnixError::throwMe(ENOEXEC);
+ // ask the NXArch API for our native architecture
+ const Architecture native = Architecture::local();
+ if (fat_arch *match = NXFindBestFatArch(native.cpuType(), native.cpuSubtype(), mArchList, mArchCount))
+ return *match;
+ // if the system can't figure it out, pick (arbitrarily) the first one
+ return mArchList[0];