aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/InstrumentationRuntimeMainThreadChecker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/InstrumentationRuntimeMainThreadChecker.cpp')
-rw-r--r--lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/InstrumentationRuntimeMainThreadChecker.cpp14
1 files changed, 6 insertions, 8 deletions
diff --git a/lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/InstrumentationRuntimeMainThreadChecker.cpp b/lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/InstrumentationRuntimeMainThreadChecker.cpp
index 99784bd3dbd1..9a88b343878c 100644
--- a/lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/InstrumentationRuntimeMainThreadChecker.cpp
+++ b/lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/InstrumentationRuntimeMainThreadChecker.cpp
@@ -127,7 +127,7 @@ InstrumentationRuntimeMainThreadChecker::RetrieveReportData(
StackFrameSP responsible_frame;
for (unsigned I = 0; I < thread_sp->GetStackFrameCount(); ++I) {
StackFrameSP frame = thread_sp->GetStackFrameAtIndex(I);
- Address addr = frame->GetFrameCodeAddress();
+ Address addr = frame->GetFrameCodeAddressForSymbolication();
if (addr.GetModule() == runtime_module_sp) // Skip PCs from the runtime.
continue;
@@ -135,11 +135,6 @@ InstrumentationRuntimeMainThreadChecker::RetrieveReportData(
if (!responsible_frame)
responsible_frame = frame;
- // First frame in stacktrace should point to a real PC, not return address.
- if (I != 0 && trace->GetSize() == 0) {
- addr.Slide(-1);
- }
-
lldb::addr_t PC = addr.GetLoadAddress(&target);
trace->AddItem(StructuredData::ObjectSP(new StructuredData::Integer(PC)));
}
@@ -271,8 +266,11 @@ InstrumentationRuntimeMainThreadChecker::GetBacktracesFromExtendedStopInfo(
info->GetObjectForDotSeparatedPath("tid");
tid_t tid = thread_id_obj ? thread_id_obj->GetIntegerValue() : 0;
- HistoryThread *history_thread = new HistoryThread(*process_sp, tid, PCs);
- ThreadSP new_thread_sp(history_thread);
+ // We gather symbolication addresses above, so no need for HistoryThread to
+ // try to infer the call addresses.
+ bool pcs_are_call_addresses = true;
+ ThreadSP new_thread_sp = std::make_shared<HistoryThread>(
+ *process_sp, tid, PCs, pcs_are_call_addresses);
// Save this in the Process' ExtendedThreadList so a strong pointer retains
// the object