[Lldb-commits] [PATCH] D46669: Retrieve the deployment target when retrieving an object file's triple

2018-05-10 Thread Phabricator via Phabricator via lldb-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL332067: Retrieve the deployment target when retrieving an 
object files triple. (authored by adrian, committed by ).
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D46669?vs=146235=146264#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D46669

Files:
  lldb/trunk/lit/Modules/lc_version_min.yaml
  lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

Index: lldb/trunk/lit/Modules/lc_version_min.yaml
===
--- lldb/trunk/lit/Modules/lc_version_min.yaml
+++ lldb/trunk/lit/Modules/lc_version_min.yaml
@@ -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: 0x0107
+  cpusubtype:  0x8003
+  filetype:0x0002
+  ncmds:   14
+  sizeofcmds:  728
+  flags:   0x00200085
+  reserved:0x
+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:0x00010FB0
+size:8
+offset:  0x0FB0
+align:   0
+reloff:  0x
+nreloc:  0
+flags:   0x8400
+reserved1:   0x
+reserved2:   0x
+reserved3:   0x
+  - sectname:__unwind_info
+segname: __TEXT
+addr:0x00010FB8
+size:72
+offset:  0x0FB8
+align:   2
+reloff:  0x
+nreloc:  0
+flags:   0x
+reserved1:   0x
+reserved2:   0x
+reserved3:   0x
+  - 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
+

[Lldb-commits] [PATCH] D46669: Retrieve the deployment target when retrieving an object file's triple

2018-05-10 Thread Jason Molenda via Phabricator via lldb-commits
jasonmolenda accepted this revision.
jasonmolenda added a comment.
This revision is now accepted and ready to land.

Looks good.


https://reviews.llvm.org/D46669



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D46669: Retrieve the deployment target when retrieving an object file's triple

2018-05-10 Thread Adrian Prantl via Phabricator via lldb-commits
aprantl updated this revision to Diff 146235.
aprantl added a comment.

Added a REQUIRES: darwin


https://reviews.llvm.org/D46669

Files:
  lit/Modules/lc_version_min.yaml
  source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

Index: source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
===
--- source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -4814,7 +4814,7 @@
 GetArchitecture(header_arch);
 
 *s << ", file = '" << m_file
-   << "', arch = " << header_arch.GetArchitectureName() << "\n";
+   << "', triple = " << header_arch.GetTriple().getTriple() << "\n";
 
 SectionList *sections = GetSectionList();
 if (sections)
@@ -4862,6 +4862,21 @@
   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 ,
   const lldb_private::DataExtractor ,
   lldb::offset_t lc_offset,
@@ -4900,23 +4915,29 @@
 if (data.GetU32(, _cmd, 2) == NULL)
   break;
 
+uint32_t major, minor, patch;
+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(),
+_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;
 }
Index: lit/Modules/lc_version_min.yaml
===
--- /dev/null
+++ lit/Modules/lc_version_min.yaml
@@ -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: 0x0107
+  cpusubtype:  0x8003
+  filetype:0x0002
+  ncmds:   14
+  sizeofcmds:  728
+  flags:   0x00200085
+  reserved:0x
+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:0x00010FB0
+size:8
+offset:  0x0FB0
+align:   0
+reloff:  0x
+nreloc:  0
+flags:   0x8400
+reserved1:   0x
+reserved2:   0x
+reserved3:   0x
+  - sectname:__unwind_info
+segname: __TEXT
+addr:0x00010FB8
+size:72
+offset:  0x0FB8
+align:   2
+reloff:  0x
+nreloc:  0
+flags:   0x
+reserved1:   0x
+reserved2:   0x
+reserved3:   0x
+  - cmd: LC_SEGMENT_64
+cmdsize: 72
+segname: __LINKEDIT
+

[Lldb-commits] [PATCH] D46669: Retrieve the deployment target when retrieving an object file's triple

2018-05-10 Thread Adrian Prantl via Phabricator via lldb-commits
aprantl updated this revision to Diff 146234.
aprantl added a comment.

Much smaller test thanks to Pavel's suggestion!


https://reviews.llvm.org/D46669

Files:
  lit/Modules/lc_version_min.yaml
  source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

Index: source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
===
--- source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -4814,7 +4814,7 @@
 GetArchitecture(header_arch);
 
 *s << ", file = '" << m_file
-   << "', arch = " << header_arch.GetArchitectureName() << "\n";
+   << "', triple = " << header_arch.GetTriple().getTriple() << "\n";
 
 SectionList *sections = GetSectionList();
 if (sections)
@@ -4862,6 +4862,21 @@
   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 ,
   const lldb_private::DataExtractor ,
   lldb::offset_t lc_offset,
@@ -4900,23 +4915,29 @@
 if (data.GetU32(, _cmd, 2) == NULL)
   break;
 
+uint32_t major, minor, patch;
+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(),
+_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;
 }
Index: lit/Modules/lc_version_min.yaml
===
--- /dev/null
+++ lit/Modules/lc_version_min.yaml
@@ -0,0 +1,204 @@
+# RUN: yaml2obj %s > %t.out
+# RUN: lldb-test symbols %t.out | FileCheck %s
+# Test that the deployment target is parsed from the load commands.
+# CHECK: x86_64-apple-macosx10.9.0
+--- !mach-o
+FileHeader:  
+  magic:   0xFEEDFACF
+  cputype: 0x0107
+  cpusubtype:  0x8003
+  filetype:0x0002
+  ncmds:   14
+  sizeofcmds:  728
+  flags:   0x00200085
+  reserved:0x
+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:0x00010FB0
+size:8
+offset:  0x0FB0
+align:   0
+reloff:  0x
+nreloc:  0
+flags:   0x8400
+reserved1:   0x
+reserved2:   0x
+reserved3:   0x
+  - sectname:__unwind_info
+segname: __TEXT
+addr:0x00010FB8
+size:72
+offset:  0x0FB8
+align:   2
+reloff:  0x
+nreloc:  0
+flags:   0x
+reserved1:   0x
+reserved2:   0x
+reserved3:   0x
+  - cmd: LC_SEGMENT_64
+cmdsize: 72
+segname: __LINKEDIT
+ 

[Lldb-commits] [PATCH] D46669: Retrieve the deployment target when retrieving an object file's triple

2018-05-10 Thread Pavel Labath via Phabricator via lldb-commits
labath added a comment.

The test you copied this from predates `lldb-test` (and it tests some behavior 
quirks which are not nicely expressible in text output). We should have nicer 
ways of testing things like this now. It should be sufficient to add a print 
line which displays the triple in the `dumpModules` function in 
`lldb-test.cpp`. Then you can just run `lldb-test module-sections your-file` 
and FileCheck that.

The other thing you will need to do is make this test darwin-only as right now 
our MachO parsing code does not work on non-apple platforms. The reason for 
that is very silly - ObjectFileMachO depends on RegisterContextDarwin_XXX 
(presumably to read register information from core files), which use constants 
like `KERN_SUCCESS` from system headers. (I've looked at this recently because 
I wanted to make some cross-platform tests for apple debug info and got stuck 
here.)


https://reviews.llvm.org/D46669



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D46669: Retrieve the deployment target when retrieving an object file's triple

2018-05-09 Thread Adrian Prantl via Phabricator via lldb-commits
aprantl created this revision.
aprantl added a reviewer: jasonmolenda.
Herald added a subscriber: mgorny.

Getting the deployment target can be significant information when rebuilding 
clang modules since availability information could depend on it. The unittest 
is cargo-culted from the ELF unit tests.

rdar://problem/40039633


https://reviews.llvm.org/D46669

Files:
  source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
  unittests/ObjectFile/CMakeLists.txt
  unittests/ObjectFile/MachO/CMakeLists.txt
  unittests/ObjectFile/MachO/Inputs/lc_version_min.yaml
  unittests/ObjectFile/MachO/TestObjectFileMachO.cpp

Index: unittests/ObjectFile/MachO/TestObjectFileMachO.cpp
===
--- /dev/null
+++ unittests/ObjectFile/MachO/TestObjectFileMachO.cpp
@@ -0,0 +1,79 @@
+//===-- TestObjectFileMachO.cpp ---*- C++ -*-===//
+//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===--===//
+
+#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
+#include "TestingSupport/TestUtilities.h"
+#include "lldb/Core/Module.h"
+#include "lldb/Core/ModuleSpec.h"
+#include "lldb/Core/Section.h"
+#include "lldb/Host/HostInfo.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/Support/Compression.h"
+#include "llvm/Support/FileUtilities.h"
+#include "llvm/Support/Path.h"
+#include "llvm/Support/Program.h"
+#include "llvm/Support/raw_ostream.h"
+#include "gtest/gtest.h"
+
+using namespace lldb_private;
+using namespace lldb;
+
+class ObjectFileMachOTest : public testing::Test {
+public:
+  void SetUp() override {
+HostInfo::Initialize();
+ObjectFileMachO::Initialize();
+  }
+
+  void TearDown() override {
+ObjectFileMachO::Terminate();
+HostInfo::Terminate();
+  }
+
+protected:
+};
+
+#define ASSERT_NO_ERROR(x) \
+  if (std::error_code ASSERT_NO_ERROR_ec = x) {\
+llvm::SmallString<128> MessageStorage; \
+llvm::raw_svector_ostream Message(MessageStorage); \
+Message << #x ": did not return errc::success.\n"  \
+<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n"  \
+<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n";  \
+GTEST_FATAL_FAILURE_(MessageStorage.c_str());  \
+  } else { \
+  }
+
+TEST_F(ObjectFileMachOTest, LCVersionMin) {
+  std::string yaml = GetInputFilePath("lc_version_min.yaml");
+  llvm::SmallString<128> obj;
+  ASSERT_NO_ERROR(llvm::sys::fs::createTemporaryFile(
+  "lc_version_min-%%", "obj", obj));
+
+  llvm::FileRemover remover(obj);
+  const char *args[] = {YAML2OBJ, yaml.c_str(), nullptr};
+  llvm::StringRef obj_ref = obj;
+  const llvm::Optional redirects[] = {llvm::None, obj_ref,
+   llvm::None};
+  ASSERT_EQ(0, llvm::sys::ExecuteAndWait(YAML2OBJ, args, nullptr, redirects));
+  uint64_t size;
+  ASSERT_NO_ERROR(llvm::sys::fs::file_size(obj, size));
+  ASSERT_GT(size, 0u);
+
+  ModuleSpec spec{FileSpec(obj, false)};
+  spec.GetSymbolFileSpec().SetFile(obj, false);
+  auto module_sp = std::make_shared(spec);
+  SectionList *list = module_sp->GetSectionList();
+  ASSERT_NE(nullptr, list);
+
+
+  ArchSpec arch = module_sp->GetArchitecture();
+  ASSERT_EQ(arch.GetTriple().getOSName(), "macosx10.9.0");
+}
Index: unittests/ObjectFile/MachO/Inputs/lc_version_min.yaml
===
--- /dev/null
+++ unittests/ObjectFile/MachO/Inputs/lc_version_min.yaml
@@ -0,0 +1,200 @@
+--- !mach-o
+FileHeader:  
+  magic:   0xFEEDFACF
+  cputype: 0x0107
+  cpusubtype:  0x8003
+  filetype:0x0002
+  ncmds:   14
+  sizeofcmds:  728
+  flags:   0x00200085
+  reserved:0x
+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:0x00010FB0
+