summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target
diff options
context:
space:
mode:
authorJim Ingham <jingham@apple.com>2019-12-20 10:56:39 -0800
committerJim Ingham <jingham@apple.com>2019-12-20 10:56:39 -0800
commit810c3cfa664b38b27bc30afaadab3d775cb17922 (patch)
tree54a4bf90d1d115290c7e73b637b5aba25366af30 /lldb/source/Target
parent15bfd2cd543804caccd2fb485af4ea55b55006f1 (diff)
downloadbcm5719-llvm-810c3cfa664b38b27bc30afaadab3d775cb17922.tar.gz
bcm5719-llvm-810c3cfa664b38b27bc30afaadab3d775cb17922.zip
ThreadPlanTracer::TracingStarted can't call virtual methods on Thread.
TracingStarted gets called in the Thread constructor, which means you can't call a virtual method of the class. So delay setting up the m_register_values till you need them. NFC as lldb just crashes if you don't do this. The thread tracing is an only occasionally useful feature, and it only sort of works. I'm not adding tests etc. at this point, I'm just poking at it a bit. If I get it working better I'll write tests and so forth.
Diffstat (limited to 'lldb/source/Target')
-rw-r--r--lldb/source/Target/ThreadPlanTracer.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/lldb/source/Target/ThreadPlanTracer.cpp b/lldb/source/Target/ThreadPlanTracer.cpp
index 5782fe8e644..b50c1636b7f 100644
--- a/lldb/source/Target/ThreadPlanTracer.cpp
+++ b/lldb/source/Target/ThreadPlanTracer.cpp
@@ -115,10 +115,6 @@ TypeFromUser ThreadPlanAssemblyTracer::GetIntPointerType() {
ThreadPlanAssemblyTracer::~ThreadPlanAssemblyTracer() = default;
void ThreadPlanAssemblyTracer::TracingStarted() {
- RegisterContext *reg_ctx = m_thread.GetRegisterContext().get();
-
- if (m_register_values.empty())
- m_register_values.resize(reg_ctx->GetRegisterCount());
}
void ThreadPlanAssemblyTracer::TracingEnded() { m_register_values.clear(); }
@@ -208,6 +204,11 @@ void ThreadPlanAssemblyTracer::Log() {
}
}
+ if (m_register_values.empty()) {
+ RegisterContext *reg_ctx = m_thread.GetRegisterContext().get();
+ m_register_values.resize(reg_ctx->GetRegisterCount());
+ }
+
RegisterValue reg_value;
for (uint32_t reg_num = 0, num_registers = reg_ctx->GetRegisterCount();
reg_num < num_registers; ++reg_num) {
OpenPOWER on IntegriCloud