[Lldb-commits] [PATCH] D101094: lldb/Instrumentation: NFC-ish use GetFrameCodeAddressForSymbolication()
Frederic Riss via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Thu Apr 22 11:57:30 PDT 2021
friss updated this revision to Diff 339746.
friss added a comment.
Use make_shared
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D101094/new/
https://reviews.llvm.org/D101094
Files:
lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/InstrumentationRuntimeMainThreadChecker.cpp
lldb/source/Plugins/InstrumentationRuntime/UBSan/InstrumentationRuntimeUBSan.cpp
Index: lldb/source/Plugins/InstrumentationRuntime/UBSan/InstrumentationRuntimeUBSan.cpp
===================================================================
--- lldb/source/Plugins/InstrumentationRuntime/UBSan/InstrumentationRuntimeUBSan.cpp
+++ lldb/source/Plugins/InstrumentationRuntime/UBSan/InstrumentationRuntimeUBSan.cpp
@@ -150,8 +150,8 @@
StructuredData::Array *trace = new StructuredData::Array();
auto trace_sp = StructuredData::ObjectSP(trace);
for (unsigned I = 0; I < thread_sp->GetStackFrameCount(); ++I) {
- const Address FCA =
- thread_sp->GetStackFrameAtIndex(I)->GetFrameCodeAddress();
+ const Address FCA = thread_sp->GetStackFrameAtIndex(I)
+ ->GetFrameCodeAddressForSymbolication();
if (FCA.GetModule() == runtime_module_sp) // Skip PCs from the runtime.
continue;
@@ -324,8 +324,11 @@
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);
std::string stop_reason_description = GetStopReasonDescription(info);
new_thread_sp->SetName(stop_reason_description.c_str());
Index: lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/InstrumentationRuntimeMainThreadChecker.cpp
===================================================================
--- lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/InstrumentationRuntimeMainThreadChecker.cpp
+++ lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/InstrumentationRuntimeMainThreadChecker.cpp
@@ -127,7 +127,7 @@
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 @@
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 @@
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D101094.339746.patch
Type: text/x-patch
Size: 3328 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20210422/8ff430eb/attachment.bin>
More information about the lldb-commits
mailing list