blob: a46c06c1eab40486b2bb49a3af86f3b13cf32c89 [file] [log] [blame]
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +00001//===-- PIC16DebugInfo.h - Interfaces for PIC16 Debug Information ============//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file contains the helper functions for representing debug information.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef PIC16DBG_H
15#define PIC16DBG_H
16
Sanjiv Guptadd4694b2009-05-28 18:24:11 +000017#include "llvm/Analysis/DebugInfo.h"
18#include "llvm/Module.h"
19#include "llvm/Target/TargetAsmInfo.h"
20#include <map>
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +000021
22namespace llvm {
Sanjiv Guptabde79422009-06-16 09:45:18 +000023 class MachineFunction;
24 class DebugLoc;
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +000025 namespace PIC16Dbg {
26 enum VarType {
27 T_NULL,
28 T_VOID,
29 T_CHAR,
30 T_SHORT,
31 T_INT,
32 T_LONG,
33 T_FLOAT,
34 T_DOUBLE,
35 T_STRUCT,
36 T_UNION,
37 T_ENUM,
38 T_MOE,
39 T_UCHAR,
40 T_USHORT,
41 T_UINT,
42 T_ULONG
43 };
44 enum DerivedType {
45 DT_NONE,
46 DT_PTR,
47 DT_FCN,
48 DT_ARY
49 };
50 enum TypeSize {
51 S_BASIC = 5,
52 S_DERIVED = 3
53 };
54 enum DbgClass {
55 C_NULL,
56 C_AUTO,
57 C_EXT,
58 C_STAT,
59 C_REG,
60 C_EXTDEF,
61 C_LABEL,
62 C_ULABEL,
63 C_MOS,
64 C_ARG,
65 C_STRTAG,
66 C_MOU,
67 C_UNTAG,
68 C_TPDEF,
69 C_USTATIC,
70 C_ENTAG,
71 C_MOE,
72 C_REGPARM,
73 C_FIELD,
74 C_AUTOARG,
75 C_LASTENT,
76 C_BLOCK = 100,
77 C_FCN,
78 C_EOS,
79 C_FILE,
80 C_LINE,
81 C_ALIAS,
82 C_HIDDEN,
83 C_EOF,
84 C_LIST,
85 C_SECTION,
86 C_EFCN = 255
87 };
Sanjiv Guptadd4694b2009-05-28 18:24:11 +000088 enum SymbolSize {
89 AuxSize =20
90 };
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +000091 }
92
David Greene71847812009-07-14 20:18:05 +000093 class formatted_raw_ostream;
Sanjiv Guptadd4694b2009-05-28 18:24:11 +000094
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +000095 class PIC16DbgInfo {
David Greene71847812009-07-14 20:18:05 +000096 formatted_raw_ostream &O;
Sanjiv Guptadd4694b2009-05-28 18:24:11 +000097 const TargetAsmInfo *TAI;
Sanjiv Gupta3fc7e532009-06-03 16:27:49 +000098 std::string CurFile;
Sanjiv Guptabde79422009-06-16 09:45:18 +000099 unsigned CurLine;
100
Sanjiv Guptadcb6da32009-06-13 17:35:54 +0000101 // EmitDebugDirectives is set if debug information is available. Default
102 // value for it is false.
103 bool EmitDebugDirectives;
Sanjiv Guptabde79422009-06-16 09:45:18 +0000104
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +0000105 public:
David Greene71847812009-07-14 20:18:05 +0000106 PIC16DbgInfo(formatted_raw_ostream &o, const TargetAsmInfo *T)
107 : O(o), TAI(T) {
Sanjiv Guptabde79422009-06-16 09:45:18 +0000108 CurFile = "";
109 CurLine = 0;
Sanjiv Guptadcb6da32009-06-13 17:35:54 +0000110 EmitDebugDirectives = false;
Sanjiv Gupta3fc7e532009-06-03 16:27:49 +0000111 }
Sanjiv Guptabde79422009-06-16 09:45:18 +0000112
113 void BeginModule (Module &M);
114 void BeginFunction (const MachineFunction &MF);
115 void ChangeDebugLoc (const MachineFunction &MF, const DebugLoc &DL,
116 bool IsInBeginFunction = false);
117 void EndFunction (const MachineFunction &MF);
118 void EndModule (Module &M);
119
120
121 private:
122 void SwitchToCU (GlobalVariable *CU);
123 void SwitchToLine (unsigned Line, bool IsInBeginFunction = false);
124
125 void PopulateDebugInfo (DIType Ty, unsigned short &TypeNo, bool &HasAux,
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +0000126 int Aux[], std::string &TypeName);
Sanjiv Guptabde79422009-06-16 09:45:18 +0000127 void PopulateBasicTypeInfo (DIType Ty, unsigned short &TypeNo);
128 void PopulateDerivedTypeInfo (DIType Ty, unsigned short &TypeNo,
129 bool &HasAux, int Aux[],
130 std::string &TypeName);
131
132 void PopulateCompositeTypeInfo (DIType Ty, unsigned short &TypeNo,
133 bool &HasAux, int Aux[],
134 std::string &TypeName);
135 void PopulateArrayTypeInfo (DIType Ty, unsigned short &TypeNo,
136 bool &HasAux, int Aux[],
137 std::string &TypeName);
138
139 void PopulateStructOrUnionTypeInfo (DIType Ty, unsigned short &TypeNo,
140 bool &HasAux, int Aux[],
141 std::string &TypeName);
142 void PopulateEnumTypeInfo (DIType Ty, unsigned short &TypeNo);
143
144 unsigned GetTypeDebugNumber(std::string &Type);
145 short getStorageClass(DIGlobalVariable DIGV);
Sanjiv Guptadd4694b2009-05-28 18:24:11 +0000146 void EmitFunctBeginDI(const Function *F);
Sanjiv Guptadcb6da32009-06-13 17:35:54 +0000147 void EmitCompositeTypeDecls(Module &M);
Sanjiv Guptabfa79b82009-08-15 14:36:48 +0000148 void EmitCompositeTypeElements (DICompositeType CTy, std::string Suffix);
Sanjiv Guptadd4694b2009-05-28 18:24:11 +0000149 void EmitFunctEndDI(const Function *F, unsigned Line);
Sanjiv Guptadcb6da32009-06-13 17:35:54 +0000150 void EmitAuxEntry(const std::string VarName, int Aux[],
Sanjiv Guptabde79422009-06-16 09:45:18 +0000151 int num = PIC16Dbg::AuxSize, std::string TagName = "");
Sanjiv Guptadcb6da32009-06-13 17:35:54 +0000152 inline void EmitSymbol(std::string Name, short Class,
153 unsigned short Type = PIC16Dbg::T_NULL,
154 unsigned long Value = 0);
Sanjiv Guptadd4694b2009-05-28 18:24:11 +0000155 void EmitVarDebugInfo(Module &M);
Sanjiv Gupta3fc7e532009-06-03 16:27:49 +0000156 void EmitEOF();
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +0000157 };
158} // end namespace llvm;
159#endif