mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +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
 |