From 101613e9034675a9530df1a8d980149a844d6719 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Wed, 12 Feb 2014 00:11:25 +0000 Subject: [PATCH] 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. llvm-svn: 201195 --- llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 69 ++++++++----------------------- llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h | 2 + 2 files changed, 20 insertions(+), 51 deletions(-) diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 89bb7fb..99348bc 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/llvm/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/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h index 3f42e2f..ba3db6d 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/llvm/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); -- 2.7.4