[Lldb-commits] [PATCH] D25217: Fix test when using remote debugging.

2016-10-04 Thread Pavel Labath via lldb-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL283171: Fix test when using remote debugging. (authored by 
labath).

Changed prior to commit:
  https://reviews.llvm.org/D25217?vs=73381&id=73419#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D25217

Files:
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_case_sensitivity/TestBreakpointCaseSensitivity.py


Index: 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_case_sensitivity/TestBreakpointCaseSensitivity.py
===
--- 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_case_sensitivity/TestBreakpointCaseSensitivity.py
+++ 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_case_sensitivity/TestBreakpointCaseSensitivity.py
@@ -46,7 +46,7 @@
 # Create a target by the debugger.
 self.target = self.dbg.CreateTarget(exe)
 self.assertTrue(self.target, VALID_TARGET)
-cwd = self.get_process_working_directory()
+cwd = os.getcwd()
 
 # try both BreakpointCreateByLocation and BreakpointCreateBySourceRegex
 for regex in [False, True]:


Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_case_sensitivity/TestBreakpointCaseSensitivity.py
===
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_case_sensitivity/TestBreakpointCaseSensitivity.py
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_case_sensitivity/TestBreakpointCaseSensitivity.py
@@ -46,7 +46,7 @@
 # Create a target by the debugger.
 self.target = self.dbg.CreateTarget(exe)
 self.assertTrue(self.target, VALID_TARGET)
-cwd = self.get_process_working_directory()
+cwd = os.getcwd()
 
 # try both BreakpointCreateByLocation and BreakpointCreateBySourceRegex
 for regex in [False, True]:
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D25099: Refactor Args a different way

2016-10-04 Thread Zachary Turner via lldb-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL283157: Refactor the Args class. (authored by zturner).

Changed prior to commit:
  https://reviews.llvm.org/D25099?vs=73335&id=73418#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D25099

Files:
  lldb/trunk/include/lldb/Interpreter/Args.h
  lldb/trunk/source/Core/Logging.cpp
  lldb/trunk/source/Core/StringList.cpp
  lldb/trunk/source/Interpreter/Args.cpp
  lldb/trunk/unittests/Interpreter/TestArgs.cpp

Index: lldb/trunk/unittests/Interpreter/TestArgs.cpp
===
--- lldb/trunk/unittests/Interpreter/TestArgs.cpp
+++ lldb/trunk/unittests/Interpreter/TestArgs.cpp
@@ -66,6 +66,109 @@
   EXPECT_STREQ(args.GetArgumentAtIndex(1), "second_arg");
 }
 
+TEST(ArgsTest, TestInsertArg) {
+  Args args;
+  args.AppendArgument("1");
+  args.AppendArgument("2");
+  args.AppendArgument("3");
+  args.InsertArgumentAtIndex(1, "1.5");
+  args.InsertArgumentAtIndex(4, "3.5");
+
+  ASSERT_EQ(5u, args.GetArgumentCount());
+  EXPECT_STREQ("1", args.GetArgumentAtIndex(0));
+  EXPECT_STREQ("1.5", args.GetArgumentAtIndex(1));
+  EXPECT_STREQ("2", args.GetArgumentAtIndex(2));
+  EXPECT_STREQ("3", args.GetArgumentAtIndex(3));
+  EXPECT_STREQ("3.5", args.GetArgumentAtIndex(4));
+}
+
+TEST(ArgsTest, TestArgv) {
+  Args args;
+  EXPECT_EQ(nullptr, args.GetArgumentVector());
+
+  args.AppendArgument("1");
+  EXPECT_NE(nullptr, args.GetArgumentVector()[0]);
+  EXPECT_EQ(nullptr, args.GetArgumentVector()[1]);
+
+  args.AppendArgument("2");
+  EXPECT_NE(nullptr, args.GetArgumentVector()[0]);
+  EXPECT_NE(nullptr, args.GetArgumentVector()[1]);
+  EXPECT_EQ(nullptr, args.GetArgumentVector()[2]);
+
+  args.AppendArgument("3");
+  EXPECT_NE(nullptr, args.GetArgumentVector()[0]);
+  EXPECT_NE(nullptr, args.GetArgumentVector()[1]);
+  EXPECT_NE(nullptr, args.GetArgumentVector()[2]);
+  EXPECT_EQ(nullptr, args.GetArgumentVector()[3]);
+
+  args.InsertArgumentAtIndex(1, "1.5");
+  EXPECT_NE(nullptr, args.GetArgumentVector()[0]);
+  EXPECT_NE(nullptr, args.GetArgumentVector()[1]);
+  EXPECT_NE(nullptr, args.GetArgumentVector()[2]);
+  EXPECT_NE(nullptr, args.GetArgumentVector()[3]);
+  EXPECT_EQ(nullptr, args.GetArgumentVector()[4]);
+
+  args.InsertArgumentAtIndex(4, "3.5");
+  EXPECT_NE(nullptr, args.GetArgumentVector()[0]);
+  EXPECT_NE(nullptr, args.GetArgumentVector()[1]);
+  EXPECT_NE(nullptr, args.GetArgumentVector()[2]);
+  EXPECT_NE(nullptr, args.GetArgumentVector()[3]);
+  EXPECT_NE(nullptr, args.GetArgumentVector()[4]);
+  EXPECT_EQ(nullptr, args.GetArgumentVector()[5]);
+}
+
+TEST(ArgsTest, GetQuotedCommandString) {
+  Args args;
+  const char *str = "process launch -o stdout.txt -- \"a b c\"";
+  args.SetCommandString(str);
+
+  std::string stdstr;
+  ASSERT_TRUE(args.GetQuotedCommandString(stdstr));
+  EXPECT_EQ(str, stdstr);
+}
+
+TEST(ArgsTest, BareSingleQuote) {
+  Args args;
+  args.SetCommandString("a\\'b");
+  EXPECT_EQ(1u, args.GetArgumentCount());
+
+  EXPECT_STREQ("a'b", args.GetArgumentAtIndex(0));
+}
+
+TEST(ArgsTest, DoubleQuotedItem) {
+  Args args;
+  args.SetCommandString("\"a b c\"");
+  EXPECT_EQ(1u, args.GetArgumentCount());
+
+  EXPECT_STREQ("a b c", args.GetArgumentAtIndex(0));
+}
+
+TEST(ArgsTest, AppendArguments) {
+  Args args;
+  const char *argv[] = {"1", "2", nullptr};
+  const char *argv2[] = {"3", "4", nullptr};
+
+  args.AppendArguments(argv);
+  ASSERT_EQ(2u, args.GetArgumentCount());
+  EXPECT_STREQ("1", args.GetArgumentVector()[0]);
+  EXPECT_STREQ("2", args.GetArgumentVector()[1]);
+  EXPECT_EQ(nullptr, args.GetArgumentVector()[2]);
+  EXPECT_STREQ("1", args.GetArgumentAtIndex(0));
+  EXPECT_STREQ("2", args.GetArgumentAtIndex(1));
+
+  args.AppendArguments(argv2);
+  ASSERT_EQ(4u, args.GetArgumentCount());
+  EXPECT_STREQ("1", args.GetArgumentVector()[0]);
+  EXPECT_STREQ("2", args.GetArgumentVector()[1]);
+  EXPECT_STREQ("3", args.GetArgumentVector()[2]);
+  EXPECT_STREQ("4", args.GetArgumentVector()[3]);
+  EXPECT_EQ(nullptr, args.GetArgumentVector()[4]);
+  EXPECT_STREQ("1", args.GetArgumentAtIndex(0));
+  EXPECT_STREQ("2", args.GetArgumentAtIndex(1));
+  EXPECT_STREQ("3", args.GetArgumentAtIndex(2));
+  EXPECT_STREQ("4", args.GetArgumentAtIndex(3));
+}
+
 TEST(ArgsTest, StringToBoolean) {
   bool success = false;
   EXPECT_TRUE(Args::StringToBoolean(llvm::StringRef("true"), false, nullptr));
Index: lldb/trunk/source/Core/StringList.cpp
===
--- lldb/trunk/source/Core/StringList.cpp
+++ lldb/trunk/source/Core/StringList.cpp
@@ -103,34 +103,21 @@
 void StringList::Clear() { m_strings.clear(); }
 
 void StringList::LongestCommonPrefix(std::string &common_prefix) {
-  const size_t num_strings = m_strings.size();
-
-  if (num_strings == 0) {
-common_prefix.clear();
-  } else {
-common_prefix = m_strings.front();
-
-for (size_t idx = 1; idx < num_strings; ++idx) {
-  std:

[Lldb-commits] [PATCH] D25196: Adding a new Minidump post-mortem debugging plugin

2016-10-04 Thread Dimitar Vlahovski via lldb-commits
dvlahovski marked 5 inline comments as done.
dvlahovski added inline comments.


> labath wrote in TestMiniDumpNew.py:19
> They are not building any code, so the would behave the same way anyway. You 
> would be just running the test 2--3 times for nothing.

Aah I understand now. Ok thanks :)

https://reviews.llvm.org/D25196



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


[Lldb-commits] [PATCH] D25057: Fix ARM/AArch64 Step-Over watchpoint issue remove provision for duplicate watchpoints

2016-10-04 Thread Pavel Labath via lldb-commits
labath added a comment.

In https://reviews.llvm.org/D25057#560325, @omjavaid wrote:

> @labath Referring to your email on the mailing list.
>
> Thanks for helping out with this work.
>
> I think we should push this fix, as you suggested this does not fix 
> everything in a holistic way but it corrects the functionality that is 
> currently available right now with limitations ofcourse.
>
> So here is functionality we are currently lacking:
>
> - Ability to put multiple watchpoints with same address range. This is more 
> concerning because we cannot put a watch on say byte 0 and byte 7 in case of 
> aarch64.


Agreed. However, I'd rephrase this as "ability to correctly handle a single 
instruction triggering multiple watchpoints. If done properly, you will get the 
previous item for free.

Also, apparently lldb has a bug, where it mishandles the case where you do a 
(user-level) single step over an instruction triggering a watchpoint. That 
would be pretty important to fix as well.

> 
> 
> - Ability to use single slot for multiple watchpoints. This is more like a 
> nice to have and I think if we fix the above functionality this may well be 
> fixed automatically.

I am not sure I agree with this, but I'd have to see the implementation to 
tell. One of the issues I have with reusing same slot for multiple watchpoints 
is that it does not work at all for the "read" case, and even the "write" case 
is extremely dodgy. Normally a "write" watchpoint should trigger whenever the 
memory is written to, but here we are treating it more like a "modify" 
watchpoint, where we stop only if the write actually modifies the memory value. 
Reusing a slot for "modify" watchpoints is easy, doing it correctly for the 
"write" case is quite hard.

> This is what I think LLDB client or server has to do:
> 
> - Keep a cache of watchpoint registers available and modify registers in 
> cache when a set/remove request is made.

Sure, why not.

> - As pre-req for set/remove is to have the target in stopped state this will 
> mean that when we set/remove we make changes to actual registers before we 
> resume for continue or stepping.

OK, you cannot set watchpoint set/clear packets while the target is running 
anyway.

> - I dont think keeping the cache and then updating on resume actually means 
> we are lying to client. Cache will also remain limited and will behave like 
> an actual write to the registers. It will serve us well to support the 
> functionality we intend to support.

It depends, on whether the fact that we don't write to the registers 
immediately has any observable effects for the client. In your previous patch, 
it did. This happened because you were only syncing the registers on a resume, 
so if the client did a single-step instead, the watch would not trigger. This 
is what I consider "lying", and violating the gdb-remote protocol. If the 
client cannot tell the difference, you are free to do whatever you want.

> In case of GDB this functionality is handled by gdbserver and gdb client is 
> not aware of the fact that watchpoint registers are not actually written 
> until we resume.

This is interesting. Can you tell me what is the packet sequence in the case 
where the client has watchpoints set at 0x1000 and 0x1001 and an instruction 
trips both of them?

> To implement this in LLDB client or server is a design decision and I just 
> see that it should be easier to achieve on LLDB server side though it may 
> require changes to the way we approach watchpoint for all targets but it will 
> then remain restricted to the concerning target specific area.

I don't see how you can handle the case when an instruction trips two 
watchpoints in different slots with server-side changes only. If it can be 
done, then it is a design decision, but until then, I believe it is a decision 
between a correct and a partial solution, and I'd go with the fully correct one.

> I am OOO till 16th If you are OK with this  change I will push it whenever it 
> gets a LGTM.

Some small nits on the patch you should fix before committing. Otherwise, looks 
good.



> TestWatchpointMultipleSlots.py:35
> +@expectedFailureAndroid(archs=['arm', 'aarch64'])
> +@expectedFailureAll(
> +oslist=["windows"],

this is unnecesary, as the test is already skipped.

> TestWatchpointMultipleSlots.py:39
> +# Read-write watchpoints not supported on SystemZ
> +@expectedFailureAll(archs=['s390x'])
> +# This is a arm and aarch64 specific test case. No other architectures 
> tested.

this is unnecesary, as the test is already skipped.

> NativeRegisterContextLinux_arm.cpp:579
> +} 
> +else if (m_hwp_regs[i].address == addr) {
> +  return LLDB_INVALID_INDEX32; // We do not support duplicate 
> watchpoints.

The formatting here is incorrect. Please run clang-format on the patch.

> NativeRegisterContextLinux_arm64.cpp:547
> +}
> +else if (m_hwp_regs[i].address == addr) {
> +  return LLDB_INVALID_INDEX32; /

[Lldb-commits] [PATCH] D25196: Adding a new Minidump post-mortem debugging plugin

2016-10-04 Thread Dimitar Vlahovski via lldb-commits
dvlahovski updated this revision to Diff 73504.
dvlahovski marked 7 inline comments as done.
dvlahovski added a comment.

Updated the CL with regard to Pavel's comments


https://reviews.llvm.org/D25196

Files:
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/Makefile
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64.cpp
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64.dmp
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.cpp
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.dmp
  source/API/SystemInitializerFull.cpp
  source/Plugins/Process/minidump/CMakeLists.txt
  source/Plugins/Process/minidump/MinidumpParser.cpp
  source/Plugins/Process/minidump/MinidumpParser.h
  source/Plugins/Process/minidump/MinidumpTypes.cpp
  source/Plugins/Process/minidump/MinidumpTypes.h
  source/Plugins/Process/minidump/ProcessMinidump.cpp
  source/Plugins/Process/minidump/ProcessMinidump.h
  source/Plugins/Process/minidump/ThreadMinidump.cpp
  source/Plugins/Process/minidump/ThreadMinidump.h
  unittests/Process/minidump/MinidumpParserTest.cpp

Index: unittests/Process/minidump/MinidumpParserTest.cpp
===
--- unittests/Process/minidump/MinidumpParserTest.cpp
+++ unittests/Process/minidump/MinidumpParserTest.cpp
@@ -60,15 +60,18 @@
   std::unique_ptr parser;
 };
 
-TEST_F(MinidumpParserTest, GetThreads) {
+TEST_F(MinidumpParserTest, GetThreadsAndGetThreadContext) {
   SetUpData("linux-x86_64.dmp");
   llvm::ArrayRef thread_list;
 
   thread_list = parser->GetThreads();
   ASSERT_EQ(1UL, thread_list.size());
 
   const MinidumpThread thread = thread_list[0];
-  ASSERT_EQ(16001UL, thread.thread_id);
+  EXPECT_EQ(16001UL, thread.thread_id);
+
+  llvm::ArrayRef context = parser->GetThreadContext(thread);
+  EXPECT_EQ(1232, context.size());
 }
 
 TEST_F(MinidumpParserTest, GetThreadsTruncatedFile) {
@@ -139,6 +142,24 @@
   ASSERT_EQ(11UL, exception_stream->exception_record.exception_code);
 }
 
+TEST_F(MinidumpParserTest, GetMemoryRange) {
+  SetUpData("linux-x86_64.dmp");
+  // There are two memory ranges in the file (size is in bytes, decimal):
+  // 1) 0x7ffceb34a000 12288
+  // 2) 0x401d46 256
+  EXPECT_TRUE(parser->FindMemoryRange(0x7ffceb34a000).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x7ffceb34a000 + 12288 / 2).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x7ffceb34a000 + 12288 - 1).hasValue());
+  EXPECT_FALSE(parser->FindMemoryRange(0x7ffceb34a000 + 12288).hasValue());
+
+  EXPECT_TRUE(parser->FindMemoryRange(0x401d46).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x401d46 + 256 / 2).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x401d46 + 256 - 1).hasValue());
+  EXPECT_FALSE(parser->FindMemoryRange(0x401d46 + 256).hasValue());
+
+  EXPECT_FALSE(parser->FindMemoryRange(0x2a).hasValue());
+}
+
 // Windows Minidump tests
 // fizzbuzz_no_heap.dmp is copied from the WinMiniDump tests
 TEST_F(MinidumpParserTest, GetArchitectureWindows) {
@@ -172,7 +193,6 @@
 }
 
 // Register stuff
-// TODO probably split register stuff tests into different file?
 #define REG_VAL(x) *(reinterpret_cast(x))
 
 TEST_F(MinidumpParserTest, ConvertRegisterContext) {
Index: source/Plugins/Process/minidump/ThreadMinidump.h
===
--- /dev/null
+++ source/Plugins/Process/minidump/ThreadMinidump.h
@@ -0,0 +1,52 @@
+//===-- ThreadMinidump.h ---*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===--===//
+
+#ifndef liblldb_ThreadMinidump_h_
+#define liblldb_ThreadMinidump_h_
+
+// Project includes
+#include "MinidumpTypes.h"
+
+// Other libraries and framework includes
+#include "lldb/Target/Thread.h"
+
+// C Includes
+// C++ Includes
+
+namespace lldb_private {
+
+namespace minidump {
+
+class ThreadMinidump : public Thread {
+public:
+  ThreadMinidump(Process &process, const MinidumpThread &td,
+ llvm::ArrayRef gpregset_data);
+
+  ~ThreadMinidump() override;
+
+  void RefreshStateAfterStop() override;
+
+  lldb::RegisterContextSP GetRegisterContext() override;
+
+  lldb::RegisterContextSP
+  CreateRegisterContextForFrame(StackFrame *frame) override;
+
+  void ClearStackFrames() override;
+
+protected:
+  lldb::RegisterContextSP m_thread_reg_ctx_sp;
+  llvm::ArrayRef m_gpregset_data;
+
+  bool CalculateStopInfo() override;
+};
+
+} // namespace minidump
+} // namespace lldb_private
+
+#endif // liblldb_ThreadMinidump_h_
Index: source/Plugins/Proces

[Lldb-commits] [PATCH] D25196: Adding a new Minidump post-mortem debugging plugin

2016-10-04 Thread Pavel Labath via lldb-commits
labath added a comment.

Just a couple more details and I think we're ready.



> MinidumpParser.cpp:105
> +MinidumpParser::GetThreadContext(const MinidumpThread &td) {
> +  return td.GetContext(GetData().data());
> +}

I think you have made it over-encapsulated now. :)
Either a Parser function which takes a thread or a Thread function which takes 
a parser as argument should be enough. Is there a reason you need both?

> MinidumpParser.cpp:234
> +llvm::Optional MinidumpParser::FindMemoryRange(lldb::addr_t addr) {
> +  Range range_out;
> +  llvm::ArrayRef data = GetStream(MinidumpStreamType::MemoryList);

Not necessary.

> MinidumpParser.cpp:255
> +  llvm::ArrayRef(GetData().data() + loc_desc.rva, 
> range_size);
> +  return range_out;
> +}

`return Range(...)` is much cleaner and shorter.

Add an appropriate constructor if it is needed to make this work.

> MinidumpTypes.cpp:94
> +MinidumpThread::GetContext(const uint8_t *base_ptr) const {
> +  return {base_ptr + thread_context.rva, thread_context.data_size};
> +}

This feels very unsafe. Is there anything guaranteeing that 
`thread_context.rva` does not point beyond the end of the file?

> ProcessMinidump.cpp:69
> +  // work-in-progress
> +  if (minidump_parser &&
> +  minidump_parser->GetArchitecture().GetTriple().getOS() !=

This could also be an early-return.

https://reviews.llvm.org/D25196



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


[Lldb-commits] [PATCH] D25246: Disable warnings in LLDBWrapPython.cpp when LLVM_ENABLE_WERROR is used

2016-10-04 Thread Zachary Turner via lldb-commits
zturner created this revision.
zturner added a reviewer: beanz.
zturner added a subscriber: lldb-commits.
Herald added a subscriber: mgorny.

We don't control the generated code here, so there often isn't anything we can 
do about these warnings.  They'll still show when -Werror is off so they aren't 
completely silenced.


https://reviews.llvm.org/D25246

Files:
  source/API/CMakeLists.txt


Index: source/API/CMakeLists.txt
===
--- source/API/CMakeLists.txt
+++ source/API/CMakeLists.txt
@@ -78,6 +78,14 @@
   ${LLDB_WRAP_PYTHON}
   )
 
+if (LLVM_ENABLE_WERROR)
+  if (MSVC)
+set_property(SOURCE ${LLDB_WRAP_PYTHON} APPEND_STRING PROPERTY 
COMPILE_FLAGS " /W0")
+  else()
+set_property(SOURCE ${LLDB_WRAP_PYTHON} APPEND_STRING PROPERTY 
COMPILE_FLAGS " -w")
+  endif()
+endif()
+
 # This should not be part of LLDBDependencies.cmake, because we don't
 # want every single library taking a dependency on the script interpreters.
 target_link_libraries(liblldb PRIVATE


Index: source/API/CMakeLists.txt
===
--- source/API/CMakeLists.txt
+++ source/API/CMakeLists.txt
@@ -78,6 +78,14 @@
   ${LLDB_WRAP_PYTHON}
   )
 
+if (LLVM_ENABLE_WERROR)
+  if (MSVC)
+set_property(SOURCE ${LLDB_WRAP_PYTHON} APPEND_STRING PROPERTY COMPILE_FLAGS " /W0")
+  else()
+set_property(SOURCE ${LLDB_WRAP_PYTHON} APPEND_STRING PROPERTY COMPILE_FLAGS " -w")
+  endif()
+endif()
+
 # This should not be part of LLDBDependencies.cmake, because we don't
 # want every single library taking a dependency on the script interpreters.
 target_link_libraries(liblldb PRIVATE
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D25246: Disable warnings in LLDBWrapPython.cpp when LLVM_ENABLE_WERROR is used

2016-10-04 Thread Pavel Labath via lldb-commits
labath added a comment.

I wouldn't be opposed to completely disabling (a particular chosen set of 
warnings) for that file, regardless of whether we do -Werror or not.


https://reviews.llvm.org/D25246



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


[Lldb-commits] [PATCH] D25247: Make LLDB -Werror clean under clang

2016-10-04 Thread Zachary Turner via lldb-commits
zturner created this revision.
zturner added reviewers: amccarth, labath.
zturner added a subscriber: lldb-commits.
Herald added a subscriber: ki.stfu.

Some of this is in Windows specific code, but some of it is not.  In a few 
places I think I fixed real bugs in LLDB, but not sure how to really test this.


https://reviews.llvm.org/D25247

Files:
  include/lldb/Host/windows/HostProcessWindows.h
  include/lldb/Host/windows/PosixApi.h
  include/lldb/Utility/SelectHelper.h
  source/Core/Mangled.cpp
  source/Core/SourceManager.cpp
  source/DataFormatters/StringPrinter.cpp
  source/Host/common/NativeBreakpointList.cpp
  source/Host/common/ProcessRunLock.cpp
  source/Host/common/SocketAddress.cpp
  source/Host/common/SoftwareBreakpoint.cpp
  source/Host/common/UDPSocket.cpp
  source/Host/windows/ConnectionGenericFileWindows.cpp
  source/Host/windows/EditLineWin.cpp
  source/Host/windows/FileSystem.cpp
  source/Host/windows/Host.cpp
  source/Host/windows/LockFileWindows.cpp
  source/Host/windows/PipeWindows.cpp
  source/Host/windows/ProcessLauncherWindows.cpp
  source/Host/windows/ProcessRunLock.cpp
  source/Interpreter/Args.cpp
  source/Interpreter/CommandInterpreter.cpp
  
source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
  source/Plugins/Process/Windows/Common/RegisterContextWindows.cpp
  source/Plugins/Process/Windows/Common/x86/RegisterContextWindows_x86.cpp
  source/Plugins/Process/Windows/Live/DebuggerThread.cpp
  source/Plugins/Process/Windows/Live/DebuggerThread.h
  source/Plugins/Process/Windows/Live/ProcessWindowsLive.cpp
  source/Plugins/Process/Windows/Live/ProcessWindowsLive.h
  source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.cpp
  source/Plugins/Process/elf-core/ThreadElfCore.cpp
  source/Plugins/ScriptInterpreter/Python/lldb-python.h
  source/Symbol/ClangASTContext.cpp
  source/Symbol/OCamlASTContext.cpp
  source/Target/Memory.cpp
  source/Utility/SelectHelper.cpp
  tools/lldb-mi/Platform.h

Index: tools/lldb-mi/Platform.h
===
--- tools/lldb-mi/Platform.h
+++ tools/lldb-mi/Platform.h
@@ -14,7 +14,7 @@
 #include 
 #include 
 #include 
-#include 
+#include 
 #include 
 
 // This is not used by MI
Index: source/Utility/SelectHelper.cpp
===
--- source/Utility/SelectHelper.cpp
+++ source/Utility/SelectHelper.cpp
@@ -45,36 +45,50 @@
   m_end_time = steady_clock::time_point(steady_clock::now() + timeout);
 }
 
-void SelectHelper::FDSetRead(int fd) { m_fd_map[fd].read_set = true; }
+void SelectHelper::FDSetRead(lldb::socket_t fd) {
+  m_fd_map[fd].read_set = true;
+}
 
-void SelectHelper::FDSetWrite(int fd) { m_fd_map[fd].write_set = true; }
+void SelectHelper::FDSetWrite(lldb::socket_t fd) {
+  m_fd_map[fd].write_set = true;
+}
 
-void SelectHelper::FDSetError(int fd) { m_fd_map[fd].error_set = true; }
+void SelectHelper::FDSetError(lldb::socket_t fd) {
+  m_fd_map[fd].error_set = true;
+}
 
-bool SelectHelper::FDIsSetRead(int fd) const {
+bool SelectHelper::FDIsSetRead(lldb::socket_t fd) const {
   auto pos = m_fd_map.find(fd);
   if (pos != m_fd_map.end())
 return pos->second.read_is_set;
   else
 return false;
 }
 
-bool SelectHelper::FDIsSetWrite(int fd) const {
+bool SelectHelper::FDIsSetWrite(lldb::socket_t fd) const {
   auto pos = m_fd_map.find(fd);
   if (pos != m_fd_map.end())
 return pos->second.write_is_set;
   else
 return false;
 }
 
-bool SelectHelper::FDIsSetError(int fd) const {
+bool SelectHelper::FDIsSetError(lldb::socket_t fd) const {
   auto pos = m_fd_map.find(fd);
   if (pos != m_fd_map.end())
 return pos->second.error_is_set;
   else
 return false;
 }
 
+static void updateMaxFd(llvm::Optional &vold,
+lldb::socket_t vnew) {
+  if (!vold.hasValue())
+vold = vnew;
+  else
+vold = std::max(*vold, vnew);
+}
+
 lldb_private::Error SelectHelper::Select() {
   lldb_private::Error error;
 #ifdef _MSC_VER
@@ -85,40 +99,35 @@
 return lldb_private::Error("Too many file descriptors for select()");
 #endif
 
-  int max_read_fd = -1;
-  int max_write_fd = -1;
-  int max_error_fd = -1;
-  int max_fd = -1;
+  llvm::Optional max_read_fd;
+  llvm::Optional max_write_fd;
+  llvm::Optional max_error_fd;
+  llvm::Optional max_fd;
   for (auto &pair : m_fd_map) {
 pair.second.PrepareForSelect();
-const int fd = pair.first;
+const lldb::socket_t fd = pair.first;
 #if !defined(__APPLE__) && !defined(_MSC_VER)
 lldbassert(fd < FD_SETSIZE);
 if (fd >= FD_SETSIZE) {
   error.SetErrorStringWithFormat("%i is too large for select()", fd);
   return error;
 }
 #endif
-if (pair.second.read_set) {
-  max_read_fd = std::max(fd, max_read_fd);
-  max_fd = std::max(fd, max_fd);
-}
-if (pair.second.write_set) {
-  max_write_fd = std::max(fd, max_write_fd);
-  max_fd = std::max(fd, max_fd);
-}
-if (pair.second.error_set) {
-

[Lldb-commits] [PATCH] D25196: Adding a new Minidump post-mortem debugging plugin

2016-10-04 Thread Dimitar Vlahovski via lldb-commits
dvlahovski updated this revision to Diff 73516.
dvlahovski marked 5 inline comments as done.
dvlahovski added a comment.

Second iteration over CL - regarded Pavel's comments and encapsulated m_data_sp 
more in MinidumpParser


https://reviews.llvm.org/D25196

Files:
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/Makefile
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64.cpp
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64.dmp
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.cpp
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.dmp
  source/API/SystemInitializerFull.cpp
  source/Plugins/Process/minidump/CMakeLists.txt
  source/Plugins/Process/minidump/MinidumpParser.cpp
  source/Plugins/Process/minidump/MinidumpParser.h
  source/Plugins/Process/minidump/MinidumpTypes.cpp
  source/Plugins/Process/minidump/MinidumpTypes.h
  source/Plugins/Process/minidump/ProcessMinidump.cpp
  source/Plugins/Process/minidump/ProcessMinidump.h
  source/Plugins/Process/minidump/ThreadMinidump.cpp
  source/Plugins/Process/minidump/ThreadMinidump.h
  unittests/Process/minidump/MinidumpParserTest.cpp

Index: unittests/Process/minidump/MinidumpParserTest.cpp
===
--- unittests/Process/minidump/MinidumpParserTest.cpp
+++ unittests/Process/minidump/MinidumpParserTest.cpp
@@ -60,15 +60,18 @@
   std::unique_ptr parser;
 };
 
-TEST_F(MinidumpParserTest, GetThreads) {
+TEST_F(MinidumpParserTest, GetThreadsAndGetThreadContext) {
   SetUpData("linux-x86_64.dmp");
   llvm::ArrayRef thread_list;
 
   thread_list = parser->GetThreads();
   ASSERT_EQ(1UL, thread_list.size());
 
   const MinidumpThread thread = thread_list[0];
-  ASSERT_EQ(16001UL, thread.thread_id);
+  EXPECT_EQ(16001UL, thread.thread_id);
+
+  llvm::ArrayRef context = parser->GetThreadContext(thread);
+  EXPECT_EQ(1232, context.size());
 }
 
 TEST_F(MinidumpParserTest, GetThreadsTruncatedFile) {
@@ -139,6 +142,24 @@
   ASSERT_EQ(11UL, exception_stream->exception_record.exception_code);
 }
 
+TEST_F(MinidumpParserTest, GetMemoryRange) {
+  SetUpData("linux-x86_64.dmp");
+  // There are two memory ranges in the file (size is in bytes, decimal):
+  // 1) 0x7ffceb34a000 12288
+  // 2) 0x401d46 256
+  EXPECT_TRUE(parser->FindMemoryRange(0x7ffceb34a000).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x7ffceb34a000 + 12288 / 2).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x7ffceb34a000 + 12288 - 1).hasValue());
+  EXPECT_FALSE(parser->FindMemoryRange(0x7ffceb34a000 + 12288).hasValue());
+
+  EXPECT_TRUE(parser->FindMemoryRange(0x401d46).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x401d46 + 256 / 2).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x401d46 + 256 - 1).hasValue());
+  EXPECT_FALSE(parser->FindMemoryRange(0x401d46 + 256).hasValue());
+
+  EXPECT_FALSE(parser->FindMemoryRange(0x2a).hasValue());
+}
+
 // Windows Minidump tests
 // fizzbuzz_no_heap.dmp is copied from the WinMiniDump tests
 TEST_F(MinidumpParserTest, GetArchitectureWindows) {
@@ -172,7 +193,6 @@
 }
 
 // Register stuff
-// TODO probably split register stuff tests into different file?
 #define REG_VAL(x) *(reinterpret_cast(x))
 
 TEST_F(MinidumpParserTest, ConvertRegisterContext) {
Index: source/Plugins/Process/minidump/ThreadMinidump.h
===
--- /dev/null
+++ source/Plugins/Process/minidump/ThreadMinidump.h
@@ -0,0 +1,52 @@
+//===-- ThreadMinidump.h ---*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===--===//
+
+#ifndef liblldb_ThreadMinidump_h_
+#define liblldb_ThreadMinidump_h_
+
+// Project includes
+#include "MinidumpTypes.h"
+
+// Other libraries and framework includes
+#include "lldb/Target/Thread.h"
+
+// C Includes
+// C++ Includes
+
+namespace lldb_private {
+
+namespace minidump {
+
+class ThreadMinidump : public Thread {
+public:
+  ThreadMinidump(Process &process, const MinidumpThread &td,
+ llvm::ArrayRef gpregset_data);
+
+  ~ThreadMinidump() override;
+
+  void RefreshStateAfterStop() override;
+
+  lldb::RegisterContextSP GetRegisterContext() override;
+
+  lldb::RegisterContextSP
+  CreateRegisterContextForFrame(StackFrame *frame) override;
+
+  void ClearStackFrames() override;
+
+protected:
+  lldb::RegisterContextSP m_thread_reg_ctx_sp;
+  llvm::ArrayRef m_gpregset_data;
+
+  bool CalculateStopInfo() override;
+};
+
+} // namespace minidump
+} // namespace lldb_private
+
+#endif 

[Lldb-commits] [lldb] r283237 - Fix FixupEnvironment on Android after the Args refactor

2016-10-04 Thread Tamas Berghammer via lldb-commits
Author: tberghammer
Date: Tue Oct  4 13:35:39 2016
New Revision: 283237

URL: http://llvm.org/viewvc/llvm-project?rev=283237&view=rev
Log:
Fix FixupEnvironment on Android after the Args refactor

Modified:
lldb/trunk/source/Host/linux/ProcessLauncherLinux.cpp

Modified: lldb/trunk/source/Host/linux/ProcessLauncherLinux.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/linux/ProcessLauncherLinux.cpp?rev=283237&r1=283236&r2=283237&view=diff
==
--- lldb/trunk/source/Host/linux/ProcessLauncherLinux.cpp (original)
+++ lldb/trunk/source/Host/linux/ProcessLauncherLinux.cpp Tue Oct  4 13:35:39 
2016
@@ -28,14 +28,15 @@ using namespace lldb_private;
 static void FixupEnvironment(Args &env) {
 #ifdef __ANDROID_NDK__
   // If there is no PATH variable specified inside the environment then set the
-  // path to /system/bin.
-  // It is required because the default path used by execve() is wrong on
-  // android.
+  // path to /system/bin. It is required because the default path used by
+  // execve() is wrong on android.
   static const char *path = "PATH=";
   static const int path_len = ::strlen(path);
-  for (const char **args = env.GetConstArgumentVector(); *args; ++args)
-if (::strncmp(path, *args, path_len) == 0)
+  for (size_t i = 0; i < env.GetArgumentCount(); ++i) {
+const char *arg = env.GetArgumentAtIndex(i);
+if (::strncmp(path, arg, path_len) == 0)
   return;
+  }
   env.AppendArgument(llvm::StringRef("PATH=/system/bin"));
 #endif
 }


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


[Lldb-commits] [PATCH] D25196: Adding a new Minidump post-mortem debugging plugin

2016-10-04 Thread Zachary Turner via lldb-commits
zturner added inline comments.


> MinidumpParser.cpp:81-82
>  
> -  return llvm::ArrayRef(m_data_sp->GetBytes() + iter->second.rva,
> +  return llvm::ArrayRef(GetData().data() + iter->second.rva,
>   iter->second.data_size);
>  }

Change this line to  `return GetData().slice(iter->second.rva, 
iter->second.data_size);`

> MinidumpParser.cpp:106-107
> +return llvm::None;
> +  return {GetData().data() + td.thread_context.rva,
> +  td.thread_context.data_size};
> +}

Same as above, use `slice()`

> MinidumpParser.cpp:255
> +  range_start,
> +  llvm::ArrayRef(GetData().data() + loc_desc.rva, 
> range_size));
> +}

`slice()`

> MinidumpParser.h:35-36
> +struct Range {
> +  lldb::addr_t start; // virtual address of the beginning of the range
> +  // absolute pointer to the first byte of the range and size
> +  llvm::ArrayRef range_ref;

If the comment is long enough to wrap, maybe better to just put it on the line 
before.  Looks awkward this way.

> MinidumpParser.h:39-40
> +
> +  Range(lldb::addr_t start_, llvm::ArrayRef range_ref_)
> +  : start(start_), range_ref(range_ref_) {}
> +};

You don't need the underscores here.  It might look awkward, but the usual LLVM 
pattern is to just call the constructor parameters and member variables the 
same name.

> MinidumpTypes.cpp:188-190
> +  return llvm::ArrayRef(
> +  reinterpret_cast(data.data()),
> +  *mem_ranges_count);

you can write `return llvm::makeArrayRef(reinterpret_cast(data.data()), *mem_ranges_count));` to avoid 
specifying the type name twice.  It's a little shorter (admittedly not much 
though).

https://reviews.llvm.org/D25196



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


[Lldb-commits] [PATCH] D25247: Make LLDB -Werror clean under clang

2016-10-04 Thread Pavel Labath via lldb-commits
labath accepted this revision.
labath added a comment.
This revision is now accepted and ready to land.

Seems reasonable. For testing we'll yell at you if the buildbots break.

I take it we can now freely use the %z printf modifier.


https://reviews.llvm.org/D25247



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


[Lldb-commits] [PATCH] D25247: Make LLDB -Werror clean under clang

2016-10-04 Thread Zachary Turner via lldb-commits
zturner added a comment.

Thankfully, yes.  Technically it's not supported by MSVC 2013, which is still a 
supported LLVM compiler.  But we said long ago that we require MSVC 2015 for 
running the test suite on Windows.  And in any case, LLVM is bumping to MSVC 
2015 within the next 2 weeks.  So I'm going to go ahead and start using `%z` 
now.


https://reviews.llvm.org/D25247



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


[Lldb-commits] [PATCH] D25247: Make LLDB -Werror clean under clang

2016-10-04 Thread Eugene Zelenko via lldb-commits
Eugene.Zelenko added inline comments.


> Platform.h:16
>  #include 
>  #include 
> +#include 

This is application header. Should be in quotes. Same below.

https://reviews.llvm.org/D25247



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


[Lldb-commits] [lldb] r283238 - Improvements to testing blacklist

2016-10-04 Thread Francis Ricci via lldb-commits
Author: fjricci
Date: Tue Oct  4 13:48:00 2016
New Revision: 283238

URL: http://llvm.org/viewvc/llvm-project?rev=283238&view=rev
Log:
Improvements to testing blacklist

Summary:
This patch is necessary because individual test cases are not required
to have unique names. Therefore, test cases must now
be specified explicitly in the form ..
Because it works by regex matching, passing just  will
still disable an entire file.

This also allows for multiple exclusion files to be specified.

Reviewers: zturner, labath, jingham, tfiala

Subscribers: lldb-commits, sas

Differential Revision: https://reviews.llvm.org/D24988

Modified:
lldb/trunk/packages/Python/lldbsuite/test/configuration.py
lldb/trunk/packages/Python/lldbsuite/test/dotest.py
lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py
lldb/trunk/packages/Python/lldbsuite/test/test_result.py

Modified: lldb/trunk/packages/Python/lldbsuite/test/configuration.py
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/configuration.py?rev=283238&r1=283237&r2=283238&view=diff
==
--- lldb/trunk/packages/Python/lldbsuite/test/configuration.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/configuration.py Tue Oct  4 
13:48:00 2016
@@ -102,10 +102,8 @@ parsable = False
 regexp = None
 
 # Sets of tests which are excluded at runtime
-skip_files = None
-skip_methods = None
-xfail_files = None
-xfail_methods = None
+skip_tests = None
+xfail_tests = None
 
 # By default, recorded session info for errored/failed test are dumped into its
 # own file under a session directory named after the timestamp of the test 
suite

Modified: lldb/trunk/packages/Python/lldbsuite/test/dotest.py
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/dotest.py?rev=283238&r1=283237&r2=283238&view=diff
==
--- lldb/trunk/packages/Python/lldbsuite/test/dotest.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/dotest.py Tue Oct  4 13:48:00 2016
@@ -216,33 +216,24 @@ def parseExclusion(exclusion_file):

 """
 excl_type = None
-case_type = None
 
 with open(exclusion_file) as f:
 for line in f:
+line = line.strip()
 if not excl_type:
-[excl_type, case_type] = line.split()
+excl_type = line
 continue
 
-line = line.strip()
 if not line:
 excl_type = None
-elif excl_type == 'skip' and case_type == 'files':
-if not configuration.skip_files:
-configuration.skip_files = []
-configuration.skip_files.append(line)
-elif excl_type == 'skip' and case_type == 'methods':
-if not configuration.skip_methods:
-configuration.skip_methods = []
-configuration.skip_methods.append(line)
-elif excl_type == 'xfail' and case_type == 'files':
-if not configuration.xfail_files:
-configuration.xfail_files = []
-configuration.xfail_files.append(line)
-elif excl_type == 'xfail' and case_type == 'methods':
-if not configuration.xfail_methods:
-configuration.xfail_methods = []
-configuration.xfail_methods.append(line)
+elif excl_type == 'skip':
+if not configuration.skip_tests:
+configuration.skip_tests = []
+configuration.skip_tests.append(line)
+elif excl_type == 'xfail':
+if not configuration.xfail_tests:
+configuration.xfail_tests = []
+configuration.xfail_tests.append(line)
 
 
 def parseOptionsAndInitTestdirs():
@@ -375,7 +366,8 @@ def parseOptionsAndInitTestdirs():
 lldbtest_config.lldbExec = os.path.realpath(args.executable)
 
 if args.excluded:
-parseExclusion(args.excluded)
+for excl_file in args.excluded:
+parseExclusion(excl_file)
 
 if args.p:
 if args.p.startswith('-'):
@@ -799,8 +791,8 @@ def visit_file(dir, name):
 # We didn't match the regex, we're done.
 return
 
-if configuration.skip_files:
-for file_regexp in configuration.skip_files:
+if configuration.skip_tests:
+for file_regexp in configuration.skip_tests:
 if re.search(file_regexp, name):
 return
 

Modified: lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py?rev=283238&r1=283237&r2=283238&view=diff
==
--- lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py (original)
+++ lld

[Lldb-commits] [PATCH] D24988: Improvements to testing blacklist

2016-10-04 Thread Francis Ricci via lldb-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL283238: Improvements to testing blacklist (authored by 
fjricci).

Changed prior to commit:
  https://reviews.llvm.org/D24988?vs=73363&id=73525#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D24988

Files:
  lldb/trunk/packages/Python/lldbsuite/test/configuration.py
  lldb/trunk/packages/Python/lldbsuite/test/dotest.py
  lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py
  lldb/trunk/packages/Python/lldbsuite/test/test_result.py

Index: lldb/trunk/packages/Python/lldbsuite/test/test_result.py
===
--- lldb/trunk/packages/Python/lldbsuite/test/test_result.py
+++ lldb/trunk/packages/Python/lldbsuite/test/test_result.py
@@ -18,8 +18,6 @@
 # Third-party modules
 import unittest2
 
-from unittest2.util import strclass
-
 # LLDB Modules
 from . import configuration
 from lldbsuite.test_event.event_builder import EventBuilder
@@ -139,8 +137,7 @@
 self.getCategoriesForTest(test)):
 self.hardMarkAsSkipped(test)
 if self.checkExclusion(
-configuration.skip_methods,
-test._testMethodName):
+configuration.skip_tests, test.id()):
 self.hardMarkAsSkipped(test)
 
 configuration.setCrashInfoHook(
@@ -161,11 +158,7 @@
 
 def addSuccess(self, test):
 if self.checkExclusion(
-configuration.xfail_files,
-strclass(
-test.__class__)) or self.checkExclusion(
-configuration.xfail_methods,
-test._testMethodName):
+configuration.xfail_tests, test.id()):
 self.addUnexpectedSuccess(test, None)
 return
 
@@ -239,11 +232,7 @@
 
 def addFailure(self, test, err):
 if self.checkExclusion(
-configuration.xfail_files,
-strclass(
-test.__class__)) or self.checkExclusion(
-configuration.xfail_methods,
-test._testMethodName):
+configuration.xfail_tests, test.id()):
 self.addExpectedFailure(test, err, None)
 return
 
Index: lldb/trunk/packages/Python/lldbsuite/test/configuration.py
===
--- lldb/trunk/packages/Python/lldbsuite/test/configuration.py
+++ lldb/trunk/packages/Python/lldbsuite/test/configuration.py
@@ -102,10 +102,8 @@
 regexp = None
 
 # Sets of tests which are excluded at runtime
-skip_files = None
-skip_methods = None
-xfail_files = None
-xfail_methods = None
+skip_tests = None
+xfail_tests = None
 
 # By default, recorded session info for errored/failed test are dumped into its
 # own file under a session directory named after the timestamp of the test suite
Index: lldb/trunk/packages/Python/lldbsuite/test/dotest.py
===
--- lldb/trunk/packages/Python/lldbsuite/test/dotest.py
+++ lldb/trunk/packages/Python/lldbsuite/test/dotest.py
@@ -216,33 +216,24 @@

 """
 excl_type = None
-case_type = None
 
 with open(exclusion_file) as f:
 for line in f:
+line = line.strip()
 if not excl_type:
-[excl_type, case_type] = line.split()
+excl_type = line
 continue
 
-line = line.strip()
 if not line:
 excl_type = None
-elif excl_type == 'skip' and case_type == 'files':
-if not configuration.skip_files:
-configuration.skip_files = []
-configuration.skip_files.append(line)
-elif excl_type == 'skip' and case_type == 'methods':
-if not configuration.skip_methods:
-configuration.skip_methods = []
-configuration.skip_methods.append(line)
-elif excl_type == 'xfail' and case_type == 'files':
-if not configuration.xfail_files:
-configuration.xfail_files = []
-configuration.xfail_files.append(line)
-elif excl_type == 'xfail' and case_type == 'methods':
-if not configuration.xfail_methods:
-configuration.xfail_methods = []
-configuration.xfail_methods.append(line)
+elif excl_type == 'skip':
+if not configuration.skip_tests:
+configuration.skip_tests = []
+configuration.skip_tests.append(line)
+elif excl_type == 'xfail':
+if not configuration.xfail_tests:
+configuration.xfail_tests = []
+configuration.xfail_tests.append(line)
 
 
 def parseOptionsAndInitTestdirs():
@@ -375,7 +366,8 @@
 lldbtest_config.lldbExec = os.path.realpath(args.executable)
 
 if args.excluded:
-  

[Lldb-commits] [PATCH] D25247: Make LLDB -Werror clean under clang

2016-10-04 Thread Zachary Turner via lldb-commits
zturner marked an inline comment as done.
zturner added inline comments.


> Eugene.Zelenko wrote in Platform.h:16
> This is application header. Should be in quotes. Same below.

Thanks for pointing this out.  Fixed locally

https://reviews.llvm.org/D25247



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


[Lldb-commits] [PATCH] D25196: Adding a new Minidump post-mortem debugging plugin

2016-10-04 Thread Dimitar Vlahovski via lldb-commits
dvlahovski updated this revision to Diff 73526.
dvlahovski marked 6 inline comments as done.
dvlahovski added a comment.

Changes after Zachary's comments


https://reviews.llvm.org/D25196

Files:
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/Makefile
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64.cpp
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64.dmp
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.cpp
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.dmp
  source/API/SystemInitializerFull.cpp
  source/Plugins/Process/minidump/CMakeLists.txt
  source/Plugins/Process/minidump/MinidumpParser.cpp
  source/Plugins/Process/minidump/MinidumpParser.h
  source/Plugins/Process/minidump/MinidumpTypes.cpp
  source/Plugins/Process/minidump/MinidumpTypes.h
  source/Plugins/Process/minidump/ProcessMinidump.cpp
  source/Plugins/Process/minidump/ProcessMinidump.h
  source/Plugins/Process/minidump/ThreadMinidump.cpp
  source/Plugins/Process/minidump/ThreadMinidump.h
  unittests/Process/minidump/MinidumpParserTest.cpp

Index: unittests/Process/minidump/MinidumpParserTest.cpp
===
--- unittests/Process/minidump/MinidumpParserTest.cpp
+++ unittests/Process/minidump/MinidumpParserTest.cpp
@@ -60,15 +60,18 @@
   std::unique_ptr parser;
 };
 
-TEST_F(MinidumpParserTest, GetThreads) {
+TEST_F(MinidumpParserTest, GetThreadsAndGetThreadContext) {
   SetUpData("linux-x86_64.dmp");
   llvm::ArrayRef thread_list;
 
   thread_list = parser->GetThreads();
   ASSERT_EQ(1UL, thread_list.size());
 
   const MinidumpThread thread = thread_list[0];
-  ASSERT_EQ(16001UL, thread.thread_id);
+  EXPECT_EQ(16001UL, thread.thread_id);
+
+  llvm::ArrayRef context = parser->GetThreadContext(thread);
+  EXPECT_EQ(1232, context.size());
 }
 
 TEST_F(MinidumpParserTest, GetThreadsTruncatedFile) {
@@ -139,6 +142,24 @@
   ASSERT_EQ(11UL, exception_stream->exception_record.exception_code);
 }
 
+TEST_F(MinidumpParserTest, GetMemoryRange) {
+  SetUpData("linux-x86_64.dmp");
+  // There are two memory ranges in the file (size is in bytes, decimal):
+  // 1) 0x7ffceb34a000 12288
+  // 2) 0x401d46 256
+  EXPECT_TRUE(parser->FindMemoryRange(0x7ffceb34a000).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x7ffceb34a000 + 12288 / 2).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x7ffceb34a000 + 12288 - 1).hasValue());
+  EXPECT_FALSE(parser->FindMemoryRange(0x7ffceb34a000 + 12288).hasValue());
+
+  EXPECT_TRUE(parser->FindMemoryRange(0x401d46).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x401d46 + 256 / 2).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x401d46 + 256 - 1).hasValue());
+  EXPECT_FALSE(parser->FindMemoryRange(0x401d46 + 256).hasValue());
+
+  EXPECT_FALSE(parser->FindMemoryRange(0x2a).hasValue());
+}
+
 // Windows Minidump tests
 // fizzbuzz_no_heap.dmp is copied from the WinMiniDump tests
 TEST_F(MinidumpParserTest, GetArchitectureWindows) {
@@ -172,7 +193,6 @@
 }
 
 // Register stuff
-// TODO probably split register stuff tests into different file?
 #define REG_VAL(x) *(reinterpret_cast(x))
 
 TEST_F(MinidumpParserTest, ConvertRegisterContext) {
Index: source/Plugins/Process/minidump/ThreadMinidump.h
===
--- /dev/null
+++ source/Plugins/Process/minidump/ThreadMinidump.h
@@ -0,0 +1,52 @@
+//===-- ThreadMinidump.h ---*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===--===//
+
+#ifndef liblldb_ThreadMinidump_h_
+#define liblldb_ThreadMinidump_h_
+
+// Project includes
+#include "MinidumpTypes.h"
+
+// Other libraries and framework includes
+#include "lldb/Target/Thread.h"
+
+// C Includes
+// C++ Includes
+
+namespace lldb_private {
+
+namespace minidump {
+
+class ThreadMinidump : public Thread {
+public:
+  ThreadMinidump(Process &process, const MinidumpThread &td,
+ llvm::ArrayRef gpregset_data);
+
+  ~ThreadMinidump() override;
+
+  void RefreshStateAfterStop() override;
+
+  lldb::RegisterContextSP GetRegisterContext() override;
+
+  lldb::RegisterContextSP
+  CreateRegisterContextForFrame(StackFrame *frame) override;
+
+  void ClearStackFrames() override;
+
+protected:
+  lldb::RegisterContextSP m_thread_reg_ctx_sp;
+  llvm::ArrayRef m_gpregset_data;
+
+  bool CalculateStopInfo() override;
+};
+
+} // namespace minidump
+} // namespace lldb_private
+
+#endif // liblldb_ThreadMinidump_h_
Index: source/Plugins/Process/minidump/Thr

[Lldb-commits] [PATCH] D25196: Adding a new Minidump post-mortem debugging plugin

2016-10-04 Thread Dimitar Vlahovski via lldb-commits
dvlahovski marked an inline comment as done.
dvlahovski added inline comments.


> zturner wrote in MinidumpParser.cpp:81-82
> Change this line to  `return GetData().slice(iter->second.rva, 
> iter->second.data_size);`

Nice! :)

> zturner wrote in MinidumpParser.h:35-36
> If the comment is long enough to wrap, maybe better to just put it on the 
> line before.  Looks awkward this way.

This comment is for the ArrayrRef. Added a clarification

> zturner wrote in MinidumpTypes.cpp:188-190
> you can write `return llvm::makeArrayRef(reinterpret_cast MinidumpMemoryDescriptor*>(data.data()), *mem_ranges_count));` to avoid 
> specifying the type name twice.  It's a little shorter (admittedly not much 
> though).

I think it looks better with the makeArrayrRef :)

https://reviews.llvm.org/D25196



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


[Lldb-commits] [PATCH] D25196: Adding a new Minidump post-mortem debugging plugin

2016-10-04 Thread Pavel Labath via lldb-commits
labath added a comment.

Thanks for fixing all the comments. Unfortunately, on my last pass, I found one 
more case of unverified input (I think).



> MinidumpParser.cpp:252
> +if (range_start <= addr && addr < range_start + range_size) {
> +  return Range(range_start, GetData().slice(loc_desc.rva, range_size));
> +}

Is anything verifying that loc_desc points into the file ?

> ProcessMinidump.cpp:187
> +  // Don't allow the caching that lldb_private::Process::ReadMemory does
> +  // since we have it all cached our our dump file anyway.
> +  return DoReadMemory(addr, buf, size, error);

typo: "in our"

https://reviews.llvm.org/D25196



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


[Lldb-commits] [PATCH] D25246: Disable warnings in LLDBWrapPython.cpp when LLVM_ENABLE_WERROR is used

2016-10-04 Thread Eugene Zelenko via lldb-commits
Eugene.Zelenko added a comment.

You could use -Wno-error= instead.


https://reviews.llvm.org/D25246



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


[Lldb-commits] [PATCH] D25196: Adding a new Minidump post-mortem debugging plugin

2016-10-04 Thread Dimitar Vlahovski via lldb-commits
dvlahovski updated this revision to Diff 73541.
dvlahovski marked 2 inline comments as done.
dvlahovski added a comment.

Added a sanity check for loc_descr


https://reviews.llvm.org/D25196

Files:
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/Makefile
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64.cpp
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64.dmp
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.cpp
  
packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.dmp
  source/API/SystemInitializerFull.cpp
  source/Plugins/Process/minidump/CMakeLists.txt
  source/Plugins/Process/minidump/MinidumpParser.cpp
  source/Plugins/Process/minidump/MinidumpParser.h
  source/Plugins/Process/minidump/MinidumpTypes.cpp
  source/Plugins/Process/minidump/MinidumpTypes.h
  source/Plugins/Process/minidump/ProcessMinidump.cpp
  source/Plugins/Process/minidump/ProcessMinidump.h
  source/Plugins/Process/minidump/ThreadMinidump.cpp
  source/Plugins/Process/minidump/ThreadMinidump.h
  unittests/Process/minidump/MinidumpParserTest.cpp

Index: unittests/Process/minidump/MinidumpParserTest.cpp
===
--- unittests/Process/minidump/MinidumpParserTest.cpp
+++ unittests/Process/minidump/MinidumpParserTest.cpp
@@ -60,15 +60,18 @@
   std::unique_ptr parser;
 };
 
-TEST_F(MinidumpParserTest, GetThreads) {
+TEST_F(MinidumpParserTest, GetThreadsAndGetThreadContext) {
   SetUpData("linux-x86_64.dmp");
   llvm::ArrayRef thread_list;
 
   thread_list = parser->GetThreads();
   ASSERT_EQ(1UL, thread_list.size());
 
   const MinidumpThread thread = thread_list[0];
-  ASSERT_EQ(16001UL, thread.thread_id);
+  EXPECT_EQ(16001UL, thread.thread_id);
+
+  llvm::ArrayRef context = parser->GetThreadContext(thread);
+  EXPECT_EQ(1232, context.size());
 }
 
 TEST_F(MinidumpParserTest, GetThreadsTruncatedFile) {
@@ -139,6 +142,24 @@
   ASSERT_EQ(11UL, exception_stream->exception_record.exception_code);
 }
 
+TEST_F(MinidumpParserTest, GetMemoryRange) {
+  SetUpData("linux-x86_64.dmp");
+  // There are two memory ranges in the file (size is in bytes, decimal):
+  // 1) 0x7ffceb34a000 12288
+  // 2) 0x401d46 256
+  EXPECT_TRUE(parser->FindMemoryRange(0x7ffceb34a000).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x7ffceb34a000 + 12288 / 2).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x7ffceb34a000 + 12288 - 1).hasValue());
+  EXPECT_FALSE(parser->FindMemoryRange(0x7ffceb34a000 + 12288).hasValue());
+
+  EXPECT_TRUE(parser->FindMemoryRange(0x401d46).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x401d46 + 256 / 2).hasValue());
+  EXPECT_TRUE(parser->FindMemoryRange(0x401d46 + 256 - 1).hasValue());
+  EXPECT_FALSE(parser->FindMemoryRange(0x401d46 + 256).hasValue());
+
+  EXPECT_FALSE(parser->FindMemoryRange(0x2a).hasValue());
+}
+
 // Windows Minidump tests
 // fizzbuzz_no_heap.dmp is copied from the WinMiniDump tests
 TEST_F(MinidumpParserTest, GetArchitectureWindows) {
@@ -172,7 +193,6 @@
 }
 
 // Register stuff
-// TODO probably split register stuff tests into different file?
 #define REG_VAL(x) *(reinterpret_cast(x))
 
 TEST_F(MinidumpParserTest, ConvertRegisterContext) {
Index: source/Plugins/Process/minidump/ThreadMinidump.h
===
--- /dev/null
+++ source/Plugins/Process/minidump/ThreadMinidump.h
@@ -0,0 +1,52 @@
+//===-- ThreadMinidump.h ---*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===--===//
+
+#ifndef liblldb_ThreadMinidump_h_
+#define liblldb_ThreadMinidump_h_
+
+// Project includes
+#include "MinidumpTypes.h"
+
+// Other libraries and framework includes
+#include "lldb/Target/Thread.h"
+
+// C Includes
+// C++ Includes
+
+namespace lldb_private {
+
+namespace minidump {
+
+class ThreadMinidump : public Thread {
+public:
+  ThreadMinidump(Process &process, const MinidumpThread &td,
+ llvm::ArrayRef gpregset_data);
+
+  ~ThreadMinidump() override;
+
+  void RefreshStateAfterStop() override;
+
+  lldb::RegisterContextSP GetRegisterContext() override;
+
+  lldb::RegisterContextSP
+  CreateRegisterContextForFrame(StackFrame *frame) override;
+
+  void ClearStackFrames() override;
+
+protected:
+  lldb::RegisterContextSP m_thread_reg_ctx_sp;
+  llvm::ArrayRef m_gpregset_data;
+
+  bool CalculateStopInfo() override;
+};
+
+} // namespace minidump
+} // namespace lldb_private
+
+#endif // liblldb_ThreadMinidump_h_
Index: source/Plugins/Process/minidump/T

[Lldb-commits] [PATCH] D25246: Disable warnings in LLDBWrapPython.cpp when LLVM_ENABLE_WERROR is used

2016-10-04 Thread Zachary Turner via lldb-commits
zturner added a comment.

In https://reviews.llvm.org/D25246#561323, @Eugene.Zelenko wrote:

> You could use -Wno-error= instead.


Yes but it's a little bit annoying to track down every single one we get in 
this file with all the different compilers.  Since we can't really control the 
generated code, there's not much we can do.  Seems easier to just turn them off.


https://reviews.llvm.org/D25246



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


[Lldb-commits] [PATCH] D25196: Adding a new Minidump post-mortem debugging plugin

2016-10-04 Thread Pavel Labath via lldb-commits
labath accepted this revision.
labath added a comment.
This revision is now accepted and ready to land.

lgtm


https://reviews.llvm.org/D25196



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


[Lldb-commits] [PATCH] D24549: [LLDB][MIPS] Skip some test case which were causing LLDB to go into infinite loop

2016-10-04 Thread Eugene Zelenko via lldb-commits
Eugene.Zelenko added a comment.

Looks like patch was not committed.


https://reviews.llvm.org/D24549



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


[Lldb-commits] [lldb] r283259 - Adding a new Minidump post-mortem debugging plugin

2016-10-04 Thread Dimitar Vlahovski via lldb-commits
Author: dvlahovski
Date: Tue Oct  4 16:02:13 2016
New Revision: 283259

URL: http://llvm.org/viewvc/llvm-project?rev=283259&view=rev
Log:
Adding a new Minidump post-mortem debugging plugin

Summary:
This plugin resembles the already existing Windows-only Minidump plugin.
The WinMinidumpPlugin uses the Windows API for parsing Minidumps
while this plugin is cross-platform because it includes a Minidump
parser (which is already commited)

It is able to produce a backtrace, to read the general puprose regiters,
inspect local variables, show image list, do memory reads, etc.

For now the only arch that this supports is x86 64 bit
This is because I have only written a register context for that arch.
Others will come in next CLs.

I copied the WinMinidump tests and adapted them a little bit for them to
work with the new plugin (and they pass)
I will add more tests, aiming for better code coverage.

There is still functionality to be added, see TODOs in code.

Reviewers: labath, zturner

Subscribers: beanz, mgorny, amccarth, lldb-commits, modocache

Differential Revision: https://reviews.llvm.org/D25196

Added:

lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/

lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/Makefile

lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py

lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64.cpp

lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64.dmp

lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.cpp

lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.dmp
lldb/trunk/source/Plugins/Process/minidump/ProcessMinidump.cpp
lldb/trunk/source/Plugins/Process/minidump/ProcessMinidump.h
lldb/trunk/source/Plugins/Process/minidump/ThreadMinidump.cpp
lldb/trunk/source/Plugins/Process/minidump/ThreadMinidump.h
Modified:
lldb/trunk/source/API/SystemInitializerFull.cpp
lldb/trunk/source/Plugins/Process/minidump/CMakeLists.txt
lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.cpp
lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.h
lldb/trunk/source/Plugins/Process/minidump/MinidumpTypes.cpp
lldb/trunk/source/Plugins/Process/minidump/MinidumpTypes.h
lldb/trunk/unittests/Process/minidump/MinidumpParserTest.cpp

Added: 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/Makefile
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/Makefile?rev=283259&view=auto
==
--- 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/Makefile
 (added)
+++ 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/Makefile
 Tue Oct  4 16:02:13 2016
@@ -0,0 +1,6 @@
+LEVEL = ../../../make
+
+CXX_SOURCES := main.cpp
+
+include $(LEVEL)/Makefile.rules
+

Added: 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py?rev=283259&view=auto
==
--- 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
 (added)
+++ 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
 Tue Oct  4 16:02:13 2016
@@ -0,0 +1,100 @@
+"""
+Test basics of Minidump debugging.
+"""
+
+from __future__ import print_function
+from six import iteritems
+
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class MiniDumpNewTestCase(TestBase):
+
+mydir = TestBase.compute_mydir(__file__)
+
+NO_DEBUG_INFO_TESTCASE = True
+
+def test_process_info_in_mini_dump(self):
+"""Test that lldb can read the process information from the 
Minidump."""
+# target create -c linux-x86_64.dmp
+self.dbg.CreateTarget("")
+self.target = self.dbg.GetSelectedTarget()
+self.process = self.target.LoadCore("linux-x86_64.dmp")
+self.assertTrue(self.process, PROCESS_IS_VALID)
+self.assertEqual(self.process.GetNumThreads(), 1)
+self.assertEqual(self.process.GetProcessID(), 16001)
+
+def test_thread_info_in_mini_dump(self):
+"""Test that lldb can read the thread information from the Minidump."""
+# target create -c linux-x86_64.dmp
+self.dbg.CreateTarget("")
+self.target = self.dbg.GetSelectedTarget()
+self.p

[Lldb-commits] [PATCH] D25196: Adding a new Minidump post-mortem debugging plugin

2016-10-04 Thread Dimitar Vlahovski via lldb-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL283259: Adding a new Minidump post-mortem debugging plugin 
(authored by dvlahovski).

Changed prior to commit:
  https://reviews.llvm.org/D25196?vs=73541&id=73551#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D25196

Files:
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/Makefile
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64.cpp
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64.dmp
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.cpp
  
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.dmp
  lldb/trunk/source/API/SystemInitializerFull.cpp
  lldb/trunk/source/Plugins/Process/minidump/CMakeLists.txt
  lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.cpp
  lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.h
  lldb/trunk/source/Plugins/Process/minidump/MinidumpTypes.cpp
  lldb/trunk/source/Plugins/Process/minidump/MinidumpTypes.h
  lldb/trunk/source/Plugins/Process/minidump/ProcessMinidump.cpp
  lldb/trunk/source/Plugins/Process/minidump/ProcessMinidump.h
  lldb/trunk/source/Plugins/Process/minidump/ThreadMinidump.cpp
  lldb/trunk/source/Plugins/Process/minidump/ThreadMinidump.h
  lldb/trunk/unittests/Process/minidump/MinidumpParserTest.cpp

Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.cpp
===
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.cpp
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-x86_64_not_crashed.cpp
@@ -0,0 +1,36 @@
+#include 
+#include 
+#include 
+
+#include "client/linux/handler/exception_handler.h"
+
+static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,
+void* context, bool succeeded) {
+printf("Dump path: %s\n", descriptor.path());
+return succeeded;
+}
+
+int global = 42;
+
+int
+bar(int x, google_breakpad::ExceptionHandler &eh)
+{
+eh.WriteMinidump();
+int y = 4*x + global;
+return y;
+}
+
+int
+foo(int x, google_breakpad::ExceptionHandler &eh)
+{
+int y = 2*bar(3*x, eh);
+  return y;
+}
+
+
+int main(int argc, char* argv[]) {
+google_breakpad::MinidumpDescriptor descriptor("/tmp");
+google_breakpad::ExceptionHandler eh(descriptor, NULL, dumpCallback, NULL, true, -1);
+foo(1, eh);
+return 0;
+}
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
===
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
@@ -0,0 +1,100 @@
+"""
+Test basics of Minidump debugging.
+"""
+
+from __future__ import print_function
+from six import iteritems
+
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class MiniDumpNewTestCase(TestBase):
+
+mydir = TestBase.compute_mydir(__file__)
+
+NO_DEBUG_INFO_TESTCASE = True
+
+def test_process_info_in_mini_dump(self):
+"""Test that lldb can read the process information from the Minidump."""
+# target create -c linux-x86_64.dmp
+self.dbg.CreateTarget("")
+self.target = self.dbg.GetSelectedTarget()
+self.process = self.target.LoadCore("linux-x86_64.dmp")
+self.assertTrue(self.process, PROCESS_IS_VALID)
+self.assertEqual(self.process.GetNumThreads(), 1)
+self.assertEqual(self.process.GetProcessID(), 16001)
+
+def test_thread_info_in_mini_dump(self):
+"""Test that lldb can read the thread information from the Minidump."""
+# target create -c linux-x86_64.dmp
+self.dbg.CreateTarget("")
+self.target = self.dbg.GetSelectedTarget()
+self.process = self.target.LoadCore("linux-x86_64.dmp")
+# This process crashed due to a segmentation fault in its
+# one and only thread.
+self.assertEqual(self.process.GetNumThreads(), 1)
+thread = self.process.GetThreadAtIndex(0)
+self.assertEqual(thread.GetStopReason(), lldb.eStopReasonSignal)
+stop_description = thread.GetStopDescription(256)
+self.assertTrue("SIGSEGV" in stop_description)
+
+def test_stack_info_in_mini_dump(self):
+"""Test that we can see a trivial stack in a breakpad-generated Minidump."""
+# target cre

[Lldb-commits] [PATCH] D25247: Make LLDB -Werror clean under clang

2016-10-04 Thread Adrian McCarthy via lldb-commits
amccarth accepted this revision.
amccarth added a comment.

lgtm



> UDPSocket.cpp:106
> +#if defined(_MSC_VER) && defined(UNICODE)
> +"getaddrinfo(%s, %s, &hints, &info) returned error %i (%S)",
> +#else

Yuck.  Given that this is going to get reduced from UTF-16 to MBCS, it might be 
cleaner to leave the format string alone and call gai_strerrorA explicitly on 
Windows.  I guess it would be just as ugly that way.

> SelectHelper.cpp:122
> +  updateMaxFd(max_error_fd, fd);
> +updateMaxFd(max_fd, fd);
>}

I find this logic less clear than the original version, since it's not obvious 
that `updateMaxFd` uses an in-out parameter until you go look up to see what it 
does.  It also seems weird to have an output parameter come before an 
input-only parameter.

Perhaps if `updateMaxFd` returned the value instead of updating the parameter, 
it would be more obvious:

  max_fd = updateMaxFd(max_fd, fd);

https://reviews.llvm.org/D25247



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


[Lldb-commits] [PATCH] D25158: Convert some Breakpoint to StringRef

2016-10-04 Thread Zachary Turner via lldb-commits
zturner updated this revision to Diff 73554.
zturner added a comment.

Fixed up `ParseCanonicalReference` and `SplitIDRangeExpression` as suggested.  
I could have probably returned an `Optional>` 
but it seemed like overkill.  An empty pair seems sufficient for conveying 
failure.


https://reviews.llvm.org/D25158

Files:
  include/lldb/Breakpoint/BreakpointID.h
  include/lldb/Breakpoint/BreakpointIDList.h
  source/Breakpoint/BreakpointID.cpp
  source/Breakpoint/BreakpointIDList.cpp

Index: source/Breakpoint/BreakpointIDList.cpp
===
--- source/Breakpoint/BreakpointIDList.cpp
+++ source/Breakpoint/BreakpointIDList.cpp
@@ -57,19 +57,11 @@
 }
 
 bool BreakpointIDList::AddBreakpointID(const char *bp_id_str) {
-  BreakpointID temp_bp_id;
-  break_id_t bp_id;
-  break_id_t loc_id;
-
-  bool success =
-  BreakpointID::ParseCanonicalReference(bp_id_str, &bp_id, &loc_id);
-
-  if (success) {
-temp_bp_id.SetID(bp_id, loc_id);
-m_breakpoint_ids.push_back(temp_bp_id);
-  }
+  auto bp_id = BreakpointID::ParseCanonicalReference(bp_id_str);
+  if (!bp_id.hasValue())
+return false;
 
-  return success;
+  m_breakpoint_ids.push_back(*bp_id);
 }
 
 bool BreakpointIDList::FindBreakpointID(BreakpointID &bp_id,
@@ -88,15 +80,11 @@
 
 bool BreakpointIDList::FindBreakpointID(const char *bp_id_str,
 size_t *position) const {
-  BreakpointID temp_bp_id;
-  break_id_t bp_id;
-  break_id_t loc_id;
-
-  if (BreakpointID::ParseCanonicalReference(bp_id_str, &bp_id, &loc_id)) {
-temp_bp_id.SetID(bp_id, loc_id);
-return FindBreakpointID(temp_bp_id, position);
-  } else
+  auto bp_id = BreakpointID::ParseCanonicalReference(bp_id_str);
+  if (!bp_id.hasValue())
 return false;
+
+  return FindBreakpointID(*bp_id, position);
 }
 
 void BreakpointIDList::InsertStringArray(const char **string_array,
@@ -106,20 +94,14 @@
 return;
 
   for (uint32_t i = 0; i < array_size; ++i) {
-break_id_t bp_id;
-break_id_t loc_id;
-
-if (BreakpointID::ParseCanonicalReference(string_array[i], &bp_id,
-  &loc_id)) {
-  if (bp_id != LLDB_INVALID_BREAK_ID) {
-BreakpointID temp_bp_id(bp_id, loc_id);
-m_breakpoint_ids.push_back(temp_bp_id);
-  } else {
-result.AppendErrorWithFormat("'%s' is not a valid breakpoint ID.\n",
- string_array[i]);
-result.SetStatus(eReturnStatusFailed);
-return;
-  }
+auto bp_id = BreakpointID::ParseCanonicalReference(string_array[i]);
+if (bp_id.hasValue()) {
+  m_breakpoint_ids.push_back(*bp_id);
+} else {
+  result.AppendErrorWithFormat("'%s' is not a valid breakpoint ID.\n",
+   string_array[i]);
+  result.SetStatus(eReturnStatusFailed);
+  return;
 }
   }
   result.SetStatus(eReturnStatusSuccessFinishNoResult);
@@ -142,34 +124,32 @@
   bool allow_locations,
   CommandReturnObject &result,
   Args &new_args) {
-  std::string range_start;
-  const char *range_end;
-  const char *current_arg;
+  llvm::StringRef range_from;
+  llvm::StringRef range_to;
+  llvm::StringRef current_arg;
   const size_t num_old_args = old_args.GetArgumentCount();
   std::set names_found;
 
   for (size_t i = 0; i < num_old_args; ++i) {
 bool is_range = false;
 
 current_arg = old_args.GetArgumentAtIndex(i);
-if (!allow_locations && strchr(current_arg, '.') != nullptr) {
+if (!allow_locations && current_arg.contains('.')) {
   result.AppendErrorWithFormat(
-  "Breakpoint locations not allowed, saw location: %s.", current_arg);
+  "Breakpoint locations not allowed, saw location: %s.",
+  current_arg.str().c_str());
   new_args.Clear();
   return;
 }
 
-size_t range_start_len = 0;
-size_t range_end_pos = 0;
+llvm::StringRef range_expr;
 Error error;
 
-if (BreakpointIDList::StringContainsIDRangeExpression(
-current_arg, &range_start_len, &range_end_pos)) {
+std::tie(range_from, range_to) =
+BreakpointIDList::SplitIDRangeExpression(current_arg);
+if (!range_from.empty() && !range_to.empty()) {
   is_range = true;
-  range_start.assign(current_arg, range_start_len);
-  range_end = current_arg + range_end_pos;
-} else if (BreakpointID::StringIsBreakpointName(
-   llvm::StringRef(current_arg), error)) {
+} else if (BreakpointID::StringIsBreakpointName(current_arg, error)) {
   if (!error.Success()) {
 new_args.Clear();
 result.AppendError(error.AsCString());
@@ -183,24 +163,23 @@
BreakpointID::IsValidIDExpression(current_arg) &&
BreakpointID::IsValidIDExpression(
old_args.GetArgumentAtInde

[Lldb-commits] [PATCH] D24124: [LLDB][MIPS] Fix register read/write for 32 bit big endian system

2016-10-04 Thread Eugene Zelenko via lldb-commits
Eugene.Zelenko added a comment.

Looks like patch was not committed. Please rebase with trunk and run 
Clang-format.


https://reviews.llvm.org/D24124



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


[Lldb-commits] [PATCH] D25158: Convert some Breakpoint to StringRef

2016-10-04 Thread Jim Ingham via lldb-commits
jingham requested changes to this revision.
jingham added a comment.
This revision now requires changes to proceed.

No good deed goes unpunished...  You made ParseCanonicalReference more 
beautiful but forgot to update the header doc.

Also I didn't see the comment for SplitIDRangeExpression.



> BreakpointID.h:74-75
>//--
> -  static bool ParseCanonicalReference(const char *input,
> -  lldb::break_id_t *break_id,
> -  lldb::break_id_t *break_loc_id);
> +  static llvm::Optional
> +  ParseCanonicalReference(llvm::StringRef input);
>  

You changed the interface but not the header doc for it.

> BreakpointIDList.cpp:329-330
>  
> -bool BreakpointIDList::StringContainsIDRangeExpression(const char *in_string,
> -   size_t 
> *range_start_len,
> -   size_t 
> *range_end_pos) {
> -  bool is_range_expression = false;
> -  std::string arg_str = in_string;
> -  std::string::size_type idx;
> -  std::string::size_type start_pos = 0;
> -
> -  *range_start_len = 0;
> -  *range_end_pos = 0;
> -
> -  int specifiers_size = 0;
> -  for (int i = 0; BreakpointID::g_range_specifiers[i] != nullptr; ++i)
> -++specifiers_size;
> -
> -  for (int i = 0; i < specifiers_size && !is_range_expression; ++i) {
> -const char *specifier_str = BreakpointID::g_range_specifiers[i];
> -size_t len = strlen(specifier_str);
> -idx = arg_str.find(BreakpointID::g_range_specifiers[i]);
> -if (idx != std::string::npos) {
> -  *range_start_len = idx - start_pos;
> -  std::string start_str = arg_str.substr(start_pos, *range_start_len);
> -  if (idx + len < arg_str.length()) {
> -*range_end_pos = idx + len;
> -std::string end_str = arg_str.substr(*range_end_pos);
> -if (BreakpointID::IsValidIDExpression(start_str.c_str()) &&
> -BreakpointID::IsValidIDExpression(end_str.c_str())) {
> -  is_range_expression = true;
> -  //*range_start = start_str;
> -  //*range_end = end_str;
> -}
> -  }
> -}
> -  }
> +std::pair
> +BreakpointIDList::SplitIDRangeExpression(llvm::StringRef in_string) {
> +  for (auto specifier_str : BreakpointID::GetRangeSpecifiers()) {

Did you upload the latest version of your patch, I don't see a comment here...

https://reviews.llvm.org/D25158



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


[Lldb-commits] [PATCH] D25158: Convert some Breakpoint to StringRef

2016-10-04 Thread Zachary Turner via lldb-commits
zturner added inline comments.


> jingham wrote in BreakpointIDList.cpp:329-330
> Did you upload the latest version of your patch, I don't see a comment here...

I put the comment in the header.  I can put it here if you prefer.  Putting it 
on both places seems unnecessary though.  LMK which you prefer.  I'll fix up 
the header doc of the other function in the meantime.

https://reviews.llvm.org/D25158



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


Re: [Lldb-commits] [PATCH] D25158: Convert some Breakpoint to StringRef

2016-10-04 Thread Jim Ingham via lldb-commits
Ah, missed it there.  No it is fine to put it in the header.

Jim

> On Oct 4, 2016, at 2:37 PM, Zachary Turner  wrote:
> 
> zturner added inline comments.
> 
> 
>> jingham wrote in BreakpointIDList.cpp:329-330
>> Did you upload the latest version of your patch, I don't see a comment 
>> here...
> 
> I put the comment in the header.  I can put it here if you prefer.  Putting 
> it on both places seems unnecessary though.  LMK which you prefer.  I'll fix 
> up the header doc of the other function in the meantime.
> 
> https://reviews.llvm.org/D25158
> 
> 
> 

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


[Lldb-commits] [lldb] r283262 - Fix the decorator of TestBreakpointCaseSensitivity

2016-10-04 Thread Tamas Berghammer via lldb-commits
Author: tberghammer
Date: Tue Oct  4 16:32:46 2016
New Revision: 283262

URL: http://llvm.org/viewvc/llvm-project?rev=283262&view=rev
Log:
Fix the decorator of TestBreakpointCaseSensitivity

Modified:

lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_case_sensitivity/TestBreakpointCaseSensitivity.py

Modified: 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_case_sensitivity/TestBreakpointCaseSensitivity.py
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_case_sensitivity/TestBreakpointCaseSensitivity.py?rev=283262&r1=283261&r2=283262&view=diff
==
--- 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_case_sensitivity/TestBreakpointCaseSensitivity.py
 (original)
+++ 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_case_sensitivity/TestBreakpointCaseSensitivity.py
 Tue Oct  4 16:32:46 2016
@@ -19,15 +19,13 @@ class BreakpointCaseSensitivityTestCase(
 TestBase.setUp(self)
 self.line = line_number('main.c', self.BREAKPOINT_TEXT)
 
-@skipIf(oslist=no_match(['windows']))  # Skip for non-windows platforms
+@skipIf(hostoslist=no_match(['windows']))  # Skip for non-windows platforms
 def test_breakpoint_matches_file_with_different_case(self):
 """Set breakpoint on file, should match files with different case on 
Windows"""
 self.build()
 self.case_sensitivity_breakpoint(True)
 
-@skipIf(oslist=['windows'])  # Skip for windows platforms
-# Failing for unknown reason on non-Windows platforms.
-
+@skipIf(hostoslist=['windows'])  # Skip for windows platforms
 def test_breakpoint_doesnt_match_file_with_different_case(self):
 """Set breakpoint on file, shouldn't match files with different case 
on POSIX systems"""
 self.build()


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


[Lldb-commits] [lldb] r283263 - xfailing tests for Minidump plugin

2016-10-04 Thread Dimitar Vlahovski via lldb-commits
Author: dvlahovski
Date: Tue Oct  4 16:55:47 2016
New Revision: 283263

URL: http://llvm.org/viewvc/llvm-project?rev=283263&view=rev
Log:
xfailing tests for Minidump plugin

the tests are failing on the buildbot because there is an extra frame
(maybe) on the call stack.
Will investigate tomorrow.

Modified:

lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py

Modified: 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py?rev=283263&r1=283262&r2=283263&view=diff
==
--- 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
 (original)
+++ 
lldb/trunk/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpNew.py
 Tue Oct  4 16:55:47 2016
@@ -18,6 +18,7 @@ class MiniDumpNewTestCase(TestBase):
 
 NO_DEBUG_INFO_TESTCASE = True
 
+@expectedFailureAll
 def test_process_info_in_mini_dump(self):
 """Test that lldb can read the process information from the 
Minidump."""
 # target create -c linux-x86_64.dmp
@@ -28,6 +29,7 @@ class MiniDumpNewTestCase(TestBase):
 self.assertEqual(self.process.GetNumThreads(), 1)
 self.assertEqual(self.process.GetProcessID(), 16001)
 
+@expectedFailureAll
 def test_thread_info_in_mini_dump(self):
 """Test that lldb can read the thread information from the Minidump."""
 # target create -c linux-x86_64.dmp
@@ -42,6 +44,7 @@ class MiniDumpNewTestCase(TestBase):
 stop_description = thread.GetStopDescription(256)
 self.assertTrue("SIGSEGV" in stop_description)
 
+@expectedFailureAll
 def test_stack_info_in_mini_dump(self):
 """Test that we can see a trivial stack in a breakpad-generated 
Minidump."""
 # target create -c linux-x86_64.dmp
@@ -62,6 +65,7 @@ class MiniDumpNewTestCase(TestBase):
 self.assertTrue(eip.IsValid())
 self.assertEqual(pc, eip.GetValueAsUnsigned())
 
+@expectedFailureAll
 def test_snapshot_minidump(self):
 """Test that if we load a snapshot minidump file (meaning the process 
did not crash) there is no stop reason."""
 # target create -c linux-x86_64_not_crashed.dmp
@@ -74,6 +78,7 @@ class MiniDumpNewTestCase(TestBase):
 stop_description = thread.GetStopDescription(256)
 self.assertEqual(stop_description, None)
 
+@expectedFailureAll
 def test_deeper_stack_in_mini_dump(self):
 """Test that we can examine a more interesting stack in a Minidump."""
 # Launch with the Minidump, and inspect the stack.
@@ -89,6 +94,7 @@ class MiniDumpNewTestCase(TestBase):
 function_name = frame.GetFunctionName()
 self.assertTrue(name in function_name)
 
+@expectedFailureAll
 def test_local_variables_in_mini_dump(self):
 """Test that we can examine local variables in a Minidump."""
 # Launch with the Minidump, and inspect a local variable.


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


[Lldb-commits] [lldb] r283276 - Add the new minidump files to the Xcode project.

2016-10-04 Thread Jim Ingham via lldb-commits
Author: jingham
Date: Tue Oct  4 19:07:01 2016
New Revision: 283276

URL: http://llvm.org/viewvc/llvm-project?rev=283276&view=rev
Log:
Add the new minidump files to the Xcode project.

Modified:
lldb/trunk/lldb.xcodeproj/project.pbxproj

Modified: lldb/trunk/lldb.xcodeproj/project.pbxproj
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/project.pbxproj?rev=283276&r1=283275&r2=283276&view=diff
==
--- lldb/trunk/lldb.xcodeproj/project.pbxproj (original)
+++ lldb/trunk/lldb.xcodeproj/project.pbxproj Tue Oct  4 19:07:01 2016
@@ -735,6 +735,8 @@
4C56543519D2297A002E9C44 /* SBThreadPlan.h in Headers */ = {isa 
= PBXBuildFile; fileRef = 4C56543419D2297A002E9C44 /* SBThreadPlan.h */; 
settings = {ATTRIBUTES = (Public, ); }; };
4C56543719D22B32002E9C44 /* SBThreadPlan.cpp in Sources */ = 
{isa = PBXBuildFile; fileRef = 4C56543619D22B32002E9C44 /* SBThreadPlan.cpp */; 
};
4C6649A314EEE81000B0316F /* StreamCallback.cpp in Sources */ = 
{isa = PBXBuildFile; fileRef = 4C6649A214EEE81000B0316F /* StreamCallback.cpp 
*/; };
+   4C6966101DA47BCE004FAE72 /* ThreadMinidump.cpp in Sources */ = 
{isa = PBXBuildFile; fileRef = 4C6966081DA47BB4004FAE72 /* ThreadMinidump.cpp 
*/; };
+   4C6966111DA47BDB004FAE72 /* ProcessMinidump.cpp in Sources */ = 
{isa = PBXBuildFile; fileRef = 4C69660A1DA47BB4004FAE72 /* ProcessMinidump.cpp 
*/; };
4C88BC2A1BA3722B00AA0964 /* Expression.cpp in Sources */ = {isa 
= PBXBuildFile; fileRef = 4C88BC291BA3722B00AA0964 /* Expression.cpp */; };
4C88BC2D1BA391B000AA0964 /* UserExpression.cpp in Sources */ = 
{isa = PBXBuildFile; fileRef = 4C0083331B9A5DE200D5CF24 /* UserExpression.cpp 
*/; };
4CABA9E0134A8BCD00539BDD /* ValueObjectMemory.cpp in Sources */ 
= {isa = PBXBuildFile; fileRef = 4CABA9DF134A8BCD00539BDD /* 
ValueObjectMemory.cpp */; };
@@ -956,7 +958,6 @@
AFCB2BBD1BF577F40018B553 /* PythonExceptionState.cpp in Sources 
*/ = {isa = PBXBuildFile; fileRef = AFCB2BBB1BF577F40018B553 /* 
PythonExceptionState.cpp */; };
AFCB2BBE1BF577F40018B553 /* PythonExceptionState.h in Headers 
*/ = {isa = PBXBuildFile; fileRef = AFCB2BBC1BF577F40018B553 /* 
PythonExceptionState.h */; };
AFD65C811D9B5B2E00D93120 /* RegisterContextMinidump_x86_64.cpp 
in Sources */ = {isa = PBXBuildFile; fileRef = AFD65C7F1D9B5B2E00D93120 /* 
RegisterContextMinidump_x86_64.cpp */; };
-   AFD65C821D9B5B2E00D93120 /* RegisterContextMinidump_x86_64.h in 
Headers */ = {isa = PBXBuildFile; fileRef = AFD65C801D9B5B2E00D93120 /* 
RegisterContextMinidump_x86_64.h */; };
AFDCDBCB19DD0F42005EA55E /* SBExecutionContext.h in Headers */ 
= {isa = PBXBuildFile; fileRef = 940B02F419DC96CB00AD0F52 /* 
SBExecutionContext.h */; settings = {ATTRIBUTES = (Public, ); }; };
AFDFDFD119E34D3400EAE509 /* ConnectionFileDescriptorPosix.cpp 
in Sources */ = {isa = PBXBuildFile; fileRef = AFDFDFD019E34D3400EAE509 /* 
ConnectionFileDescriptorPosix.cpp */; };
AFEC3362194A8ABA00FF05C6 /* StructuredData.cpp in Sources */ = 
{isa = PBXBuildFile; fileRef = AFEC3361194A8ABA00FF05C6 /* StructuredData.cpp 
*/; };
@@ -1335,7 +1336,6 @@
23E2E5201D903726006F38BB /* linux-x86_64.dmp */ = {isa = 
PBXFileReference; lastKnownFileType = file; path = "linux-x86_64.dmp"; 
sourceTree = ""; };
23E2E52D1D90382B006F38BB /* BreakpointIDTest.cpp */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
path = BreakpointIDTest.cpp; sourceTree = ""; };
23E2E52E1D90382B006F38BB /* CMakeLists.txt */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 
CMakeLists.txt; sourceTree = ""; };
-   23E2E5361D9048FB006F38BB /* CMakeLists.txt */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 
CMakeLists.txt; sourceTree = ""; };
23E2E5371D9048FB006F38BB /* MinidumpParser.cpp */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
path = MinidumpParser.cpp; sourceTree = ""; };
23E2E5381D9048FB006F38BB /* MinidumpParser.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
MinidumpParser.h; sourceTree = ""; };
23E2E5391D9048FB006F38BB /* MinidumpTypes.cpp */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; 
path = MinidumpTypes.cpp; sourceTree = ""; };
@@ -2531,6 +2531,10 @@
4C626533130F1B0A00C889F6 /* StreamTee.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
StreamTee.h; path = include/lldb/Core/StreamTee.h; sourceTree = ""; };
4C66499F14EEE7F100B0316F /* StreamCallback.h */ = {isa = 
PBXFile

[Lldb-commits] [lldb] r283281 - Re-commit "Use StringRef in Support/Darf APIs (NFC)"

2016-10-04 Thread Mehdi Amini via lldb-commits
Author: mehdi_amini
Date: Tue Oct  4 19:37:18 2016
New Revision: 283281

URL: http://llvm.org/viewvc/llvm-project?rev=283281&view=rev
Log:
Re-commit "Use StringRef in Support/Darf APIs (NFC)"

This reverts commit r283278 and re-commit r283275 with
the update to fix the build on the LLDB side.

Modified:
lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp?rev=283281&r1=283280&r2=283281&view=diff
==
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp Tue Oct  4 
19:37:18 2016
@@ -21,53 +21,53 @@ const char *DW_TAG_value_to_name(uint32_
   if (val == 0)
 return "NULL";
 
-  const char *llvmstr = llvm::dwarf::TagString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::TagString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_TAG constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_CHILDREN_value_to_name(uint8_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::ChildrenString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::ChildrenString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_CHILDREN constant: 0x%x",
  val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_AT_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::AttributeString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::AttributeString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_AT constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_FORM_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::FormEncodingString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::FormEncodingString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_FORM constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_OP_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::OperationEncodingString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::OperationEncodingString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_OP constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 DRC_class DW_OP_value_to_class(uint32_t val) {
@@ -383,145 +383,145 @@ DRC_class DW_OP_value_to_class(uint32_t
 
 const char *DW_ATE_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::AttributeEncodingString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::AttributeEncodingString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_ATE constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_ACCESS_value_to_name(uint32_t val) {
   static char invalid[100];
 
-  const char *llvmstr = llvm::dwarf::AccessibilityString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::AccessibilityString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_ACCESS constant: 0x%x", 
val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_VIS_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::VisibilityString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::VisibilityString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_VIS constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_VIRTUALITY_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::VirtualityString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::VirtualityString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_VIRTUALITY constant: 0x%x",
  val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_LANG_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::LanguageString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::LanguageString(val);
+  if (llvmstr.empty()) {

[Lldb-commits] [lldb] r283285 - Revert "Re-commit "Use StringRef in Support/Darf APIs (NFC)""

2016-10-04 Thread Mehdi Amini via lldb-commits
Author: mehdi_amini
Date: Tue Oct  4 20:04:02 2016
New Revision: 283285

URL: http://llvm.org/viewvc/llvm-project?rev=283285&view=rev
Log:
Revert "Re-commit "Use StringRef in Support/Darf APIs (NFC)""

One test seems randomly broken: DebugInfo/X86/gnu-public-names.ll

Modified:
lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp?rev=283285&r1=283284&r2=283285&view=diff
==
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp Tue Oct  4 
20:04:02 2016
@@ -21,53 +21,53 @@ const char *DW_TAG_value_to_name(uint32_
   if (val == 0)
 return "NULL";
 
-  llvm::StringRef llvmstr = llvm::dwarf::TagString(val);
-  if (llvmstr.empty()) {
+  const char *llvmstr = llvm::dwarf::TagString(val);
+  if (llvmstr == NULL) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_TAG constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr.data();
+  return llvmstr;
 }
 
 const char *DW_CHILDREN_value_to_name(uint8_t val) {
   static char invalid[100];
-  llvm::StringRef llvmstr = llvm::dwarf::ChildrenString(val);
-  if (llvmstr.empty()) {
+  const char *llvmstr = llvm::dwarf::ChildrenString(val);
+  if (llvmstr == NULL) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_CHILDREN constant: 0x%x",
  val);
 return invalid;
   }
-  return llvmstr.data();
+  return llvmstr;
 }
 
 const char *DW_AT_value_to_name(uint32_t val) {
   static char invalid[100];
-  llvm::StringRef llvmstr = llvm::dwarf::AttributeString(val);
-  if (llvmstr.empty()) {
+  const char *llvmstr = llvm::dwarf::AttributeString(val);
+  if (llvmstr == NULL) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_AT constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr.data();
+  return llvmstr;
 }
 
 const char *DW_FORM_value_to_name(uint32_t val) {
   static char invalid[100];
-  llvm::StringRef llvmstr = llvm::dwarf::FormEncodingString(val);
-  if (llvmstr.empty()) {
+  const char *llvmstr = llvm::dwarf::FormEncodingString(val);
+  if (llvmstr == NULL) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_FORM constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr.data();
+  return llvmstr;
 }
 
 const char *DW_OP_value_to_name(uint32_t val) {
   static char invalid[100];
-  llvm::StringRef llvmstr = llvm::dwarf::OperationEncodingString(val);
-  if (llvmstr.empty()) {
+  const char *llvmstr = llvm::dwarf::OperationEncodingString(val);
+  if (llvmstr == NULL) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_OP constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr.data();
+  return llvmstr;
 }
 
 DRC_class DW_OP_value_to_class(uint32_t val) {
@@ -383,145 +383,145 @@ DRC_class DW_OP_value_to_class(uint32_t
 
 const char *DW_ATE_value_to_name(uint32_t val) {
   static char invalid[100];
-  llvm::StringRef llvmstr = llvm::dwarf::AttributeEncodingString(val);
-  if (llvmstr.empty()) {
+  const char *llvmstr = llvm::dwarf::AttributeEncodingString(val);
+  if (llvmstr == NULL) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_ATE constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr.data();
+  return llvmstr;
 }
 
 const char *DW_ACCESS_value_to_name(uint32_t val) {
   static char invalid[100];
 
-  llvm::StringRef llvmstr = llvm::dwarf::AccessibilityString(val);
-  if (llvmstr.empty()) {
+  const char *llvmstr = llvm::dwarf::AccessibilityString(val);
+  if (llvmstr == NULL) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_ACCESS constant: 0x%x", 
val);
 return invalid;
   }
-  return llvmstr.data();
+  return llvmstr;
 }
 
 const char *DW_VIS_value_to_name(uint32_t val) {
   static char invalid[100];
-  llvm::StringRef llvmstr = llvm::dwarf::VisibilityString(val);
-  if (llvmstr.empty()) {
+  const char *llvmstr = llvm::dwarf::VisibilityString(val);
+  if (llvmstr == NULL) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_VIS constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr.data();
+  return llvmstr;
 }
 
 const char *DW_VIRTUALITY_value_to_name(uint32_t val) {
   static char invalid[100];
-  llvm::StringRef llvmstr = llvm::dwarf::VirtualityString(val);
-  if (llvmstr.empty()) {
+  const char *llvmstr = llvm::dwarf::VirtualityString(val);
+  if (llvmstr == NULL) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_VIRTUALITY constant: 0x%x",
  val);
 return invalid;
   }
-  return llvmstr.data();
+  return llvmstr;
 }
 
 const char *DW_LANG_value_to_name(uint32_t val) {
   static char invalid[100];
-  llvm::StringRef llvmstr = llvm::dwarf::LanguageString(val);
-  if (llvmstr.empty()) {
+  const char *llvmstr = llvm::dwarf::LanguageString(val);
+  if (llvmstr == NULL) {
 snprintf(invalid, si

[Lldb-commits] [lldb] r283287 - This test is failing because there's a global symbol "C" in libsystem_c.dylib,

2016-10-04 Thread Jim Ingham via lldb-commits
Author: jingham
Date: Tue Oct  4 20:09:43 2016
New Revision: 283287

URL: http://llvm.org/viewvc/llvm-project?rev=283287&view=rev
Log:
This test is failing because there's a global symbol "C" in libsystem_c.dylib,
and that is defeating the lookup of the "struct C" here.  Adding the bug for 
that.

Modified:
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py

Modified: 
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py?rev=283287&r1=283286&r2=283287&view=diff
==
--- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py 
(original)
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py 
Tue Oct  4 20:09:43 2016
@@ -11,7 +11,7 @@ class TestCppScopes(TestBase):
 
 mydir = TestBase.compute_mydir(__file__)
 
-@expectedFailureDarwin
+@expectedFailureDarwin(bugnumber="")
 @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24764")
 def test_with_run_command(self):
 self.build()


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


[Lldb-commits] [lldb] r283289 - The collision of class C and libsystem_c.dylib:C is a failure

2016-10-04 Thread Jim Ingham via lldb-commits
Author: jingham
Date: Tue Oct  4 20:19:15 2016
New Revision: 283289

URL: http://llvm.org/viewvc/llvm-project?rev=283289&view=rev
Log:
The collision of class C and libsystem_c.dylib:C is a failure
worth preserving, but not essential to the purpose of this test
so I broke it into a separate test.

Modified:
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py

Modified: 
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py?rev=283289&r1=283288&r2=283289&view=diff
==
--- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py 
(original)
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/scope/TestCppScope.py 
Tue Oct  4 20:19:15 2016
@@ -11,9 +11,19 @@ class TestCppScopes(TestBase):
 
 mydir = TestBase.compute_mydir(__file__)
 
-@expectedFailureDarwin(bugnumber="")
 @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24764")
-def test_with_run_command(self):
+def test_all_but_c(self):
+self.do_test(False)
+
+# There's a global symbol in libsystem on Darwin that messes up
+# the lookup of class C.  Breaking that test out from the others
+# since that is a odd failure, and I don't want it to mask the
+# real purpose of this test.
+@expectedFailureDarwin(bugnumber="")
+def test_c(self):
+self.do_test(True)
+
+def do_test(self, test_c):
 self.build()
 
 # Get main source file
@@ -75,6 +85,11 @@ class TestCppScopes(TestBase):
 "target variable returns wrong variable " + name)
 
 for name in global_variables_assert:
+if name is "C::a" and not test_c:
+continue
+if name is not "C::a" and test_c:
+continue
+
 value = frame.EvaluateExpression(name)
 assert_value = global_variables_assert[name]
 self.assertTrue(


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


[Lldb-commits] [lldb] r283295 - Change Platform::GetRemoteSharedModule so if it's given a ModuleSpec

2016-10-04 Thread Jason Molenda via lldb-commits
Author: jmolenda
Date: Tue Oct  4 21:29:13 2016
New Revision: 283295

URL: http://llvm.org/viewvc/llvm-project?rev=283295&view=rev
Log:
Change Platform::GetRemoteSharedModule so if it's given a ModuleSpec
which specifies a file path and UUID but not an architecture, open
the file at that path and try every one of the architectures in the
file to see if there is a UUID match.  Currently we'll pick the
first slice of a multi-architecture file and return that as the
match, and when the UUID doesn't match because it's the wrong
architecture, we'll end up ignoring the file.

 

Modified:
lldb/trunk/source/Target/Platform.cpp

Modified: lldb/trunk/source/Target/Platform.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Platform.cpp?rev=283295&r1=283294&r2=283295&view=diff
==
--- lldb/trunk/source/Target/Platform.cpp (original)
+++ lldb/trunk/source/Target/Platform.cpp Tue Oct  4 21:29:13 2016
@@ -1557,6 +1557,25 @@ Error Platform::GetRemoteSharedModule(co
 }
   }
 
+  if (module_spec.GetArchitecture().IsValid() == false) {
+Error error;
+// No valid architecture was specified, ask the platform for
+// the architectures that we should be using (in the correct order)
+// and see if we can find a match that way
+ModuleSpec arch_module_spec(module_spec);
+for (uint32_t idx = 0; GetSupportedArchitectureAtIndex(
+ idx, arch_module_spec.GetArchitecture());
+ ++idx) {
+  error = ModuleList::GetSharedModule(arch_module_spec, module_sp, nullptr,
+  nullptr, nullptr);
+  // Did we find an executable using one of the
+  if (error.Success() && module_sp)
+break;
+}
+if (module_sp)
+  got_module_spec = true;
+  }
+
   if (!got_module_spec) {
 // Get module information from a target.
 if (!GetModuleSpec(module_spec.GetFileSpec(), 
module_spec.GetArchitecture(),


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


[Lldb-commits] [lldb] r283298 - Re-commit "Use StringRef in Support/Darf APIs (NFC)"

2016-10-04 Thread Mehdi Amini via lldb-commits
Author: mehdi_amini
Date: Wed Oct  5 00:59:29 2016
New Revision: 283298

URL: http://llvm.org/viewvc/llvm-project?rev=283298&view=rev
Log:
Re-commit "Use StringRef in Support/Darf APIs (NFC)"

This reverts commit r283285 and re-commit r283275 with
a fix for format("%s", Str); where Str is a StringRef.

Modified:
lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp?rev=283298&r1=283297&r2=283298&view=diff
==
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp Wed Oct  5 
00:59:29 2016
@@ -21,53 +21,53 @@ const char *DW_TAG_value_to_name(uint32_
   if (val == 0)
 return "NULL";
 
-  const char *llvmstr = llvm::dwarf::TagString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::TagString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_TAG constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_CHILDREN_value_to_name(uint8_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::ChildrenString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::ChildrenString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_CHILDREN constant: 0x%x",
  val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_AT_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::AttributeString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::AttributeString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_AT constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_FORM_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::FormEncodingString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::FormEncodingString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_FORM constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_OP_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::OperationEncodingString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::OperationEncodingString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_OP constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 DRC_class DW_OP_value_to_class(uint32_t val) {
@@ -383,145 +383,145 @@ DRC_class DW_OP_value_to_class(uint32_t
 
 const char *DW_ATE_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::AttributeEncodingString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::AttributeEncodingString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_ATE constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_ACCESS_value_to_name(uint32_t val) {
   static char invalid[100];
 
-  const char *llvmstr = llvm::dwarf::AccessibilityString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::AccessibilityString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_ACCESS constant: 0x%x", 
val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_VIS_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::VisibilityString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::VisibilityString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_VIS constant: 0x%x", val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_VIRTUALITY_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::VirtualityString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::VirtualityString(val);
+  if (llvmstr.empty()) {
 snprintf(invalid, sizeof(invalid), "Unknown DW_VIRTUALITY constant: 0x%x",
  val);
 return invalid;
   }
-  return llvmstr;
+  return llvmstr.data();
 }
 
 const char *DW_LANG_value_to_name(uint32_t val) {
   static char invalid[100];
-  const char *llvmstr = llvm::dwarf::LanguageString(val);
-  if (llvmstr == NULL) {
+  llvm::StringRef llvmstr = llvm::dwarf::LanguageString(val);
+  if (llvmstr.e