mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	Use MDNodes to encode debug info in llvm IR. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80406 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			158 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-- 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
 |