diff options
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; |