diff options
Diffstat (limited to 'lldb/source/Plugins/Process/Utility/ThreadMemory.cpp')
-rw-r--r-- | lldb/source/Plugins/Process/Utility/ThreadMemory.cpp | 171 |
1 files changed, 68 insertions, 103 deletions
diff --git a/lldb/source/Plugins/Process/Utility/ThreadMemory.cpp b/lldb/source/Plugins/Process/Utility/ThreadMemory.cpp index 6a7aa626baf..b3cac1c854d 100644 --- a/lldb/source/Plugins/Process/Utility/ThreadMemory.cpp +++ b/lldb/source/Plugins/Process/Utility/ThreadMemory.cpp @@ -1,4 +1,5 @@ -//===-- ThreadMemory.cpp ----------------------------------------------*- C++ -*-===// +//===-- ThreadMemory.cpp ----------------------------------------------*- C++ +//-*-===// // // The LLVM Compiler Infrastructure // @@ -8,133 +9,97 @@ //===----------------------------------------------------------------------===// #include "Plugins/Process/Utility/ThreadMemory.h" +#include "Plugins/Process/Utility/RegisterContextThreadMemory.h" #include "lldb/Target/OperatingSystem.h" -#include "lldb/Target/RegisterContext.h" #include "lldb/Target/Process.h" +#include "lldb/Target/RegisterContext.h" #include "lldb/Target/StopInfo.h" #include "lldb/Target/Unwind.h" -#include "Plugins/Process/Utility/RegisterContextThreadMemory.h" using namespace lldb; using namespace lldb_private; -ThreadMemory::ThreadMemory (Process &process, - tid_t tid, - const ValueObjectSP &thread_info_valobj_sp) : - Thread (process, tid), - m_backing_thread_sp (), - m_thread_info_valobj_sp (thread_info_valobj_sp), - m_name(), - m_queue() -{ -} - +ThreadMemory::ThreadMemory(Process &process, tid_t tid, + const ValueObjectSP &thread_info_valobj_sp) + : Thread(process, tid), m_backing_thread_sp(), + m_thread_info_valobj_sp(thread_info_valobj_sp), m_name(), m_queue() {} -ThreadMemory::ThreadMemory (Process &process, - lldb::tid_t tid, - const char *name, - const char *queue, - lldb::addr_t register_data_addr) : - Thread (process, tid), - m_backing_thread_sp (), - m_thread_info_valobj_sp (), - m_name(), - m_queue(), - m_register_data_addr (register_data_addr) -{ - if (name) - m_name = name; - if (queue) - m_queue = queue; +ThreadMemory::ThreadMemory(Process &process, lldb::tid_t tid, const char *name, + const char *queue, lldb::addr_t register_data_addr) + : Thread(process, tid), m_backing_thread_sp(), m_thread_info_valobj_sp(), + m_name(), m_queue(), m_register_data_addr(register_data_addr) { + if (name) + m_name = name; + if (queue) + m_queue = queue; } +ThreadMemory::~ThreadMemory() { DestroyThread(); } -ThreadMemory::~ThreadMemory() -{ - DestroyThread(); +void ThreadMemory::WillResume(StateType resume_state) { + if (m_backing_thread_sp) + m_backing_thread_sp->WillResume(resume_state); } -void -ThreadMemory::WillResume (StateType resume_state) -{ - if (m_backing_thread_sp) - m_backing_thread_sp->WillResume(resume_state); +void ThreadMemory::ClearStackFrames() { + if (m_backing_thread_sp) + m_backing_thread_sp->ClearStackFrames(); + Thread::ClearStackFrames(); } -void -ThreadMemory::ClearStackFrames () -{ - if (m_backing_thread_sp) - m_backing_thread_sp->ClearStackFrames(); - Thread::ClearStackFrames(); +RegisterContextSP ThreadMemory::GetRegisterContext() { + if (!m_reg_context_sp) + m_reg_context_sp.reset( + new RegisterContextThreadMemory(*this, m_register_data_addr)); + return m_reg_context_sp; } RegisterContextSP -ThreadMemory::GetRegisterContext () -{ - if (!m_reg_context_sp) - m_reg_context_sp.reset (new RegisterContextThreadMemory (*this, m_register_data_addr)); - return m_reg_context_sp; -} +ThreadMemory::CreateRegisterContextForFrame(StackFrame *frame) { + RegisterContextSP reg_ctx_sp; + uint32_t concrete_frame_idx = 0; -RegisterContextSP -ThreadMemory::CreateRegisterContextForFrame (StackFrame *frame) -{ - RegisterContextSP reg_ctx_sp; - uint32_t concrete_frame_idx = 0; - - if (frame) - concrete_frame_idx = frame->GetConcreteFrameIndex (); - - if (concrete_frame_idx == 0) - { - reg_ctx_sp = GetRegisterContext (); - } - else - { - Unwind *unwinder = GetUnwinder (); - if (unwinder) - reg_ctx_sp = unwinder->CreateRegisterContextForFrame (frame); - } - return reg_ctx_sp; + if (frame) + concrete_frame_idx = frame->GetConcreteFrameIndex(); + + if (concrete_frame_idx == 0) { + reg_ctx_sp = GetRegisterContext(); + } else { + Unwind *unwinder = GetUnwinder(); + if (unwinder) + reg_ctx_sp = unwinder->CreateRegisterContextForFrame(frame); + } + return reg_ctx_sp; } -bool -ThreadMemory::CalculateStopInfo () -{ - if (m_backing_thread_sp) - { - lldb::StopInfoSP backing_stop_info_sp (m_backing_thread_sp->GetPrivateStopInfo()); - if (backing_stop_info_sp && backing_stop_info_sp->IsValidForOperatingSystemThread(*this)) - { - backing_stop_info_sp->SetThread (shared_from_this()); - SetStopInfo (backing_stop_info_sp); - return true; - } +bool ThreadMemory::CalculateStopInfo() { + if (m_backing_thread_sp) { + lldb::StopInfoSP backing_stop_info_sp( + m_backing_thread_sp->GetPrivateStopInfo()); + if (backing_stop_info_sp && + backing_stop_info_sp->IsValidForOperatingSystemThread(*this)) { + backing_stop_info_sp->SetThread(shared_from_this()); + SetStopInfo(backing_stop_info_sp); + return true; } - else - { - ProcessSP process_sp (GetProcess()); + } else { + ProcessSP process_sp(GetProcess()); - if (process_sp) - { - OperatingSystem *os = process_sp->GetOperatingSystem (); - if (os) - { - SetStopInfo (os->CreateThreadStopReason (this)); - return true; - } - } + if (process_sp) { + OperatingSystem *os = process_sp->GetOperatingSystem(); + if (os) { + SetStopInfo(os->CreateThreadStopReason(this)); + return true; + } } - return false; + } + return false; } -void -ThreadMemory::RefreshStateAfterStop() -{ - if (m_backing_thread_sp) - return m_backing_thread_sp->RefreshStateAfterStop(); - - if (m_reg_context_sp) - m_reg_context_sp->InvalidateAllRegisters(); +void ThreadMemory::RefreshStateAfterStop() { + if (m_backing_thread_sp) + return m_backing_thread_sp->RefreshStateAfterStop(); + + if (m_reg_context_sp) + m_reg_context_sp->InvalidateAllRegisters(); } |