|  | //===-- PIC16DebugInfo.h - Interfaces for PIC16 Debug Information ============// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // This file contains the helper functions for representing debug information. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef PIC16DBG_H | 
|  | #define PIC16DBG_H | 
|  |  | 
|  | #include "llvm/Analysis/DebugInfo.h" | 
|  | #include "llvm/Module.h" | 
|  |  | 
|  | namespace llvm { | 
|  | class MachineFunction; | 
|  | class DebugLoc; | 
|  | namespace PIC16Dbg { | 
|  | enum VarType { | 
|  | T_NULL, | 
|  | T_VOID, | 
|  | T_CHAR, | 
|  | T_SHORT, | 
|  | T_INT, | 
|  | T_LONG, | 
|  | T_FLOAT, | 
|  | T_DOUBLE, | 
|  | T_STRUCT, | 
|  | T_UNION, | 
|  | T_ENUM, | 
|  | T_MOE, | 
|  | T_UCHAR, | 
|  | T_USHORT, | 
|  | T_UINT, | 
|  | T_ULONG | 
|  | }; | 
|  | enum DerivedType { | 
|  | DT_NONE, | 
|  | DT_PTR, | 
|  | DT_FCN, | 
|  | DT_ARY | 
|  | }; | 
|  | enum TypeSize { | 
|  | S_BASIC = 5, | 
|  | S_DERIVED = 3 | 
|  | }; | 
|  | enum DbgClass { | 
|  | C_NULL, | 
|  | C_AUTO, | 
|  | C_EXT, | 
|  | C_STAT, | 
|  | C_REG, | 
|  | C_EXTDEF, | 
|  | C_LABEL, | 
|  | C_ULABEL, | 
|  | C_MOS, | 
|  | C_ARG, | 
|  | C_STRTAG, | 
|  | C_MOU, | 
|  | C_UNTAG, | 
|  | C_TPDEF, | 
|  | C_USTATIC, | 
|  | C_ENTAG, | 
|  | C_MOE, | 
|  | C_REGPARM, | 
|  | C_FIELD, | 
|  | C_AUTOARG, | 
|  | C_LASTENT, | 
|  | C_BLOCK = 100, | 
|  | C_FCN, | 
|  | C_EOS, | 
|  | C_FILE, | 
|  | C_LINE, | 
|  | C_ALIAS, | 
|  | C_HIDDEN, | 
|  | C_EOF, | 
|  | C_LIST, | 
|  | C_SECTION, | 
|  | C_EFCN = 255 | 
|  | }; | 
|  | enum SymbolSize { | 
|  | AuxSize =20 | 
|  | }; | 
|  | } | 
|  |  | 
|  | class formatted_raw_ostream; | 
|  |  | 
|  | class PIC16DbgInfo { | 
|  | formatted_raw_ostream &O; | 
|  | const MCAsmInfo *MAI; | 
|  | std::string CurFile; | 
|  | unsigned CurLine; | 
|  |  | 
|  | // EmitDebugDirectives is set if debug information is available. Default | 
|  | // value for it is false. | 
|  | bool EmitDebugDirectives; | 
|  |  | 
|  | public: | 
|  | PIC16DbgInfo(formatted_raw_ostream &o, const MCAsmInfo *T) | 
|  | : O(o), MAI(T) { | 
|  | CurFile = ""; | 
|  | CurLine = 0; | 
|  | EmitDebugDirectives = false; | 
|  | } | 
|  |  | 
|  | void BeginModule (Module &M); | 
|  | void BeginFunction (const MachineFunction &MF); | 
|  | void ChangeDebugLoc (const MachineFunction &MF, const DebugLoc &DL, | 
|  | bool IsInBeginFunction = false); | 
|  | void EndFunction (const MachineFunction &MF); | 
|  | void EndModule (Module &M); | 
|  |  | 
|  |  | 
|  | private: | 
|  | void SwitchToCU (MDNode *CU); | 
|  | void SwitchToLine (unsigned Line, bool IsInBeginFunction = false); | 
|  |  | 
|  | void PopulateDebugInfo (DIType Ty, unsigned short &TypeNo, bool &HasAux, | 
|  | int Aux[], std::string &TypeName); | 
|  | void PopulateBasicTypeInfo (DIType Ty, unsigned short &TypeNo); | 
|  | void PopulateDerivedTypeInfo (DIType Ty, unsigned short &TypeNo, | 
|  | bool &HasAux, int Aux[], | 
|  | std::string &TypeName); | 
|  |  | 
|  | void PopulateCompositeTypeInfo (DIType Ty, unsigned short &TypeNo, | 
|  | bool &HasAux, int Aux[], | 
|  | std::string &TypeName); | 
|  | void PopulateArrayTypeInfo (DIType Ty, unsigned short &TypeNo, | 
|  | bool &HasAux, int Aux[], | 
|  | std::string &TypeName); | 
|  |  | 
|  | void PopulateStructOrUnionTypeInfo (DIType Ty, unsigned short &TypeNo, | 
|  | bool &HasAux, int Aux[], | 
|  | std::string &TypeName); | 
|  | void PopulateEnumTypeInfo (DIType Ty, unsigned short &TypeNo); | 
|  |  | 
|  | unsigned GetTypeDebugNumber(std::string &Type); | 
|  | short getStorageClass(DIGlobalVariable DIGV); | 
|  | void EmitFunctBeginDI(const Function *F); | 
|  | void EmitCompositeTypeDecls(Module &M); | 
|  | void EmitCompositeTypeElements (DICompositeType CTy, std::string Suffix); | 
|  | void EmitFunctEndDI(const Function *F, unsigned Line); | 
|  | void EmitAuxEntry(const std::string VarName, int Aux[], | 
|  | int num = PIC16Dbg::AuxSize, std::string TagName = ""); | 
|  | inline void EmitSymbol(std::string Name, short Class, | 
|  | unsigned short Type = PIC16Dbg::T_NULL, | 
|  | unsigned long Value = 0); | 
|  | void EmitVarDebugInfo(Module &M); | 
|  | void EmitEOF(); | 
|  | }; | 
|  | } // end namespace llvm; | 
|  | #endif |