Index: include/llvm/Object/MachO.h =================================================================== --- include/llvm/Object/MachO.h +++ include/llvm/Object/MachO.h @@ -344,6 +344,12 @@ getLinkerOptionLoadCommand(const LoadCommandInfo &L) const; MachO::version_min_command getVersionMinLoadCommand(const LoadCommandInfo &L) const; + uint32_t + getVersionMinMajor(MachO::version_min_command &C, bool SDK) const; + uint32_t + getVersionMinMinor(MachO::version_min_command &C, bool SDK) const; + uint32_t + getVersionMinUpdate(MachO::version_min_command &C, bool SDK) const; MachO::dylib_command getDylibIDLoadCommand(const LoadCommandInfo &L) const; MachO::dyld_info_command Index: lib/Object/MachOObjectFile.cpp =================================================================== --- lib/Object/MachOObjectFile.cpp +++ lib/Object/MachOObjectFile.cpp @@ -2001,6 +2001,27 @@ return getStruct(this, L.Ptr); } +uint32_t +MachOObjectFile::getVersionMinMajor(MachO::version_min_command &C, + bool SDK) const { + uint32_t VersionOrSDK = (SDK) ? C.sdk : C.version; + return (VersionOrSDK >> 16) & 0xffff; +} + +uint32_t +MachOObjectFile::getVersionMinMinor(MachO::version_min_command &C, + bool SDK) const { + uint32_t VersionOrSDK = (SDK) ? C.sdk : C.version; + return (VersionOrSDK >> 8) & 0xff; +} + +uint32_t +MachOObjectFile::getVersionMinUpdate(MachO::version_min_command &C, + bool SDK) const { + uint32_t VersionOrSDK = (SDK) ? C.sdk : C.version; + return VersionOrSDK & 0xff; +} + MachO::dylib_command MachOObjectFile::getDylibIDLoadCommand(const LoadCommandInfo &L) const { return getStruct(this, L.Ptr); Index: tools/llvm-objdump/MachODump.cpp =================================================================== --- tools/llvm-objdump/MachODump.cpp +++ tools/llvm-objdump/MachODump.cpp @@ -7639,7 +7639,8 @@ } } -static void PrintVersionMinLoadCommand(MachO::version_min_command vd) { +static void PrintVersionMinLoadCommand(const MachOObjectFile *Obj, + MachO::version_min_command vd) { if (vd.cmd == MachO::LC_VERSION_MIN_MACOSX) outs() << " cmd LC_VERSION_MIN_MACOSX\n"; else if (vd.cmd == MachO::LC_VERSION_MIN_IPHONEOS) @@ -7651,19 +7652,23 @@ outs() << " Incorrect size\n"; else outs() << "\n"; - outs() << " version " << ((vd.version >> 16) & 0xffff) << "." - << ((vd.version >> 8) & 0xff); - if ((vd.version & 0xff) != 0) - outs() << "." << (vd.version & 0xff); + outs() << " version " + << Obj->getVersionMinMajor(vd, false) << "." + << Obj->getVersionMinMinor(vd, false); + uint32_t Update = Obj->getVersionMinUpdate(vd, false); + if (Update != 0) + outs() << "." << Update; outs() << "\n"; if (vd.sdk == 0) outs() << " sdk n/a"; else { - outs() << " sdk " << ((vd.sdk >> 16) & 0xffff) << "." - << ((vd.sdk >> 8) & 0xff); - } - if ((vd.sdk & 0xff) != 0) - outs() << "." << (vd.sdk & 0xff); + outs() << " sdk " + << Obj->getVersionMinMajor(vd, true) << "." + << Obj->getVersionMinMinor(vd, true); + } + Update = Obj->getVersionMinUpdate(vd, true); + if (Update != 0) + outs() << "." << Update; outs() << "\n"; } @@ -8358,7 +8363,7 @@ } else if (Command.C.cmd == MachO::LC_VERSION_MIN_MACOSX || Command.C.cmd == MachO::LC_VERSION_MIN_IPHONEOS) { MachO::version_min_command Vd = Obj->getVersionMinLoadCommand(Command); - PrintVersionMinLoadCommand(Vd); + PrintVersionMinLoadCommand(Obj, Vd); } else if (Command.C.cmd == MachO::LC_SOURCE_VERSION) { MachO::source_version_command Sd = Obj->getSourceVersionCommand(Command); PrintSourceVersionCommand(Sd);