mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-05 01:56:16 +00:00
de4845c163
representation. This eliminates the 'DILocation' MDNodes for file/line/col tuples from -O0 -g codegen. This remove the old DebugLoc class, making it a typedef for DebugLoc, I'll rename NewDebugLoc next. I didn't update the JIT to use the new apis, so it will continue to work, but be as slow as before. Someone should eventually do this or, better yet, rip out the JIT debug info stuff and build the JIT on top of MC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100209 91177308-0d34-0410-b5e6-96231b3b80d8
158 lines
4.3 KiB
C++
158 lines
4.3 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 NewDebugLoc; typedef NewDebugLoc 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
|