The subprogram descriptor for a function may be missing (llvm-ld linking two static...
[oota-llvm.git] / lib / Target / PIC16 / PIC16DebugInfo.h
1 //===-- 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
17 #include "llvm/Analysis/DebugInfo.h"
18 #include "llvm/Module.h"
19 #include "llvm/Target/TargetAsmInfo.h" 
20 #include <map>
21
22 namespace 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     };
86     enum SymbolSize {
87       AuxSize =20
88     };
89   }
90
91   class raw_ostream;
92
93   class PIC16DbgInfo {
94     raw_ostream &O;
95     const TargetAsmInfo *TAI;
96     std::string CurFile;
97     // EmitDebugDirectives is set if debug information is available. Default
98     // value for it is false.
99     bool EmitDebugDirectives;
100     unsigned FunctBeginLine;
101   public:
102     PIC16DbgInfo(raw_ostream &o, const TargetAsmInfo *T) : O(o), TAI(T) {
103       CurFile = ""; 
104       EmitDebugDirectives = false; 
105     }
106     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);
110     void EmitFunctBeginDI(const Function *F);
111     void Init(Module &M);
112     void EmitCompositeTypeDecls(Module &M);
113     void EmitFunctEndDI(const Function *F, unsigned Line);
114     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);
119     void EmitVarDebugInfo(Module &M);
120     void EmitFileDirective(Module &M);
121     void EmitFileDirective(GlobalVariable *CU, bool EmitEof = true);
122     void EmitEOF();
123     void SetFunctBeginLine(unsigned line);
124   };
125 } // end namespace llvm;
126 #endif