llvm-project/llvm/tools/dsymutil
Greg Clayton 6f6e4dbd5d Improve DWARF parsing speed by improving DWARFAbbreviationDeclaration
This patch gets a DWARF parsing speed improvement by having DWARFAbbreviationDeclaration instances know if they have a fixed byte size. If an abbreviation has a fixed byte size that can be calculated given a DWARFUnit, then parsing a DIE becomes two steps: parse ULEB128 abbrev code, and then add constant size to the offset.

This patch also adds a fixed byte size to each DWARFAbbreviationDeclaration::AttributeSpec so that attributes can quickly skip their values if needed without the need to lookup the fixed for size.

Notable improvements:

- DWARFAbbreviationDeclaration::findAttributeIndex() now returns an Optional<uint32_t> instead of a uint32_t and we no longer have to look for the magic -1U return value
- Optional<uint32_t> DWARFAbbreviationDeclaration::findAttributeIndex(dwarf::Attribute attr) const;
- DWARFAbbreviationDeclaration now has a getAttributeValue() function that extracts an attribute value given a DIE offset that takes advantage of the DWARFAbbreviationDeclaration::AttributeSpec::ByteSize
- bool DWARFAbbreviationDeclaration::getAttributeValue(const uint32_t DIEOffset, const dwarf::Attribute Attr, const DWARFUnit &U, DWARFFormValue &FormValue) const;
- A DWARFAbbreviationDeclaration instance can return a fixed byte size for itself so DWARF parsing is faster:
- Optional<size_t> DWARFAbbreviationDeclaration::getFixedAttributesByteSize(const DWARFUnit &U) const;
- Any functions that used to take a "const DWARFUnit *U" that would crash if U was NULL now take a "const DWARFUnit &U" and are only called with a valid DWARFUnit

Differential Revision: https://reviews.llvm.org/D26567

llvm-svn: 286924
2016-11-15 01:23:06 +00:00
..
BinaryHolder.cpp Make the Error class constructor protected 2016-11-11 04:28:40 +00:00
BinaryHolder.h [dsymutil] Replace TimeValue with TimePoint 2016-11-09 11:43:52 +00:00
CMakeLists.txt [dsymutil] Implement support for handling mach-o universal binaries as main input/output. 2015-08-05 18:27:44 +00:00
DebugMap.cpp [dsymutil] Replace TimeValue with TimePoint 2016-11-09 11:43:52 +00:00
DebugMap.h [dsymutil] Replace TimeValue with TimePoint 2016-11-09 11:43:52 +00:00
DwarfLinker.cpp Improve DWARF parsing speed by improving DWARFAbbreviationDeclaration 2016-11-15 01:23:06 +00:00
LLVMBuild.txt [dsymutil] Add the DwarfStreamer class. 2015-02-28 00:29:11 +00:00
MachODebugMapParser.cpp [dsymutil] Replace TimeValue with TimePoint 2016-11-09 11:43:52 +00:00
MachOUtils.cpp Change that to include MCMachObjectWriter.h 2016-06-22 23:30:43 +00:00
MachOUtils.h [dsymutil] Try to find lipo first besides dsymutil before looking up the PATH. 2015-10-08 22:35:53 +00:00
NonRelocatableStringpool.h One more batch of self-containing headers. 2016-01-27 19:29:56 +00:00
dsymutil.cpp Search for llvm-symbolizer binary in the same directory as argv[0], before 2016-06-09 00:53:21 +00:00
dsymutil.h dsymutil: Fix a comment. [-Wdocumentation] 2015-09-23 00:19:20 +00:00