diff options
| author | Adrian Prantl <aprantl@apple.com> | 2018-05-11 00:41:20 +0000 |
|---|---|---|
| committer | Adrian Prantl <aprantl@apple.com> | 2018-05-11 00:41:20 +0000 |
| commit | 9702c963ab3ab77cad2e1f1c917b058ddd645099 (patch) | |
| tree | 5c7c7823030c54291e14da2fe2b62904b2f7c82a /lldb/source/Plugins/ObjectFile/Mach-O | |
| parent | f9fc9513bf48721ed5a8d229d81654928f733909 (diff) | |
| download | bcm5719-llvm-9702c963ab3ab77cad2e1f1c917b058ddd645099.tar.gz bcm5719-llvm-9702c963ab3ab77cad2e1f1c917b058ddd645099.zip | |
Retrieve the deployment target when retrieving an object file's triple.
Getting the deployment target can be significant information when
rebuilding clang modules since availability information could depend
on it.
rdar://problem/40039633
Differential Revision: https://reviews.llvm.org/D46669
llvm-svn: 332067
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/Mach-O')
| -rw-r--r-- | lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp | 45 |
1 files changed, 33 insertions, 12 deletions
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp index 2ce4564836f..e006d18c1aa 100644 --- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp +++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp @@ -4819,7 +4819,7 @@ void ObjectFileMachO::Dump(Stream *s) { GetArchitecture(header_arch); *s << ", file = '" << m_file - << "', arch = " << header_arch.GetArchitectureName() << "\n"; + << "', triple = " << header_arch.GetTriple().getTriple() << "\n"; SectionList *sections = GetSectionList(); if (sections) @@ -4867,6 +4867,21 @@ bool ObjectFileMachO::GetUUID(const llvm::MachO::mach_header &header, return false; } +static const char *GetOSName(uint32_t cmd) { + switch (cmd) { + case llvm::MachO::LC_VERSION_MIN_IPHONEOS: + return "ios"; + case llvm::MachO::LC_VERSION_MIN_MACOSX: + return "macosx"; + case llvm::MachO::LC_VERSION_MIN_TVOS: + return "tvos"; + case llvm::MachO::LC_VERSION_MIN_WATCHOS: + return "watchos"; + default: + llvm_unreachable("unexpected LC_VERSION load command"); + } +} + bool ObjectFileMachO::GetArchitecture(const llvm::MachO::mach_header &header, const lldb_private::DataExtractor &data, lldb::offset_t lc_offset, @@ -4905,23 +4920,29 @@ bool ObjectFileMachO::GetArchitecture(const llvm::MachO::mach_header &header, if (data.GetU32(&offset, &load_cmd, 2) == NULL) break; + uint32_t major, minor, patch; + struct version_min_command version_min; + + llvm::SmallString<16> os_name; + llvm::raw_svector_ostream os(os_name); + switch (load_cmd.cmd) { case llvm::MachO::LC_VERSION_MIN_IPHONEOS: - triple.setOS(llvm::Triple::IOS); - return true; - case llvm::MachO::LC_VERSION_MIN_MACOSX: - triple.setOS(llvm::Triple::MacOSX); - return true; - case llvm::MachO::LC_VERSION_MIN_TVOS: - triple.setOS(llvm::Triple::TvOS); - return true; - case llvm::MachO::LC_VERSION_MIN_WATCHOS: - triple.setOS(llvm::Triple::WatchOS); + if (load_cmd.cmdsize != sizeof(version_min)) + break; + data.ExtractBytes(cmd_offset, + sizeof(version_min), data.GetByteOrder(), + &version_min); + major = version_min.version >> 16; + minor = (version_min.version >> 8) & 0xffu; + patch = version_min.version & 0xffu; + os << GetOSName(load_cmd.cmd) << major << '.' << minor << '.' + << patch; + triple.setOSName(os.str()); return true; - default: break; } |

