Use 'ao-dbg' instead of 's51' to communicate with TeleMetrum
[fw/sdcc] / src / SDCCdebug.c
1
2 #include "common.h"
3
4 extern DEBUGFILE cdbDebugFile;
5
6 DEBUGFILE *debugFile = &cdbDebugFile;
7
8 void outputDebugStackSymbols(void)
9 {
10   if(getenv("SDCC_DEBUG_VAR_STORAGE"))
11     {
12       dumpSymInfo("XStack", xstack);
13       dumpSymInfo("IStack", istack);
14     }
15
16   if(options.debug && debugFile)
17   {
18     symbol *sym;
19
20     if (xstack) {
21       for (sym = setFirstItem (xstack->syms); sym; sym = setNextItem (xstack->syms))
22         debugFile->writeSymbol(sym);
23     }
24
25     if (istack) {
26       for (sym = setFirstItem (istack->syms); sym; sym = setNextItem (istack->syms))
27         debugFile->writeSymbol(sym);
28     }
29   }
30
31 }
32
33
34 void outputDebugSymbols(void)
35 {
36   if(getenv("SDCC_DEBUG_VAR_STORAGE"))
37     {
38       dumpSymInfo("Code", code);
39       dumpSymInfo("Data", data);
40       dumpSymInfo("PData", pdata);
41       dumpSymInfo("XData", xdata);
42       dumpSymInfo("XIData", xidata);
43       dumpSymInfo("XInit", xinit);
44       dumpSymInfo("IData", idata);
45       dumpSymInfo("Bit", bit);
46       dumpSymInfo("Statics", statsg);
47       dumpSymInfo("SFR", sfr);
48       dumpSymInfo("SFRBits", sfrbit);
49       dumpSymInfo("Reg", reg);
50       dumpSymInfo("Generic", generic);
51       dumpSymInfo("Overlay", overlay);
52       dumpSymInfo("EEProm", eeprom);
53       dumpSymInfo("Home", home);
54     }
55
56   if(options.debug && debugFile)
57   {
58     symbol *sym;
59            
60     if (data) {
61       for (sym = setFirstItem (data->syms); sym; sym = setNextItem (data->syms))
62         debugFile->writeSymbol(sym);
63     }
64
65     if (idata) {
66       for (sym = setFirstItem (idata->syms); sym; sym = setNextItem (idata->syms))
67         debugFile->writeSymbol(sym);
68     }
69
70     if (bit) {
71       for (sym = setFirstItem (bit->syms); sym; sym = setNextItem (bit->syms))
72         debugFile->writeSymbol(sym);
73     }
74
75         if (pdata) {
76       for (sym = setFirstItem (pdata->syms); sym; sym = setNextItem (pdata->syms))
77         debugFile->writeSymbol(sym);
78     }
79
80     if (xdata) {
81       for (sym = setFirstItem (xdata->syms); sym; sym = setNextItem (xdata->syms))
82         debugFile->writeSymbol(sym);
83     }
84
85     if(port->genXINIT && xidata) {
86       for (sym = setFirstItem (xidata->syms); sym; sym = setNextItem (xidata->syms))
87         debugFile->writeSymbol(sym);        
88     }
89
90     if (sfr) {
91       for (sym = setFirstItem (sfr->syms); sym; sym = setNextItem (sfr->syms))
92         debugFile->writeSymbol(sym);
93     }
94
95     if (sfrbit) {
96       for (sym = setFirstItem (sfrbit->syms); sym; sym = setNextItem (sfrbit->syms))
97         debugFile->writeSymbol(sym);
98     }
99
100     if (home) {
101       for (sym = setFirstItem (home->syms); sym; sym = setNextItem (home->syms))
102         debugFile->writeSymbol(sym);
103     }
104
105     if (code) {
106       for (sym = setFirstItem (code->syms); sym; sym = setNextItem (code->syms))
107         debugFile->writeSymbol(sym);
108     }
109
110     if (statsg) {
111       for (sym = setFirstItem (statsg->syms); sym; sym = setNextItem (statsg->syms))
112         debugFile->writeSymbol(sym);
113     }
114
115     if(port->genXINIT && xinit) {
116       for (sym = setFirstItem (xinit->syms); sym; sym = setNextItem (xinit->syms))
117         debugFile->writeSymbol(sym);        
118     }
119   }
120
121   return;
122 }
123
124
125 void dumpSymInfo(char *pcName, memmap *memItem)
126 {
127   symbol *sym;
128
129   if (!memItem)
130     return;
131
132   printf("--------------------------------------------\n");
133   printf(" %s\n", pcName);
134
135   for(sym = setFirstItem(memItem->syms); 
136       sym;       sym = setNextItem(memItem->syms))
137     {          
138       printf("   %s, isReqv:%d, reqv:0x%p, onStack:%d, Stack:%d, nRegs:%d, [", 
139              sym->rname, sym->isreqv, sym->reqv, sym->onStack, sym->stack, sym->nRegs);
140
141       if(sym->reqv)
142       { 
143           int i;
144           symbol *TempSym = OP_SYMBOL (sym->reqv);
145          
146           for (i = 0; i < 4; i++)           
147             if(TempSym->regs[i])
148               printf("%s,", port->getRegName(TempSym->regs[i]));               
149       }
150           
151       printf("]\n");
152     }
153
154   printf("\n");
155 }
156
157
158 /*------------------------------------------------------------------*/
159 /* emitDebuggerSymbol - call the port specific routine to associate */
160 /* the current code location with a debugger symbol                 */
161 /*------------------------------------------------------------------*/
162 void
163 emitDebuggerSymbol (char * debugSym)
164 {
165   if (port->debugger.emitDebuggerSymbol)
166     port->debugger.emitDebuggerSymbol (debugSym);
167 }