OSDN Git Service

[DebugInfo] Generate DWARF debug information for labels.
authorShiva Chen <shiva0217@gmail.com>
Tue, 24 Jul 2018 02:22:55 +0000 (02:22 +0000)
committerShiva Chen <shiva0217@gmail.com>
Tue, 24 Jul 2018 02:22:55 +0000 (02:22 +0000)
commitb454fa1b4079b6c0a5b1565982d16516385838d7
treeaaff911ea3e32926b091e935919f1d6dee404924
parent6779fccada2c280bdfe9d542aa837a7bfb434ea9
[DebugInfo] Generate DWARF debug information for labels.

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.

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

Patch by Hsiangkai Wang.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337799 91177308-0d34-0410-b5e6-96231b3b80d8
18 files changed:
include/llvm/IR/InstVisitor.h
include/llvm/IR/IntrinsicInst.h
lib/CodeGen/AsmPrinter/CMakeLists.txt
lib/CodeGen/AsmPrinter/CodeViewDebug.h
lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp [moved from lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp with 81% similarity]
lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.h [moved from lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h with 68% similarity]
lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp
lib/CodeGen/AsmPrinter/DebugHandlerBase.h
lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
lib/CodeGen/AsmPrinter/DwarfCompileUnit.h
lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h
lib/CodeGen/AsmPrinter/DwarfFile.cpp
lib/CodeGen/AsmPrinter/DwarfFile.h
lib/CodeGen/AsmPrinter/DwarfUnit.cpp
lib/CodeGen/AsmPrinter/DwarfUnit.h
test/DebugInfo/Generic/debug-label-inline.ll [new file with mode: 0644]
test/DebugInfo/Generic/debug-label.ll [new file with mode: 0644]