summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2018-06-25 23:45:39 +0000
committerJason Molenda <jmolenda@apple.com>2018-06-25 23:45:39 +0000
commit32a914256e6a8e8d1b2c78c71def1d9cb7042371 (patch)
tree182b7c046073865d939b799ef0c09be6f42086ed /lldb/source/Plugins
parentf74ef4b1e634f094654de3b7b3567fa747c7e8a8 (diff)
downloadbcm5719-llvm-32a914256e6a8e8d1b2c78c71def1d9cb7042371.tar.gz
bcm5719-llvm-32a914256e6a8e8d1b2c78c71def1d9cb7042371.zip
A little cleanup in ObjectFileMachO::GetSDKVersion.
This method does one of two things: 1. finds a minimum os deployment version # in a Mach-O load command and saves the three parts in the m_sdk_version, or 2. finds no valid min os version # load command, pushes a sentinel value on the m_sdk_version vector so we don't search the same load commands multiple times. There was a little bug when we found a load command with a version of 0.0.0 - the method would not add anything to the m_sdk_version vector but would declare that a success. It would not push the sentinel value to the vector. There was code later in the method which assumed that the vector always had a sentinel value, at least, and that code could crash when this method was called back when evaluating a Swift expression. (these version #'s are fetched lazily so it wouldn't happen when the object file was parsed, only when doing an expression that needed the version #). <rdar://problem/41372699> llvm-svn: 335556
Diffstat (limited to 'lldb/source/Plugins')
-rw-r--r--lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index 0aa0fc91e40..882cd1a9398 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -5757,20 +5757,29 @@ uint32_t ObjectFileMachO::GetSDKVersion(uint32_t *versions,
m_sdk_versions.push_back(xxxx);
m_sdk_versions.push_back(yy);
m_sdk_versions.push_back(zz);
+ success = true;
+ } else {
+ GetModule()->ReportWarning(
+ "minimum OS version load command with invalid (0) version found.");
}
- success = true;
}
}
offset = load_cmd_offset + lc.cmdsize;
}
if (success == false) {
- // Push an invalid value so we don't keep trying to
+ // 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.size() > 1 || m_sdk_versions[0] != UINT32_MAX) {
+ // 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 != NULL && num_versions > 0) {
for (size_t i = 0; i < num_versions; ++i) {
if (i < m_sdk_versions.size())
OpenPOWER on IntegriCloud