summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2014-02-12 00:11:25 +0000
committerDavid Blaikie <dblaikie@gmail.com>2014-02-12 00:11:25 +0000
commita22a1bb8c1f8a3a829d2a6bb1fbbfd7c2fd8e099 (patch)
tree38342ebecb1b874ae22ff8e2b7045bfee0c13048
parent19cfb96184c31e00203ba186b75777f010230a42 (diff)
downloadllvm-a22a1bb8c1f8a3a829d2a6bb1fbbfd7c2fd8e099.tar.gz
llvm-a22a1bb8c1f8a3a829d2a6bb1fbbfd7c2fd8e099.tar.bz2
llvm-a22a1bb8c1f8a3a829d2a6bb1fbbfd7c2fd8e099.tar.xz
DwarfUnit: Refactor DW_AT_file creation into a common function.
This is preliminary work to fix type unit file strings so they appear in their originating CU's line table - but it's also just good/simple cleanup, so I'm committing it ahead of time. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201195 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfUnit.cpp69
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfUnit.h2
2 files changed, 20 insertions, 51 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
index 89bb7fbf81..99348bc01e 100644
--- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
@@ -355,15 +355,12 @@ void DwarfUnit::addBlock(DIE *Die, dwarf::Attribute Attribute,
/// addSourceLine - Add location information to specified debug information
/// entry.
-void DwarfUnit::addSourceLine(DIE *Die, DIVariable V) {
- assert(V.isVariable());
-
- unsigned Line = V.getLineNumber();
+void DwarfUnit::addSourceLine(DIE *Die, unsigned Line, StringRef File,
+ StringRef Directory) {
if (Line == 0)
return;
- unsigned FileID =
- DD->getOrCreateSourceID(V.getContext().getFilename(),
- V.getContext().getDirectory(), getUniqueID());
+
+ unsigned FileID = DD->getOrCreateSourceID(File, Directory, getUniqueID());
assert(FileID && "Invalid file id");
addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
@@ -371,17 +368,18 @@ void DwarfUnit::addSourceLine(DIE *Die, DIVariable V) {
/// addSourceLine - Add location information to specified debug information
/// entry.
+void DwarfUnit::addSourceLine(DIE *Die, DIVariable V) {
+ assert(V.isVariable());
+
+ addSourceLine(Die, V.getLineNumber(), V.getContext().getFilename(), V.getContext().getDirectory());
+}
+
+/// addSourceLine - Add location information to specified debug information
+/// entry.
void DwarfUnit::addSourceLine(DIE *Die, DIGlobalVariable G) {
assert(G.isGlobalVariable());
- unsigned Line = G.getLineNumber();
- if (Line == 0)
- return;
- unsigned FileID =
- DD->getOrCreateSourceID(G.getFilename(), G.getDirectory(), getUniqueID());
- assert(FileID && "Invalid file id");
- addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
- addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
+ addSourceLine(Die, G.getLineNumber(), G.getFilename(), G.getDirectory());
}
/// addSourceLine - Add location information to specified debug information
@@ -389,16 +387,7 @@ void DwarfUnit::addSourceLine(DIE *Die, DIGlobalVariable G) {
void DwarfUnit::addSourceLine(DIE *Die, DISubprogram SP) {
assert(SP.isSubprogram());
- // If the line number is 0, don't add it.
- unsigned Line = SP.getLineNumber();
- if (Line == 0)
- return;
-
- unsigned FileID = DD->getOrCreateSourceID(SP.getFilename(), SP.getDirectory(),
- getUniqueID());
- assert(FileID && "Invalid file id");
- addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
- addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
+ addSourceLine(Die, SP.getLineNumber(), SP.getFilename(), SP.getDirectory());
}
/// addSourceLine - Add location information to specified debug information
@@ -406,14 +395,7 @@ void DwarfUnit::addSourceLine(DIE *Die, DISubprogram SP) {
void DwarfUnit::addSourceLine(DIE *Die, DIType Ty) {
assert(Ty.isType());
- unsigned Line = Ty.getLineNumber();
- if (Line == 0)
- return;
- unsigned FileID = DD->getOrCreateSourceID(Ty.getFilename(), Ty.getDirectory(),
- getUniqueID());
- assert(FileID && "Invalid file id");
- addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
- addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
+ addSourceLine(Die, Ty.getLineNumber(), Ty.getFilename(), Ty.getDirectory());
}
/// addSourceLine - Add location information to specified debug information
@@ -421,15 +403,9 @@ void DwarfUnit::addSourceLine(DIE *Die, DIType Ty) {
void DwarfUnit::addSourceLine(DIE *Die, DIObjCProperty Ty) {
assert(Ty.isObjCProperty());
- unsigned Line = Ty.getLineNumber();
- if (Line == 0)
- return;
DIFile File = Ty.getFile();
- unsigned FileID = DD->getOrCreateSourceID(File.getFilename(),
- File.getDirectory(), getUniqueID());
- assert(FileID && "Invalid file id");
- addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
- addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
+ addSourceLine(Die, Ty.getLineNumber(), File.getFilename(),
+ File.getDirectory());
}
/// addSourceLine - Add location information to specified debug information
@@ -437,16 +413,7 @@ void DwarfUnit::addSourceLine(DIE *Die, DIObjCProperty Ty) {
void DwarfUnit::addSourceLine(DIE *Die, DINameSpace NS) {
assert(NS.Verify());
- unsigned Line = NS.getLineNumber();
- if (Line == 0)
- return;
- StringRef FN = NS.getFilename();
-
- unsigned FileID =
- DD->getOrCreateSourceID(FN, NS.getDirectory(), getUniqueID());
- assert(FileID && "Invalid file id");
- addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
- addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
+ addSourceLine(Die, NS.getLineNumber(), NS.getFilename(), NS.getDirectory());
}
/// addVariableAddress - Add DW_AT_location attribute for a
diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.h b/lib/CodeGen/AsmPrinter/DwarfUnit.h
index 3f42e2f672..ba3db6d637 100644
--- a/lib/CodeGen/AsmPrinter/DwarfUnit.h
+++ b/lib/CodeGen/AsmPrinter/DwarfUnit.h
@@ -361,6 +361,8 @@ public:
/// addSourceLine - Add location information to specified debug information
/// entry.
+ void addSourceLine(DIE *Die, unsigned Line, StringRef File,
+ StringRef Directory);
void addSourceLine(DIE *Die, DIVariable V);
void addSourceLine(DIE *Die, DIGlobalVariable G);
void addSourceLine(DIE *Die, DISubprogram SP);