* src/SDCCdebug.c (outputDebugSymbols, outputDebugStackSymbols, dumpSymInfo):
[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("XData", xdata);
41       dumpSymInfo("XIData", xidata);
42       dumpSymInfo("XInit", xinit);
43       dumpSymInfo("IData", idata);
44       dumpSymInfo("Bit", bit);
45       dumpSymInfo("Statics", statsg);
46       dumpSymInfo("SFR", sfr);
47       dumpSymInfo("SFRBits", sfrbit);
48       dumpSymInfo("Reg", reg);
49       dumpSymInfo("Generic", generic);
50       dumpSymInfo("Overlay", overlay);
51       dumpSymInfo("EEProm", eeprom);
52       dumpSymInfo("Home", home);
53     }
54
55   if(options.debug && debugFile)
56   {
57     symbol *sym;
58            
59     if (data) {
60       for (sym = setFirstItem (data->syms); sym; sym = setNextItem (data->syms))
61         debugFile->writeSymbol(sym);
62     }
63
64     if (idata) {
65       for (sym = setFirstItem (idata->syms); sym; sym = setNextItem (idata->syms))
66         debugFile->writeSymbol(sym);
67     }
68
69     if (bit) {
70       for (sym = setFirstItem (bit->syms); sym; sym = setNextItem (bit->syms))
71         debugFile->writeSymbol(sym);
72     }
73
74     if (xdata) {
75       for (sym = setFirstItem (xdata->syms); sym; sym = setNextItem (xdata->syms))
76         debugFile->writeSymbol(sym);
77     }
78
79     if(port->genXINIT && xidata) {
80       for (sym = setFirstItem (xidata->syms); sym; sym = setNextItem (xidata->syms))
81         debugFile->writeSymbol(sym);        
82     }
83
84     if (sfr) {
85       for (sym = setFirstItem (sfr->syms); sym; sym = setNextItem (sfr->syms))
86         debugFile->writeSymbol(sym);
87     }
88
89     if (sfrbit) {
90       for (sym = setFirstItem (sfrbit->syms); sym; sym = setNextItem (sfrbit->syms))
91         debugFile->writeSymbol(sym);
92     }
93
94     if (home) {
95       for (sym = setFirstItem (home->syms); sym; sym = setNextItem (home->syms))
96         debugFile->writeSymbol(sym);
97     }
98
99     if (code) {
100       for (sym = setFirstItem (code->syms); sym; sym = setNextItem (code->syms))
101         debugFile->writeSymbol(sym);
102     }
103
104     if (statsg) {
105       for (sym = setFirstItem (statsg->syms); sym; sym = setNextItem (statsg->syms))
106         debugFile->writeSymbol(sym);
107     }
108
109     if(port->genXINIT && xinit) {
110       for (sym = setFirstItem (xinit->syms); sym; sym = setNextItem (xinit->syms))
111         debugFile->writeSymbol(sym);        
112     }
113   }
114
115   return;
116 }
117
118
119 void dumpSymInfo(char *pcName, memmap *memItem)
120 {
121   symbol *sym;
122
123   if (!memItem)
124     return;
125
126   printf("--------------------------------------------\n");
127   printf(" %s\n", pcName);
128
129   for(sym = setFirstItem(memItem->syms); 
130       sym;       sym = setNextItem(memItem->syms))
131     {          
132       printf("   %s, isReqv:%d, reqv:0x%p, onStack:%d, Stack:%d, nRegs:%d, [", 
133              sym->rname, sym->isreqv, sym->reqv, sym->onStack, sym->stack, sym->nRegs);
134
135       if(sym->reqv)
136       { 
137           int i;
138           symbol *TempSym = OP_SYMBOL (sym->reqv);
139          
140           for (i = 0; i < 4; i++)           
141             if(TempSym->regs[i])
142               printf("%s,", port->getRegName(TempSym->regs[i]));               
143       }
144           
145       printf("]\n");
146     }
147
148   printf("\n");
149 }
150
151
152
153