From 6f6bf26a3e8e5baeec72aad1a68f384c0a9264dd Mon Sep 17 00:00:00 2001 From: Greg Clayton Date: Sat, 10 Dec 2011 21:05:26 +0000 Subject: Stopped the SymbolFileDWARF::FindFunctions (...) from always calculating the line table entry for all functions that were found. This can slow down the expression parser if it ends up finding a bunch of matches. Fixed the places that were relying on the line table entry being filled in. Discovered a recursive stack blowout that happened when "main" didn't have line info for it and there was no line information for "main" llvm-svn: 146330 --- lldb/source/Core/SourceManager.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'lldb/source/Core/SourceManager.cpp') diff --git a/lldb/source/Core/SourceManager.cpp b/lldb/source/Core/SourceManager.cpp index 482ccbbcdb0..3e4a78ac68e 100644 --- a/lldb/source/Core/SourceManager.cpp +++ b/lldb/source/Core/SourceManager.cpp @@ -250,19 +250,22 @@ SourceManager::GetDefaultFileAndLine (FileSpec &file_spec, uint32_t &line) { SymbolContext sc; sc_list.GetContextAtIndex(idx, sc); - if (sc.line_entry.file) + if (sc.function) { - SetDefaultFileAndLine(sc.line_entry.file, sc.line_entry.line); - break; + lldb_private::LineEntry line_entry; + if (sc.function->GetAddressRange().GetBaseAddress().CalculateSymbolContextLineEntry (line_entry)) + { + SetDefaultFileAndLine (line_entry.file, + line_entry.line); + file_spec = m_last_file_sp->GetFileSpec(); + line = m_last_file_line; + return true; + } } } - return GetDefaultFileAndLine (file_spec, line); } - else - return false; } - else - return false; + return false; } void -- cgit v1.2.3