================ @@ -176,10 +170,23 @@ HistoryThreads MemoryHistoryASan::GetHistoryThreads(lldb::addr_t address) { options.SetAutoApplyFixIts(false); options.SetLanguage(eLanguageTypeObjC_plus_plus); - if (auto m = GetPreferredAsanModule(process_sp->GetTarget())) { - SymbolContextList sc_list; - sc_list.Append(SymbolContext(std::move(m))); - options.SetPreferredSymbolContexts(std::move(sc_list)); + // 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 (process_sp->GetTarget().GetArchitecture().GetTriple().isOSDarwin()) { + if (auto m = GetPreferredAsanModule(process_sp->GetTarget())) { + SymbolContextList sc_list; + sc_list.Append(SymbolContext(std::move(m))); + options.SetPreferredSymbolContexts(std::move(sc_list)); + } else { + // 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; + } ---------------- Michael137 wrote:
Should we invert this like so? ```suggestion 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; } ``` In case `GetPreferredAsanModule` does something on non-Darwin platforms in the future? https://github.com/llvm/llvm-project/pull/154247 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits