llvm-project/lldb/source/Plugins/SymbolFile/DWARF
Greg Clayton 1f7460716b <rdar://problem/11757916>
Make breakpoint setting by file and line much more efficient by only looking for inlined breakpoint locations if we are setting a breakpoint in anything but a source implementation file. Implementing this complex for a many reasons. Turns out that parsing compile units lazily had some issues with respect to how we need to do things with DWARF in .o files. So the fixes in the checkin for this makes these changes:
- Add a new setting called "target.inline-breakpoint-strategy" which can be set to "never", "always", or "headers". "never" will never try and set any inlined breakpoints (fastest). "always" always looks for inlined breakpoint locations (slowest, but most accurate). "headers", which is the default setting, will only look for inlined breakpoint locations if the breakpoint is set in what are consudered to be header files, which is realy defined as "not in an implementation source file". 
- modify the breakpoint setting by file and line to check the current "target.inline-breakpoint-strategy" setting and act accordingly
- Modify compile units to be able to get their language and other info lazily. This allows us to create compile units from the debug map and not have to fill all of the details in, and then lazily discover this information as we go on debuggging. This is needed to avoid parsing all .o files when setting breakpoints in implementation only files (no inlines). Otherwise we would need to parse the .o file, the object file (mach-o in our case) and the symbol file (DWARF in the object file) just to see what the compile unit was.
- modify the "SymbolFileDWARFDebugMap" to subclass lldb_private::Module so that the virtual "GetObjectFile()" and "GetSymbolVendor()" functions can be intercepted when the .o file contenst are later lazilly needed. Prior to this fix, when we first instantiated the "SymbolFileDWARFDebugMap" class, we would also make modules, object files and symbol files for every .o file in the debug map because we needed to fix up the sections in the .o files with information that is in the executable debug map. Now we lazily do this in the DebugMapModule::GetObjectFile()

Cleaned up header includes a bit as well.

llvm-svn: 162860
2012-08-29 21:13:06 +00:00
..
DWARFAbbreviationDeclaration.cpp
DWARFAbbreviationDeclaration.h 15-20% speed improvement when parsing DWARF. I used instruments to 2010-09-15 08:33:30 +00:00
DWARFAttribute.h Fixed the header guards. 2011-09-12 04:20:38 +00:00
DWARFCompileUnit.cpp Cleaned up the lldb_private::Mangled class to get rid of the tokenizing code that has bit rotted and isn't being used. Also cleaned up the API to the "lldb_private::Mangled" to always take "const ConstString &" arguments instead of both "const ConstString &" and "const char *". 2012-07-18 23:18:10 +00:00
DWARFCompileUnit.h <rdar://problem/10681814> 2012-01-12 04:33:28 +00:00
DWARFDIECollection.cpp Fixed an issue where if a method funciton was asked to be parsed before 2010-10-01 20:48:32 +00:00
DWARFDIECollection.h Fixed the header guards. 2011-09-12 04:20:38 +00:00
DWARFDebugAbbrev.cpp Spelling changes applied from lldb_spelling.diffs from Bruce Mitchener. 2011-01-08 20:28:42 +00:00
DWARFDebugAbbrev.h Fixed the header guards. 2011-09-12 04:20:38 +00:00
DWARFDebugArangeSet.cpp
DWARFDebugArangeSet.h Since we use address ranges a lot I added a templatized class that allows us to easily control the base address type, the size type, and the data that is stored with each range. It is designed to be populated by appending all needed items, then sorting the resulting list, and optionally minimizing the list when done. I adopted this new list in the DWARFDebugAranges for even further memory savings. 2011-10-07 03:58:56 +00:00
DWARFDebugAranges.cpp Added more functionality to Range template classes in RangeMap.h and converted remaining DWARF areas that were using ranges over to this class. Also converted lldb_private::Block to use it. 2011-10-08 00:49:15 +00:00
DWARFDebugAranges.h Changed RangeMap over to use llvm::SmallVector and updated the RangeArray and the RangeDataArray to have an extra "unsigned N" template parameter. Updated the lldb_private::Block to use a RangeArray with a uint32_t for both the function base offset and block range size, and then a 1 for the small vector size since most lexical blocks in DWARF only have 1 range. Updates the DWARFDebugRanges RangeArray to use an unsigned of 2 since most blocks that have more than one range usually have 2. Also updated a DWARFDebugAranges to default their RangeArray to use a SmallVector with unsigned size of 1 since this will take care of the .o files when doing DWARF in .o files and since there really isn't any good size we can guess with. 2011-10-08 06:59:54 +00:00
DWARFDebugInfo.cpp <rdar://problem/11291668> 2012-04-24 21:22:41 +00:00
DWARFDebugInfo.h <rdar://problem/11291668> 2012-04-24 21:22:41 +00:00
DWARFDebugInfoEntry.cpp <rdar://problem/11740973> 2012-07-12 22:51:12 +00:00
DWARFDebugInfoEntry.h <rdar://problem/11291668> 2012-04-24 21:22:41 +00:00
DWARFDebugLine.cpp <rdar://problem/11072382> 2012-03-19 22:22:41 +00:00
DWARFDebugLine.h Small fixes: actually return a boolean and remove semi-colons. 2012-05-23 16:24:11 +00:00
DWARFDebugMacinfo.cpp
DWARFDebugMacinfo.h Fixed the header guards. 2011-09-12 04:20:38 +00:00
DWARFDebugMacinfoEntry.cpp Update declarations for all functions/methods that accept printf-style 2011-09-20 21:44:10 +00:00
DWARFDebugMacinfoEntry.h Fixed the header guards. 2011-09-12 04:20:38 +00:00
DWARFDebugPubnames.cpp Ran the static analyzer on the codebase and found a few things. 2012-07-17 03:23:13 +00:00
DWARFDebugPubnames.h Fixed the header guards. 2011-09-12 04:20:38 +00:00
DWARFDebugPubnamesSet.cpp
DWARFDebugPubnamesSet.h When compiling with C++11, switch from 2012-08-09 00:46:55 +00:00
DWARFDebugRanges.cpp Added more functionality to Range template classes in RangeMap.h and converted remaining DWARF areas that were using ranges over to this class. Also converted lldb_private::Block to use it. 2011-10-08 00:49:15 +00:00
DWARFDebugRanges.h Changed RangeMap over to use llvm::SmallVector and updated the RangeArray and the RangeDataArray to have an extra "unsigned N" template parameter. Updated the lldb_private::Block to use a RangeArray with a uint32_t for both the function base offset and block range size, and then a 1 for the small vector size since most lexical blocks in DWARF only have 1 range. Updates the DWARFDebugRanges RangeArray to use an unsigned of 2 since most blocks that have more than one range usually have 2. Also updated a DWARFDebugAranges to default their RangeArray to use a SmallVector with unsigned size of 1 since this will take care of the .o files when doing DWARF in .o files and since there really isn't any good size we can guess with. 2011-10-08 06:59:54 +00:00
DWARFDeclContext.cpp <rdar://problem/11291668> 2012-04-24 21:22:41 +00:00
DWARFDeclContext.h Improved the name comparing logic a bit. 2012-07-03 20:52:00 +00:00
DWARFDefines.cpp Did a lot of code cleanup. 2010-11-09 23:46:37 +00:00
DWARFDefines.h Fixed the header guards. 2011-09-12 04:20:38 +00:00
DWARFFormValue.cpp Ran the static analyzer on the codebase and found a few things. 2012-07-17 03:23:13 +00:00
DWARFFormValue.h Added a new class called lldb_private::SymbolFileType which is designed to 2011-12-08 02:13:16 +00:00
DWARFLocationDescription.cpp Fix a bunch of places where we were passing Stream *'s but were 2011-08-27 01:24:54 +00:00
DWARFLocationDescription.h Fixed the header guards. 2011-09-12 04:20:38 +00:00
DWARFLocationList.cpp Fixed an issue in the DWARFLocationList::Dump() function where default 2011-11-28 00:51:27 +00:00
DWARFLocationList.h Fixed the header guards. 2011-09-12 04:20:38 +00:00
HashedNameToDIE.h Fixed a problem where maintaining the ObjCInterfaceMap 2012-01-19 02:17:40 +00:00
LogChannelDWARF.cpp Added a mechanism for keeping track of where in 2012-04-13 00:10:03 +00:00
LogChannelDWARF.h Added a mechanism for keeping track of where in 2012-04-13 00:10:03 +00:00
Makefile Merged Eli Friedman's linux build changes where he added Makefile files that 2010-07-09 20:39:50 +00:00
NameToDIE.cpp Huge memory and performance improvements in the DWARF parser. 2011-09-12 23:21:58 +00:00
NameToDIE.h Huge memory and performance improvements in the DWARF parser. 2011-09-12 23:21:58 +00:00
SymbolFileDWARF.cpp <rdar://problem/11757916> 2012-08-29 21:13:06 +00:00
SymbolFileDWARF.h <rdar://problem/11757916> 2012-08-29 21:13:06 +00:00
SymbolFileDWARFDebugMap.cpp <rdar://problem/11757916> 2012-08-29 21:13:06 +00:00
SymbolFileDWARFDebugMap.h <rdar://problem/11757916> 2012-08-29 21:13:06 +00:00
UniqueDWARFASTType.cpp Fix segfault in UniqueDWARFASTTypeList::Find if we are comparing 2011-10-01 01:28:37 +00:00
UniqueDWARFASTType.h Added a fix that should help incorrect type uniquing. There was an issue 2011-03-15 04:38:20 +00:00