blob: 9d503807b2054acf734004fa0490f120e187d951 [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 {
23 namespace PIC16Dbg {
24 enum VarType {
25 T_NULL,
26 T_VOID,
27 T_CHAR,
28 T_SHORT,
29 T_INT,
30 T_LONG,
31 T_FLOAT,
32 T_DOUBLE,
33 T_STRUCT,
34 T_UNION,
35 T_ENUM,
36 T_MOE,
37 T_UCHAR,
38 T_USHORT,
39 T_UINT,
40 T_ULONG
41 };
42 enum DerivedType {
43 DT_NONE,
44 DT_PTR,
45 DT_FCN,
46 DT_ARY
47 };
48 enum TypeSize {
49 S_BASIC = 5,
50 S_DERIVED = 3
51 };
52 enum DbgClass {
53 C_NULL,
54 C_AUTO,
55 C_EXT,
56 C_STAT,
57 C_REG,
58 C_EXTDEF,
59 C_LABEL,
60 C_ULABEL,
61 C_MOS,
62 C_ARG,
63 C_STRTAG,
64 C_MOU,
65 C_UNTAG,
66 C_TPDEF,
67 C_USTATIC,
68 C_ENTAG,
69 C_MOE,
70 C_REGPARM,
71 C_FIELD,
72 C_AUTOARG,
73 C_LASTENT,
74 C_BLOCK = 100,
75 C_FCN,
76 C_EOS,
77 C_FILE,
78 C_LINE,
79 C_ALIAS,
80 C_HIDDEN,
81 C_EOF,
82 C_LIST,
83 C_SECTION,
84 C_EFCN = 255
85 };
Sanjiv Guptadd4694b2009-05-28 18:24:11 +000086 enum SymbolSize {
87 AuxSize =20
88 };
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +000089 }
90
Sanjiv Guptadd4694b2009-05-28 18:24:11 +000091 class raw_ostream;
92
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +000093 class PIC16DbgInfo {
Sanjiv Guptadd4694b2009-05-28 18:24:11 +000094 raw_ostream &O;
95 const TargetAsmInfo *TAI;
Sanjiv Gupta3fc7e532009-06-03 16:27:49 +000096 std::string CurFile;
Sanjiv Guptadcb6da32009-06-13 17:35:54 +000097 // EmitDebugDirectives is set if debug information is available. Default
98 // value for it is false.
99 bool EmitDebugDirectives;
100 unsigned FunctBeginLine;
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +0000101 public:
Sanjiv Gupta3fc7e532009-06-03 16:27:49 +0000102 PIC16DbgInfo(raw_ostream &o, const TargetAsmInfo *T) : O(o), TAI(T) {
Sanjiv Guptadcb6da32009-06-13 17:35:54 +0000103 CurFile = "";
104 EmitDebugDirectives = false;
Sanjiv Gupta3fc7e532009-06-03 16:27:49 +0000105 }
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +0000106 void PopulateDebugInfo(DIType Ty, unsigned short &TypeNo, bool &HasAux,
107 int Aux[], std::string &TypeName);
108 unsigned GetTypeDebugNumber(std::string &type);
109 short getClass(DIGlobalVariable DIGV);
Sanjiv Guptadd4694b2009-05-28 18:24:11 +0000110 void EmitFunctBeginDI(const Function *F);
Sanjiv Guptadcb6da32009-06-13 17:35:54 +0000111 void Init(Module &M);
112 void EmitCompositeTypeDecls(Module &M);
Sanjiv Guptadd4694b2009-05-28 18:24:11 +0000113 void EmitFunctEndDI(const Function *F, unsigned Line);
Sanjiv Guptadcb6da32009-06-13 17:35:54 +0000114 void EmitAuxEntry(const std::string VarName, int Aux[],
115 int num = PIC16Dbg::AuxSize, std::string tag = "");
116 inline void EmitSymbol(std::string Name, short Class,
117 unsigned short Type = PIC16Dbg::T_NULL,
118 unsigned long Value = 0);
Sanjiv Guptadd4694b2009-05-28 18:24:11 +0000119 void EmitVarDebugInfo(Module &M);
120 void EmitFileDirective(Module &M);
Sanjiv Guptadcb6da32009-06-13 17:35:54 +0000121 void EmitFileDirective(GlobalVariable *CU, bool EmitEof = true);
Sanjiv Gupta3fc7e532009-06-03 16:27:49 +0000122 void EmitEOF();
Sanjiv Guptadcb6da32009-06-13 17:35:54 +0000123 void SetFunctBeginLine(unsigned line);
Sanjiv Guptaa57bc3b2009-05-22 13:58:45 +0000124 };
125} // end namespace llvm;
126#endif