Author: gclayton
Date: Fri Oct 11 17:03:48 2013
New Revision: 192510
URL: http://llvm.org/viewvc/llvm-project?rev=192510&view=rev
Log:
<rdar://problem/15191078>
Fixed Module::ResolveSymbolContextForAddress() to be able to also look in the
SymbolVendor's SymbolFile's ObjectFile for a more meaningful symbol when a
symbol lookup finds a synthetic symbol from the main object file. This will
help lookups on MacOSX as the main executable might be stripped, but the dSYM
file always has a full symbol table.
Modified:
lldb/trunk/include/lldb/Symbol/Symtab.h
lldb/trunk/source/Core/Module.cpp
lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
Modified: lldb/trunk/include/lldb/Symbol/Symtab.h
URL:
http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/Symtab.h?rev=192510&r1=192509&r2=192510&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Symbol/Symtab.h (original)
+++ lldb/trunk/include/lldb/Symbol/Symtab.h Fri Oct 11 17:03:48 2013
@@ -95,6 +95,10 @@ public:
bool add_mangled,
NameToIndexMap
&name_to_index_map) const;
+ ObjectFile * GetObjectFile()
+ {
+ return m_objfile;
+ }
protected:
typedef std::vector<Symbol> collection;
typedef collection::iterator iterator;
Modified: lldb/trunk/source/Core/Module.cpp
URL:
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Module.cpp?rev=192510&r1=192509&r2=192510&view=diff
==============================================================================
--- lldb/trunk/source/Core/Module.cpp (original)
+++ lldb/trunk/source/Core/Module.cpp Fri Oct 11 17:03:48 2013
@@ -499,7 +499,39 @@ Module::ResolveSymbolContextForAddress (
}
if (sc.symbol)
+ {
+ if (sc.symbol->IsSynthetic())
+ {
+ // We have a synthetic symbol so lets check if the
object file
+ // from the symbol file in the symbol vendor is
different than
+ // the object file for the module, and if so search
its symbol
+ // table to see if we can come up with a better
symbol. For example
+ // dSYM files on MacOSX have an unstripped symbol
table inside of
+ // them.
+ ObjectFile *symtab_objfile = symtab->GetObjectFile();
+ if (symtab_objfile && symtab_objfile->IsStripped())
+ {
+ SymbolFile *symfile = sym_vendor->GetSymbolFile();
+ if (symfile)
+ {
+ ObjectFile *symfile_objfile =
symfile->GetObjectFile();
+ if (symfile_objfile != symtab_objfile)
+ {
+ Symtab *symfile_symtab =
symfile_objfile->GetSymtab();
+ if (symfile_symtab)
+ {
+ Symbol *symbol =
symfile_symtab->FindSymbolContainingFileAddress(so_addr.GetFileAddress());
+ if (symbol && !symbol->IsSynthetic())
+ {
+ sc.symbol = symbol;
+ }
+ }
+ }
+ }
+ }
+ }
resolved_flags |= eSymbolContextSymbol;
+ }
}
}
Modified: lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
URL:
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp?rev=192510&r1=192509&r2=192510&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (original)
+++ lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp Fri Oct 11
17:03:48 2013
@@ -949,7 +949,7 @@ ObjectFileMachO::IsStripped ()
}
}
if (m_dysymtab.cmd)
- return m_dysymtab.nlocalsym == 0;
+ return m_dysymtab.nlocalsym <= 1;
return false;
}
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits