From: Devang Patel Date: Thu, 8 Jan 2009 17:19:22 +0000 (+0000) Subject: Add DebugInfo based APIs to record source line info. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=9f8fcfc0184cdf7154f6e57b0b7edca9abca7eca;p=oota-llvm.git Add DebugInfo based APIs to record source line info. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61928 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp index c1360a94328..16d1531a47f 100644 --- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp @@ -1165,6 +1165,26 @@ public: }; +//===----------------------------------------------------------------------===// +/// SourceLineInfo - This class is used to record source line correspondence. +/// +class SrcLineInfo { + unsigned Line; // Source line number. + unsigned Column; // Source column. + unsigned SourceID; // Source ID number. + unsigned LabelID; // Label in code ID number. +public: + SrcLineInfo(unsigned L, unsigned C, unsigned S, unsigned I) + : Line(L), Column(C), SourceID(S), LabelID(I) {} + + // Accessors + unsigned getLine() const { return Line; } + unsigned getColumn() const { return Column; } + unsigned getSourceID() const { return SourceID; } + unsigned getLabelID() const { return LabelID; } +}; + + //===----------------------------------------------------------------------===// /// SrcFileInfo - This class is used to track source information. /// @@ -1259,7 +1279,7 @@ private: /// CompileUnits - All the compile units involved in this build. The index /// of each entry in this vector corresponds to the sources in MMI. std::vector CompileUnits; - DenseMap DW_CUs; + DenseMap DW_CUs; /// AbbreviationsSet - Used to uniquely define abbreviations. /// @@ -1277,6 +1297,9 @@ private: // SourceFiles - Uniquing vector for source files. UniqueVector SrcFiles; + // Lines - List of of source line correspondence. + std::vector Lines; + FoldingSet ValuesSet; /// Values - A list of all the unique values in use. @@ -2539,6 +2562,23 @@ private: return VariableDie; } + unsigned RecordSourceLine(Value *V, unsigned Line, unsigned Col) { + CompileUnit *Unit = DW_CUs[V]; + assert (Unit && "Unable to find CompileUnit"); + unsigned ID = NextLabelID(); + Lines.push_back(SrcLineInfo(Line, Col, Unit->getID(), ID)); + return ID; + } + + unsigned getRecordSourceLineCount() { + return Lines.size(); + } + + unsigned RecordSource(const std::string &Directory, + const std::string &File) { + unsigned DID = Directories.insert(Directory); + return SrcFiles.insert(SrcFileInfo(DID,File)); + } /// RecordRegionStart - Indicate the start of a region. /// @@ -3447,9 +3487,8 @@ private: for (std::vector::iterator RI = Result.begin(), RE = Result.end(); RI != RE; ++RI) { DICompileUnit *DIUnit = new DICompileUnit(*RI); - unsigned DID = Directories.insert(DIUnit->getDirectory()); - unsigned ID = SrcFiles.insert(SrcFileInfo(DID, - DIUnit->getFilename())); + unsigned ID = RecordSource(DIUnit->getDirectory(), + DIUnit->getFilename()); DIE *Die = new DIE(DW_TAG_compile_unit); AddSectionOffset(Die, DW_AT_stmt_list, DW_FORM_data4,