[Lldb-commits] [lldb] r332067 - Retrieve the deployment target when retrieving an object file's triple.
Adrian Prantl via lldb-commits
lldb-commits at lists.llvm.org
Thu May 10 17:41:20 PDT 2018
Author: adrian
Date: Thu May 10 17:41:20 2018
New Revision: 332067
URL: http://llvm.org/viewvc/llvm-project?rev=332067&view=rev
Log:
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
Added:
lldb/trunk/lit/Modules/lc_version_min.yaml
Modified:
lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
Added: lldb/trunk/lit/Modules/lc_version_min.yaml
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Modules/lc_version_min.yaml?rev=332067&view=auto
==============================================================================
--- lldb/trunk/lit/Modules/lc_version_min.yaml (added)
+++ lldb/trunk/lit/Modules/lc_version_min.yaml Thu May 10 17:41:20 2018
@@ -0,0 +1,205 @@
+# RUN: yaml2obj %s > %t.out
+# RUN: lldb-test symbols %t.out | FileCheck %s
+# REQUIRES: darwin
+# Test that the deployment target is parsed from the load commands.
+# CHECK: x86_64-apple-macosx10.9.0
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACF
+ cputype: 0x01000007
+ cpusubtype: 0x80000003
+ filetype: 0x00000002
+ ncmds: 14
+ sizeofcmds: 728
+ flags: 0x00200085
+ reserved: 0x00000000
+LoadCommands:
+ - cmd: LC_SEGMENT_64
+ cmdsize: 72
+ segname: __PAGEZERO
+ vmaddr: 0
+ vmsize: 4294967296
+ fileoff: 0
+ filesize: 0
+ maxprot: 0
+ initprot: 0
+ nsects: 0
+ flags: 0
+ - cmd: LC_SEGMENT_64
+ cmdsize: 232
+ segname: __TEXT
+ vmaddr: 4294967296
+ vmsize: 4096
+ fileoff: 0
+ filesize: 4096
+ maxprot: 7
+ initprot: 5
+ nsects: 2
+ flags: 0
+ Sections:
+ - sectname: __text
+ segname: __TEXT
+ addr: 0x0000000100000FB0
+ size: 8
+ offset: 0x00000FB0
+ align: 0
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ - sectname: __unwind_info
+ segname: __TEXT
+ addr: 0x0000000100000FB8
+ size: 72
+ offset: 0x00000FB8
+ align: 2
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x00000000
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+ - cmd: LC_SEGMENT_64
+ cmdsize: 72
+ segname: __LINKEDIT
+ vmaddr: 4294971392
+ vmsize: 4096
+ fileoff: 4096
+ filesize: 152
+ maxprot: 7
+ initprot: 1
+ nsects: 0
+ flags: 0
+ - cmd: LC_DYLD_INFO_ONLY
+ cmdsize: 48
+ rebase_off: 0
+ rebase_size: 0
+ bind_off: 0
+ bind_size: 0
+ weak_bind_off: 0
+ weak_bind_size: 0
+ lazy_bind_off: 0
+ lazy_bind_size: 0
+ export_off: 4096
+ export_size: 48
+ - cmd: LC_SYMTAB
+ cmdsize: 24
+ symoff: 4152
+ nsyms: 3
+ stroff: 4200
+ strsize: 48
+ - cmd: LC_DYSYMTAB
+ cmdsize: 80
+ ilocalsym: 0
+ nlocalsym: 0
+ iextdefsym: 0
+ nextdefsym: 2
+ iundefsym: 2
+ nundefsym: 1
+ tocoff: 0
+ ntoc: 0
+ modtaboff: 0
+ nmodtab: 0
+ extrefsymoff: 0
+ nextrefsyms: 0
+ indirectsymoff: 0
+ nindirectsyms: 0
+ extreloff: 0
+ nextrel: 0
+ locreloff: 0
+ nlocrel: 0
+ - cmd: LC_LOAD_DYLINKER
+ cmdsize: 32
+ name: 12
+ PayloadString: /usr/lib/dyld
+ ZeroPadBytes: 7
+ - cmd: LC_UUID
+ cmdsize: 24
+ uuid: E75E737C-4FB3-312D-9B17-10987F48F957
+ - cmd: LC_VERSION_MIN_MACOSX
+ cmdsize: 16
+ version: 657664
+ sdk: 658944
+ - cmd: LC_SOURCE_VERSION
+ cmdsize: 16
+ version: 0
+ - cmd: LC_MAIN
+ cmdsize: 24
+ entryoff: 4016
+ stacksize: 0
+ - cmd: LC_LOAD_DYLIB
+ cmdsize: 56
+ dylib:
+ name: 24
+ timestamp: 2
+ current_version: 82102276
+ compatibility_version: 65536
+ PayloadString: /usr/lib/libSystem.B.dylib
+ ZeroPadBytes: 6
+ - cmd: LC_FUNCTION_STARTS
+ cmdsize: 16
+ dataoff: 4144
+ datasize: 8
+ - cmd: LC_DATA_IN_CODE
+ cmdsize: 16
+ dataoff: 4152
+ datasize: 0
+LinkEditData:
+ ExportTrie:
+ TerminalSize: 0
+ NodeOffset: 0
+ Name: ''
+ Flags: 0x0000000000000000
+ Address: 0x0000000000000000
+ Other: 0x0000000000000000
+ ImportName: ''
+ Children:
+ - TerminalSize: 0
+ NodeOffset: 5
+ Name: _
+ Flags: 0x0000000000000000
+ Address: 0x0000000000000000
+ Other: 0x0000000000000000
+ ImportName: ''
+ Children:
+ - TerminalSize: 2
+ NodeOffset: 33
+ Name: _mh_execute_header
+ Flags: 0x0000000000000000
+ Address: 0x0000000000000000
+ Other: 0x0000000000000000
+ ImportName: ''
+ - TerminalSize: 3
+ NodeOffset: 37
+ Name: main
+ Flags: 0x0000000000000000
+ Address: 0x0000000000000FB0
+ Other: 0x0000000000000000
+ ImportName: ''
+ NameList:
+ - n_strx: 2
+ n_type: 0x0F
+ n_sect: 1
+ n_desc: 16
+ n_value: 4294967296
+ - n_strx: 22
+ n_type: 0x0F
+ n_sect: 1
+ n_desc: 0
+ n_value: 4294971312
+ - n_strx: 28
+ n_type: 0x01
+ n_sect: 0
+ n_desc: 256
+ n_value: 0
+ StringTable:
+ - ' '
+ - __mh_execute_header
+ - _main
+ - dyld_stub_binder
+ - ''
+ - ''
+ - ''
+...
Modified: lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp?rev=332067&r1=332066&r2=332067&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (original)
+++ lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp Thu May 10 17:41:20 2018
@@ -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
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(co
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;
}
More information about the lldb-commits
mailing list