diff options
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp')
-rw-r--r-- | lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp | 50 |
1 files changed, 12 insertions, 38 deletions
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp index 6e822826381..ce928cf375d 100644 --- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp +++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp @@ -5849,12 +5849,10 @@ llvm::VersionTuple ObjectFileMachO::GetMinimumOSVersion() { return *m_min_os_version; } -uint32_t ObjectFileMachO::GetSDKVersion(uint32_t *versions, - uint32_t num_versions) { - if (m_sdk_versions.empty()) { +llvm::VersionTuple ObjectFileMachO::GetSDKVersion() { + if (!m_sdk_versions.hasValue()) { lldb::offset_t offset = MachHeaderSizeFromMagic(m_header.magic); - bool success = false; - for (uint32_t i = 0; !success && i < m_header.ncmds; ++i) { + for (uint32_t i = 0; i < m_header.ncmds; ++i) { const lldb::offset_t load_cmd_offset = offset; version_min_command lc; @@ -5870,10 +5868,8 @@ uint32_t ObjectFileMachO::GetSDKVersion(uint32_t *versions, const uint32_t yy = (lc.sdk >> 8) & 0xffu; const uint32_t zz = lc.sdk & 0xffu; if (xxxx) { - m_sdk_versions.push_back(xxxx); - m_sdk_versions.push_back(yy); - m_sdk_versions.push_back(zz); - success = true; + m_sdk_versions = llvm::VersionTuple(xxxx, yy, zz); + break; } else { GetModule()->ReportWarning( "minimum OS version load command with invalid (0) version found."); @@ -5883,9 +5879,9 @@ uint32_t ObjectFileMachO::GetSDKVersion(uint32_t *versions, offset = load_cmd_offset + lc.cmdsize; } - if (!success) { + if (!m_sdk_versions.hasValue()) { offset = MachHeaderSizeFromMagic(m_header.magic); - for (uint32_t i = 0; !success && i < m_header.ncmds; ++i) { + for (uint32_t i = 0; i < m_header.ncmds; ++i) { const lldb::offset_t load_cmd_offset = offset; version_min_command lc; @@ -5912,41 +5908,19 @@ uint32_t ObjectFileMachO::GetSDKVersion(uint32_t *versions, const uint32_t yy = (minos >> 8) & 0xffu; const uint32_t zz = minos & 0xffu; if (xxxx) { - m_sdk_versions.push_back(xxxx); - m_sdk_versions.push_back(yy); - m_sdk_versions.push_back(zz); - success = true; + m_sdk_versions = llvm::VersionTuple(xxxx, yy, zz); + break; } } offset = load_cmd_offset + lc.cmdsize; } } - if (!success) { - // Push an invalid value so we don't try to find - // the version # again on the next call to this - // method. - m_sdk_versions.push_back(UINT32_MAX); - } + if (!m_sdk_versions.hasValue()) + m_sdk_versions = llvm::VersionTuple(); } - // Legitimate version numbers will have 3 entries pushed - // on to m_sdk_versions. If we only have one value, it's - // the sentinel value indicating that this object file - // does not have a valid minimum os version #. - if (m_sdk_versions.size() > 1) { - if (versions != nullptr && num_versions > 0) { - for (size_t i = 0; i < num_versions; ++i) { - if (i < m_sdk_versions.size()) - versions[i] = m_sdk_versions[i]; - else - versions[i] = 0; - } - } - return m_sdk_versions.size(); - } - // Call the superclasses version that will empty out the data - return ObjectFile::GetSDKVersion(versions, num_versions); + return m_sdk_versions.getValue(); } bool ObjectFileMachO::GetIsDynamicLinkEditor() { |