[DebugInfo] Generate DWARF debug information for labels. (Fix leak problems)
authorHsiangkai Wang <hsiangkai@gmail.com>
Fri, 17 Aug 2018 15:22:04 +0000 (15:22 +0000)
committerHsiangkai Wang <hsiangkai@gmail.com>
Fri, 17 Aug 2018 15:22:04 +0000 (15:22 +0000)
commit2532ac880a3fec0b3282d18a00d54d27b1d5cb5a
treef4b054c10dc682bf27abf22bab3bd9cbae6d0856
parent5cd630d3411c884a1459f29ffc42283dbfb909b6
[DebugInfo] Generate DWARF debug information for labels. (Fix leak problems)

There are two forms for label debug information in DWARF format.

1. Labels in a non-inlined function:

DW_TAG_label
  DW_AT_name
  DW_AT_decl_file
  DW_AT_decl_line
  DW_AT_low_pc

2. Labels in an inlined function:

DW_TAG_label
  DW_AT_abstract_origin
  DW_AT_low_pc

We will collect label information from DBG_LABEL. Before every DBG_LABEL,
we will generate a temporary symbol to denote the location of the label.
The symbol could be used to get DW_AT_low_pc afterwards. So, we create a
mapping between 'inlined label' and DBG_LABEL MachineInstr in DebugHandlerBase.
The DBG_LABEL in the mapping is used to query the symbol before it.

The AbstractLabels in DwarfCompileUnit is used to process labels in inlined
functions.

We also keep a mapping between scope and labels in DwarfFile to help to
generate correct tree structure of DIEs.

It also generates label debug information under global isel.

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

llvm-svn: 340039
21 files changed:
llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt
llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h
llvm/lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp [new file with mode: 0644]
llvm/lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.h [new file with mode: 0644]
llvm/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp [deleted file]
llvm/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h [deleted file]
llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp
llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.h
llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h
llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h
llvm/lib/CodeGen/AsmPrinter/DwarfFile.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfFile.h
llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h
llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
llvm/test/DebugInfo/Generic/debug-label-inline.ll [new file with mode: 0644]
llvm/test/DebugInfo/Generic/debug-label.ll [new file with mode: 0644]