Changes in directory llvm/include/llvm/CodeGen:
DwarfWriter.h updated: 1.41 -> 1.42 --- Log message: Simplify DwarfWriter header. --- Diffs of the changes: (+6 -357) DwarfWriter.h | 363 ---------------------------------------------------------- 1 files changed, 6 insertions(+), 357 deletions(-) Index: llvm/include/llvm/CodeGen/DwarfWriter.h diff -u llvm/include/llvm/CodeGen/DwarfWriter.h:1.41 llvm/include/llvm/CodeGen/DwarfWriter.h:1.42 --- llvm/include/llvm/CodeGen/DwarfWriter.h:1.41 Tue Oct 17 17:06:46 2006 +++ llvm/include/llvm/CodeGen/DwarfWriter.h Mon Oct 30 07:35:06 2006 @@ -20,380 +20,32 @@ #ifndef LLVM_CODEGEN_DWARFWRITER_H #define LLVM_CODEGEN_DWARFWRITER_H -#include "llvm/ADT/UniqueVector.h" -#include "llvm/Support/DataTypes.h" - -#include <iosfwd> -#include <string> - +#include <iostream> namespace llvm { -// Forward declarations. - class AsmPrinter; -class CompileUnit; -class CompileUnitDesc; -class DebugInfoDesc; -class DebugVariable; -class DebugScope; -class DIE; -class DIEAbbrev; -class GlobalVariableDesc; +class Dwarf; class MachineDebugInfo; class MachineFunction; -class MachineLocation; -class MachineMove; class Module; -class MRegisterInfo; -class SubprogramDesc; -class SourceLineInfo; class TargetAsmInfo; -class TargetData; -class Type; -class TypeDesc; - -//===----------------------------------------------------------------------===// -// DWLabel - Labels are used to track locations in the assembler file. -// Labels appear in the form <prefix>debug_<Tag><Number>, where the tag is a -// category of label (Ex. location) and number is a value unique in that -// category. -class DWLabel { -public: - const char *Tag; // Label category tag. Should always be - // a staticly declared C string. - unsigned Number; // Unique number. - - DWLabel(const char *T, unsigned N) : Tag(T), Number(N) {} -}; //===----------------------------------------------------------------------===// // DwarfWriter - Emits Dwarf debug and exception handling directives. // -class DwarfWriter { - -private: - - //===--------------------------------------------------------------------===// - // Core attributes used by the Dwarf writer. - // - - // - /// O - Stream to .s file. - /// - std::ostream &O; - - /// Asm - Target of Dwarf emission. - /// - AsmPrinter *Asm; - - /// TAI - Target Asm Printer. - const TargetAsmInfo *TAI; - - /// TD - Target data. - const TargetData *TD; - - /// RI - Register Information. - const MRegisterInfo *RI; - - /// M - Current module. - /// - Module *M; - - /// MF - Current machine function. - /// - MachineFunction *MF; - - /// DebugInfo - Collected debug information. - /// - MachineDebugInfo *DebugInfo; - - /// didInitial - Flag to indicate if initial emission has been done. - /// - bool didInitial; - - /// shouldEmit - Flag to indicate if debug information should be emitted. - /// - bool shouldEmit; - - /// SubprogramCount - The running count of functions being compiled. - /// - unsigned SubprogramCount; - - //===--------------------------------------------------------------------===// - // Attributes used to construct specific Dwarf sections. - // - - /// CompileUnits - All the compile units involved in this build. The index - /// of each entry in this vector corresponds to the sources in DebugInfo. - std::vector<CompileUnit *> CompileUnits; - - /// Abbreviations - A UniqueVector of TAG structure abbreviations. - /// - UniqueVector<DIEAbbrev> Abbreviations; - - /// StringPool - A UniqueVector of strings used by indirect references. - /// UnitMap - Map debug information descriptor to compile unit. - /// - UniqueVector<std::string> StringPool; - - /// UnitMap - Map debug information descriptor to compile unit. - /// - std::map<DebugInfoDesc *, CompileUnit *> DescToUnitMap; - - /// DescToDieMap - Tracks the mapping of top level debug informaton - /// descriptors to debug information entries. - std::map<DebugInfoDesc *, DIE *> DescToDieMap; - - /// SectionMap - Provides a unique id per text section. - /// - UniqueVector<std::string> SectionMap; - - /// SectionSourceLines - Tracks line numbers per text section. - /// - std::vector<std::vector<SourceLineInfo> > SectionSourceLines; - -public: - - //===--------------------------------------------------------------------===// - // Emission and print routines - // - - /// PrintHex - Print a value as a hexidecimal value. - /// - void PrintHex(int Value) const; - - /// EOL - Print a newline character to asm stream. If a comment is present - /// then it will be printed first. Comments should not contain '\n'. - void EOL(const std::string &Comment) const; - - /// EmitAlign - Print a align directive. - /// - void EmitAlign(unsigned Alignment) const; - - /// EmitULEB128Bytes - Emit an assembler byte data directive to compose an - /// unsigned leb128 value. - void EmitULEB128Bytes(unsigned Value) const; - - /// EmitSLEB128Bytes - print an assembler byte data directive to compose a - /// signed leb128 value. - void EmitSLEB128Bytes(int Value) const; - - /// PrintULEB128 - Print a series of hexidecimal values (separated by - /// commas) representing an unsigned leb128 value. - void PrintULEB128(unsigned Value) const; - - /// SizeULEB128 - Compute the number of bytes required for an unsigned - /// leb128 value. - static unsigned SizeULEB128(unsigned Value); - - /// PrintSLEB128 - Print a series of hexidecimal values (separated by - /// commas) representing a signed leb128 value. - void PrintSLEB128(int Value) const; - - /// SizeSLEB128 - Compute the number of bytes required for a signed leb128 - /// value. - static unsigned SizeSLEB128(int Value); - - /// EmitInt8 - Emit a byte directive and value. - /// - void EmitInt8(int Value) const; - - /// EmitInt16 - Emit a short directive and value. - /// - void EmitInt16(int Value) const; - - /// EmitInt32 - Emit a long directive and value. - /// - void EmitInt32(int Value) const; - - /// EmitInt64 - Emit a long long directive and value. - /// - void EmitInt64(uint64_t Value) const; - - /// EmitString - Emit a string with quotes and a null terminator. - /// Special characters are emitted properly. - /// \literal (Eg. '\t') \endliteral - void EmitString(const std::string &String) const; - - /// PrintLabelName - Print label name in form used by Dwarf writer. - /// - void PrintLabelName(DWLabel Label) const { - PrintLabelName(Label.Tag, Label.Number); - } - void PrintLabelName(const char *Tag, unsigned Number) const; - - /// EmitLabel - Emit location label for internal use by Dwarf. - /// - void EmitLabel(DWLabel Label) const { - EmitLabel(Label.Tag, Label.Number); - } - void EmitLabel(const char *Tag, unsigned Number) const; - - /// EmitReference - Emit a reference to a label. - /// - void EmitReference(DWLabel Label) const { - EmitReference(Label.Tag, Label.Number); - } - void EmitReference(const char *Tag, unsigned Number) const; - void EmitReference(const std::string &Name) const; - - /// EmitDifference - Emit the difference between two labels. Some - /// assemblers do not behave with absolute expressions with data directives, - /// so there is an option (needsSet) to use an intermediary set expression. - void EmitDifference(DWLabel LabelHi, DWLabel LabelLo) const { - EmitDifference(LabelHi.Tag, LabelHi.Number, LabelLo.Tag, LabelLo.Number); - } - void EmitDifference(const char *TagHi, unsigned NumberHi, - const char *TagLo, unsigned NumberLo) const; - - /// NewAbbreviation - Add the abbreviation to the Abbreviation vector. - /// - unsigned NewAbbreviation(DIEAbbrev *Abbrev); - - /// NewString - Add a string to the constant pool and returns a label. - /// - DWLabel NewString(const std::string &String); - - /// getDieMapSlotFor - Returns the debug information entry map slot for the - /// specified debug descriptor. - DIE *&getDieMapSlotFor(DebugInfoDesc *DD); - +class DwarfWriter { private: - - /// AddSourceLine - Add location information to specified debug information - /// entry. - void AddSourceLine(DIE *Die, CompileUnitDesc *File, unsigned Line); - - /// AddAddress - Add an address attribute to a die based on the location - /// provided. - void AddAddress(DIE *Die, unsigned Attribute, - const MachineLocation &Location); - - /// NewType - Create a new type DIE. - /// - DIE *NewType(DIE *Context, TypeDesc *TyDesc, CompileUnit *Unit); - - /// NewCompileUnit - Create new compile unit and it's die. + /// DM - Provides the DwarfWriter implementation. /// - CompileUnit *NewCompileUnit(CompileUnitDesc *UnitDesc, unsigned ID); + Dwarf *DW; - /// FindCompileUnit - Get the compile unit for the given descriptor. - /// - CompileUnit *FindCompileUnit(CompileUnitDesc *UnitDesc); - - /// NewGlobalVariable - Make a new global variable DIE. - /// - DIE *NewGlobalVariable(GlobalVariableDesc *GVD); - - /// NewSubprogram - Add a new subprogram DIE. - /// - DIE *NewSubprogram(SubprogramDesc *SPD); - - /// NewScopeVariable - Create a new scope variable. - /// - DIE *NewScopeVariable(DebugVariable *DV, CompileUnit *Unit); - - /// ConstructScope - Construct the components of a scope. - /// - void ConstructScope(DebugScope *ParentScope, DIE *ParentDie, - CompileUnit *Unit); - - /// ConstructRootScope - Construct the scope for the subprogram. - /// - void ConstructRootScope(DebugScope *RootScope); - - /// EmitInitial - Emit initial Dwarf declarations. - /// - void EmitInitial(); - - /// EmitDIE - Recusively Emits a debug information entry. - /// - void EmitDIE(DIE *Die) const; - - /// SizeAndOffsetDie - Compute the size and offset of a DIE. - /// - unsigned SizeAndOffsetDie(DIE *Die, unsigned Offset, bool Last); - - /// SizeAndOffsets - Compute the size and offset of all the DIEs. - /// - void SizeAndOffsets(); - - /// EmitFrameMoves - Emit frame instructions to describe the layout of the - /// frame. - void EmitFrameMoves(const char *BaseLabel, unsigned BaseLabelID, - std::vector<MachineMove *> &Moves); - - /// EmitDebugInfo - Emit the debug info section. - /// - void EmitDebugInfo() const; - - /// EmitAbbreviations - Emit the abbreviation section. - /// - void EmitAbbreviations() const; - - /// EmitDebugLines - Emit source line information. - /// - void EmitDebugLines() const; - - /// EmitInitialDebugFrame - Emit common frame info into a debug frame section. - /// - void EmitInitialDebugFrame(); - - /// EmitFunctionDebugFrame - Emit per function frame info into a debug frame - /// section. - void EmitFunctionDebugFrame(); - - /// EmitDebugPubNames - Emit info into a debug pubnames section. - /// - void EmitDebugPubNames(); - - /// EmitDebugStr - Emit info into a debug str section. - /// - void EmitDebugStr(); - - /// EmitDebugLoc - Emit info into a debug loc section. - /// - void EmitDebugLoc(); - - /// EmitDebugARanges - Emit info into a debug aranges section. - /// - void EmitDebugARanges(); - - /// EmitDebugRanges - Emit info into a debug ranges section. - /// - void EmitDebugRanges(); - - /// EmitDebugMacInfo - Emit info into a debug macinfo section. - /// - void EmitDebugMacInfo(); - - /// ConstructCompileUnitDIEs - Create a compile unit DIE for each source and - /// header file. - void ConstructCompileUnitDIEs(); - - /// ConstructGlobalDIEs - Create DIEs for each of the externally visible - /// global variables. - void ConstructGlobalDIEs(); - - /// ConstructSubprogramDIEs - Create DIEs for each of the externally visible - /// subprograms. - void ConstructSubprogramDIEs(); - - /// ShouldEmitDwarf - Returns true if Dwarf declarations should be made. - /// - bool ShouldEmitDwarf() const { return shouldEmit; } - public: DwarfWriter(std::ostream &OS, AsmPrinter *A, const TargetAsmInfo *T); virtual ~DwarfWriter(); - // Accessors. - // - const TargetAsmInfo *getTargetAsmInfo() const { return TAI; } - /// SetDebugInfo - Set DebugInfo when it's known that pass manager has /// created it. Set by the target AsmPrinter. void SetDebugInfo(MachineDebugInfo *DI); @@ -417,12 +69,9 @@ /// EndFunction - Gather and emit post-function debug information. /// void EndFunction(); - - /// NonFunction - Function does not have a true body. - /// - void NonFunction(); }; + } // end llvm namespace #endif _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits