diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-10-03 08:54:43 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-10-03 08:54:43 +0000 |
commit | 9d08d69fd4562a4433cf19eb4b96c17b34f6da2e (patch) | |
tree | a9c8dcaca15ab59ba57c34be40e46edc10c4dd14 /lib/CodeGen/AsmPrinter/DwarfDebug.h | |
parent | 198f1b340a71b26f70849db86d72f7b79fd56d03 (diff) | |
download | llvm-9d08d69fd4562a4433cf19eb4b96c17b34f6da2e.tar.gz llvm-9d08d69fd4562a4433cf19eb4b96c17b34f6da2e.tar.bz2 llvm-9d08d69fd4562a4433cf19eb4b96c17b34f6da2e.tar.xz |
Remove wild .debug_aranges entries generated from unimportant labels
r191052 added emitting .debug_aranges to Clang, but this
functionality is broken: it uses all MC labels added in DWARF Asm
printer, including the labels for build relocations between
different DWARF sections, like .Lsection_line or .Ldebug_loc0.
As a result, if any DIE .debug_info would contain "DW_AT_location=0x123"
attribute, .debug_aranges would also contain a range starting from 0x123,
breaking tools that rely on this section.
This patch fixes this by using only MC labels that corresponds to the
addresses in the user program.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191884 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/AsmPrinter/DwarfDebug.h')
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfDebug.h | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index 7405fe12a9..423ff342ec 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -303,6 +303,7 @@ public: /// \brief Helper used to pair up a symbol and it's DWARF compile unit. struct SymbolCU { + SymbolCU(CompileUnit *CU, const MCSymbol *Sym) : Sym(Sym), CU(CU) {} const MCSymbol *Sym; CompileUnit *CU; }; @@ -363,8 +364,8 @@ class DwarfDebug { // separated by a zero byte, mapped to a unique id. StringMap<unsigned, BumpPtrAllocator&> SourceIdMap; - // List of all labels used in the output. - std::vector<SymbolCU> Labels; + // List of all labels used in aranges generation. + std::vector<SymbolCU> ArangeLabels; // Size of each symbol emitted (for those symbols that have a specific size). DenseMap <const MCSymbol *, uint64_t> SymSize; @@ -731,7 +732,7 @@ public: void addTypeUnitType(DIE *Die) { TypeUnits.push_back(Die); } /// \brief Add a label so that arange data can be generated for it. - void addLabel(SymbolCU SCU) { Labels.push_back(SCU); } + void addArangeLabel(SymbolCU SCU) { ArangeLabels.push_back(SCU); } /// \brief For symbols that have a size designated (e.g. common symbols), /// this tracks that size. |