diff --git a/llvm/include/llvm/Analysis/DebugInfo.h b/llvm/include/llvm/Analysis/DebugInfo.h index f4783c022a4a..7c6b421ca35c 100644 --- a/llvm/include/llvm/Analysis/DebugInfo.h +++ b/llvm/include/llvm/Analysis/DebugInfo.h @@ -471,8 +471,24 @@ namespace llvm { const std::string &getDirectory(std::string &D) const { return getContext().getDirectory(D); } + }; + /// DILocation - This object holds location information. This object + /// is not associated with any DWARF tag. + class DILocation : public DIDescriptor { + public: + explicit DILocation(MDNode *L) { DbgNode = L; } + unsigned getLineNumber() const { return getUnsignedField(0); } + unsigned getColumnNumber() const { return getUnsignedField(1); } + DIScope getScope() const { return getFieldAs(3); } + DILocation getOrigLocation() const { return getFieldAs(4); } + std::string getFilename(std::string &F) const { + return getScope().getFilename(F); + } + std::string getDirectory(std::string &D) const { + return getScope().getDirectory(D); + } }; /// DIFactory - This object assists with the construction of the various @@ -575,6 +591,10 @@ namespace llvm { /// with the specified parent context. DILexicalBlock CreateLexicalBlock(DIDescriptor Context); + /// CreateLocation - Creates a debug info location. + DILocation CreateLocation(unsigned LineNo, unsigned ColumnNo, + DIScope S, DILocation OrigLoc); + /// InsertStopPoint - Create a new llvm.dbg.stoppoint intrinsic invocation, /// inserting it at the end of the specified basic block. void InsertStopPoint(DICompileUnit CU, unsigned LineNo, unsigned ColNo, diff --git a/llvm/lib/Analysis/DebugInfo.cpp b/llvm/lib/Analysis/DebugInfo.cpp index 0be6fcfec526..d09704f30392 100644 --- a/llvm/lib/Analysis/DebugInfo.cpp +++ b/llvm/lib/Analysis/DebugInfo.cpp @@ -791,6 +791,18 @@ DILexicalBlock DIFactory::CreateLexicalBlock(DIDescriptor Context) { return DILexicalBlock(MDNode::get(VMContext, &Elts[0], 2)); } +/// CreateLocation - Creates a debug info location. +DILocation DIFactory::CreateLocation(unsigned LineNo, unsigned ColumnNo, + DIScope S, DILocation OrigLoc) { + Value *Elts[] = { + ConstantInt::get(Type::getInt32Ty(VMContext), LineNo), + ConstantInt::get(Type::getInt32Ty(VMContext), ColumnNo), + S.getNode(), + OrigLoc.getNode(), + }; + return DILocation(MDNode::get(VMContext, &Elts[0], 4)); +} + //===----------------------------------------------------------------------===// // DIFactory: Routines for inserting code into a function