[Lldb-commits] [lldb] [lldb] Fix source line annotations for libsanitizers traces (PR #154247)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Wed Aug 20 10:48:33 PDT 2025
================
@@ -176,10 +170,24 @@ HistoryThreads MemoryHistoryASan::GetHistoryThreads(lldb::addr_t address) {
options.SetAutoApplyFixIts(false);
options.SetLanguage(eLanguageTypeObjC_plus_plus);
+ // The ASan compiler-rt runtime already massages the return addresses into
+ // call addresses, so we don't want LLDB's unwinder to try to locate the
+ // previous instruction again as this might lead to us reporting a different
+ // line.
+ auto pc_type = TracePCType::Calls;
+
if (auto m = GetPreferredAsanModule(process_sp->GetTarget())) {
SymbolContextList sc_list;
sc_list.Append(SymbolContext(std::move(m)));
options.SetPreferredSymbolContexts(std::move(sc_list));
+ } else if (process_sp->GetTarget()
+ .GetArchitecture()
+ .GetTriple()
+ .isOSDarwin()) {
+ // Darwin, but not ASan compiler-rt implies libsanitizers which collects
+ // return addresses. It also discards a few non-user frames at the top of
+ // the stack.
+ pc_type = TracePCType::ReturnsNoZerothFrame;
}
----------------
JDevlieghere wrote:
Could we refactor `GetPreferredAsanModule` to abstract over this, instead of having no module + darwin _imply_ libsantizers? This could return a:
```
struct {
TracePCType pc_type;
ModuleSP asan_module;
}
```
https://github.com/llvm/llvm-project/pull/154247
More information about the lldb-commits
mailing list