summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h
diff options
context:
space:
mode:
authorHsiangkai Wang <hsiangkai@gmail.com>2018-07-31 14:48:32 +0000
committerHsiangkai Wang <hsiangkai@gmail.com>2018-07-31 14:48:32 +0000
commitcbc58ada99c2d0f9a0cf8e23354d663f05c40f75 (patch)
tree1720d6145a26ecba5ac5a76a10f17108b4b31578 /llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h
parentab79414f7b29c8a82eebcc6daf055c8251641558 (diff)
downloadbcm5719-llvm-cbc58ada99c2d0f9a0cf8e23354d663f05c40f75.tar.gz
bcm5719-llvm-cbc58ada99c2d0f9a0cf8e23354d663f05c40f75.zip
[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. It also generates label debug information under global isel. Differential Revision: https://reviews.llvm.org/D45556 llvm-svn: 338390
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h23
1 files changed, 13 insertions, 10 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h
index 51e1558fe4a..ab67c43f6f2 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h
@@ -14,7 +14,7 @@
#ifndef LLVM_LIB_CODEGEN_ASMPRINTER_DWARFCOMPILEUNIT_H
#define LLVM_LIB_CODEGEN_ASMPRINTER_DWARFCOMPILEUNIT_H
-#include "DbgValueHistoryCalculator.h"
+#include "DbgEntityHistoryCalculator.h"
#include "DwarfDebug.h"
#include "DwarfUnit.h"
#include "llvm/ADT/ArrayRef.h"
@@ -81,7 +81,7 @@ class DwarfCompileUnit final : public DwarfUnit {
const MCSymbol *BaseAddress = nullptr;
DenseMap<const MDNode *, DIE *> AbstractSPDies;
- DenseMap<const MDNode *, std::unique_ptr<DbgVariable>> AbstractVariables;
+ DenseMap<const DINode *, std::unique_ptr<DbgEntity>> AbstractEntities;
/// DWO ID for correlating skeleton and split units.
uint64_t DWOId = 0;
@@ -98,10 +98,10 @@ class DwarfCompileUnit final : public DwarfUnit {
return DU->getAbstractSPDies();
}
- DenseMap<const MDNode *, std::unique_ptr<DbgVariable>> &getAbstractVariables() {
+ DenseMap<const DINode *, std::unique_ptr<DbgEntity>> &getAbstractEntities() {
if (isDwoUnit() && !DD->shareAcrossDWOCUs())
- return AbstractVariables;
- return DU->getAbstractVariables();
+ return AbstractEntities;
+ return DU->getAbstractEntities();
}
public:
@@ -194,6 +194,9 @@ public:
DIE *constructVariableDIE(DbgVariable &DV, const LexicalScope &Scope,
DIE *&ObjectPointer);
+ /// Construct a DIE for the given DbgLabel.
+ DIE *constructLabelDIE(DbgLabel &DL, const LexicalScope &Scope);
+
/// A helper function to create children of a Scope DIE.
DIE *createScopeChildrenDIE(LexicalScope *Scope,
SmallVectorImpl<DIE *> &Children,
@@ -210,14 +213,12 @@ public:
DIE *constructImportedEntityDIE(const DIImportedEntity *Module);
void finishSubprogramDefinition(const DISubprogram *SP);
- void finishVariableDefinition(const DbgVariable &Var);
+ void finishEntityDefinition(const DbgEntity *Entity);
/// Find abstract variable associated with Var.
using InlinedVariable = DbgValueHistoryMap::InlinedVariable;
- DbgVariable *getExistingAbstractVariable(InlinedVariable IV,
- const DILocalVariable *&Cleansed);
- DbgVariable *getExistingAbstractVariable(InlinedVariable IV);
- void createAbstractVariable(const DILocalVariable *Var, LexicalScope *Scope);
+ DbgEntity *getExistingAbstractEntity(const DINode *Node);
+ void createAbstractEntity(const DINode *Node, LexicalScope *Scope);
/// Set the skeleton unit associated with this unit.
void setSkeleton(DwarfCompileUnit &Skel) { Skeleton = &Skel; }
@@ -288,6 +289,8 @@ public:
void applySubprogramAttributesToDefinition(const DISubprogram *SP,
DIE &SPDie);
+ void applyLabelAttributes(const DbgLabel &Label, DIE &LabelDie);
+
/// getRangeLists - Get the vector of range lists.
const SmallVectorImpl<RangeSpanList> &getRangeLists() const {
return (Skeleton ? Skeleton : this)->CURangeLists;
OpenPOWER on IntegriCloud