summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
diff options
context:
space:
mode:
authorHsiangkai Wang <hsiangkai@gmail.com>2018-08-17 15:22:04 +0000
committerHsiangkai Wang <hsiangkai@gmail.com>2018-08-17 15:22:04 +0000
commit2532ac880a3fec0b3282d18a00d54d27b1d5cb5a (patch)
treef4b054c10dc682bf27abf22bab3bd9cbae6d0856 /llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
parent5cd630d3411c884a1459f29ffc42283dbfb909b6 (diff)
downloadbcm5719-llvm-2532ac880a3fec0b3282d18a00d54d27b1d5cb5a.tar.gz
bcm5719-llvm-2532ac880a3fec0b3282d18a00d54d27b1d5cb5a.zip
[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
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
index 7335a0bb17e..295d42fb16c 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
@@ -409,6 +409,12 @@ void DwarfUnit::addSourceLine(DIE &Die, const DISubprogram *SP) {
addSourceLine(Die, SP->getLine(), SP->getFile());
}
+void DwarfUnit::addSourceLine(DIE &Die, const DILabel *L) {
+ assert(L);
+
+ addSourceLine(Die, L->getLine(), L->getFile());
+}
+
void DwarfUnit::addSourceLine(DIE &Die, const DIType *Ty) {
assert(Ty);
OpenPOWER on IntegriCloud