summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/source/Plugins/Process/POSIX/POSIXStopInfo.cpp2
-rw-r--r--lldb/source/Plugins/Process/POSIX/POSIXStopInfo.h12
-rw-r--r--lldb/source/Plugins/Process/POSIX/POSIXThread.cpp10
-rw-r--r--lldb/source/Plugins/Process/POSIX/ProcessMessage.cpp21
-rw-r--r--lldb/source/Plugins/Process/POSIX/ProcessMessage.h2
5 files changed, 33 insertions, 14 deletions
diff --git a/lldb/source/Plugins/Process/POSIX/POSIXStopInfo.cpp b/lldb/source/Plugins/Process/POSIX/POSIXStopInfo.cpp
index b9765b6997c..6e2c140682b 100644
--- a/lldb/source/Plugins/Process/POSIX/POSIXStopInfo.cpp
+++ b/lldb/source/Plugins/Process/POSIX/POSIXStopInfo.cpp
@@ -56,7 +56,7 @@ POSIXCrashStopInfo::GetStopReason() const
const char *
POSIXCrashStopInfo::GetDescription()
{
- return ProcessMessage::GetCrashReasonString(m_crash_reason);
+ return ProcessMessage::GetCrashReasonString(m_crash_reason, m_fault_addr);
}
//===----------------------------------------------------------------------===//
diff --git a/lldb/source/Plugins/Process/POSIX/POSIXStopInfo.h b/lldb/source/Plugins/Process/POSIX/POSIXStopInfo.h
index 7c5be3dc615..cbf309e5350 100644
--- a/lldb/source/Plugins/Process/POSIX/POSIXStopInfo.h
+++ b/lldb/source/Plugins/Process/POSIX/POSIXStopInfo.h
@@ -68,10 +68,12 @@ class POSIXCrashStopInfo
: public POSIXStopInfo
{
public:
- POSIXCrashStopInfo(POSIXThread &thread, uint32_t status,
- ProcessMessage::CrashReason reason)
+ POSIXCrashStopInfo(POSIXThread &thread, uint32_t status,
+ ProcessMessage::CrashReason reason,
+ lldb::addr_t fault_addr)
: POSIXStopInfo(thread, status),
- m_crash_reason(reason)
+ m_crash_reason(reason),
+ m_fault_addr(fault_addr)
{ }
~POSIXCrashStopInfo();
@@ -82,11 +84,9 @@ public:
const char *
GetDescription();
- ProcessMessage::CrashReason
- GetCrashReason() const;
-
private:
ProcessMessage::CrashReason m_crash_reason;
+ lldb::addr_t m_fault_addr;
};
//===----------------------------------------------------------------------===//
diff --git a/lldb/source/Plugins/Process/POSIX/POSIXThread.cpp b/lldb/source/Plugins/Process/POSIX/POSIXThread.cpp
index 0f86f300c0f..daff408dec2 100644
--- a/lldb/source/Plugins/Process/POSIX/POSIXThread.cpp
+++ b/lldb/source/Plugins/Process/POSIX/POSIXThread.cpp
@@ -237,7 +237,8 @@ POSIXThread::Notify(const ProcessMessage &message)
{
Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_THREAD));
if (log)
- log->Printf ("POSIXThread::%s () message kind = '%s'", __FUNCTION__, message.PrintKind());
+ log->Printf ("POSIXThread::%s () message kind = '%s' for tid %" PRIu64,
+ __FUNCTION__, message.PrintKind(), GetID());
switch (message.GetKind())
{
@@ -467,9 +468,12 @@ POSIXThread::CrashNotify(const ProcessMessage &message)
Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_THREAD));
if (log)
- log->Printf ("POSIXThread::%s () signo = %i, reason = '%s'", __FUNCTION__, signo, message.PrintCrashReason());
+ log->Printf ("POSIXThread::%s () signo = %i, reason = '%s'",
+ __FUNCTION__, signo, message.PrintCrashReason());
- SetStopInfo (lldb::StopInfoSP(new POSIXCrashStopInfo(*this, signo, message.GetCrashReason())));
+ SetStopInfo (lldb::StopInfoSP(new POSIXCrashStopInfo(*this, signo,
+ message.GetCrashReason(),
+ message.GetFaultAddress())));
SetResumeSignal(signo);
}
diff --git a/lldb/source/Plugins/Process/POSIX/ProcessMessage.cpp b/lldb/source/Plugins/Process/POSIX/ProcessMessage.cpp
index a33470b17d9..60a29e07cea 100644
--- a/lldb/source/Plugins/Process/POSIX/ProcessMessage.cpp
+++ b/lldb/source/Plugins/Process/POSIX/ProcessMessage.cpp
@@ -9,12 +9,25 @@
#include "ProcessMessage.h"
+#include <sstream>
+
using namespace lldb_private;
+namespace {
+
+inline void AppendFaultAddr(std::string& str, lldb::addr_t addr)
+{
+ std::stringstream ss;
+ ss << " (fault address: 0x" << std::hex << addr << ")";
+ str += ss.str();
+}
+
+}
+
const char *
-ProcessMessage::GetCrashReasonString(CrashReason reason)
+ProcessMessage::GetCrashReasonString(CrashReason reason, lldb::addr_t fault_addr)
{
- const char *str = NULL;
+ static std::string str;
switch (reason)
{
@@ -24,9 +37,11 @@ ProcessMessage::GetCrashReasonString(CrashReason reason)
case eInvalidAddress:
str = "invalid address";
+ AppendFaultAddr(str, fault_addr);
break;
case ePrivilegedAddress:
str = "address access protected";
+ AppendFaultAddr(str, fault_addr);
break;
case eIllegalOpcode:
str = "illegal instruction";
@@ -87,7 +102,7 @@ ProcessMessage::GetCrashReasonString(CrashReason reason)
break;
}
- return str;
+ return str.c_str();
}
const char *
diff --git a/lldb/source/Plugins/Process/POSIX/ProcessMessage.h b/lldb/source/Plugins/Process/POSIX/ProcessMessage.h
index c76ca01489e..c6c460c1344 100644
--- a/lldb/source/Plugins/Process/POSIX/ProcessMessage.h
+++ b/lldb/source/Plugins/Process/POSIX/ProcessMessage.h
@@ -164,7 +164,7 @@ public:
}
static const char *
- GetCrashReasonString(CrashReason reason);
+ GetCrashReasonString(CrashReason reason, lldb::addr_t fault_addr);
const char *
PrintCrashReason() const;
OpenPOWER on IntegriCloud