diff options
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/Mach-O')
-rw-r--r-- | lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp | 50 | ||||
-rw-r--r-- | lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h | 4 |
2 files changed, 14 insertions, 40 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() { diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h index ca4f3025b4d..df6b914fa73 100644 --- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h +++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h @@ -116,7 +116,7 @@ public: llvm::VersionTuple GetMinimumOSVersion() override; - uint32_t GetSDKVersion(uint32_t *versions, uint32_t num_versions) override; + llvm::VersionTuple GetSDKVersion() override; bool GetIsDynamicLinkEditor() override; @@ -198,7 +198,7 @@ protected: std::vector<llvm::MachO::segment_command_64> m_mach_segments; std::vector<llvm::MachO::section_64> m_mach_sections; llvm::Optional<llvm::VersionTuple> m_min_os_version; - std::vector<uint32_t> m_sdk_versions; + llvm::Optional<llvm::VersionTuple> m_sdk_versions; typedef lldb_private::RangeVector<uint32_t, uint32_t> FileRangeArray; lldb_private::Address m_entry_point_address; FileRangeArray m_thread_context_offsets; |