* device/include/pic16/pic18f*.h: add bit aliases in INTCONbits_t
[fw/sdcc] / src / SDCCdebug.c
index ee9c2115d97c05225a2be26aaecaef3bdd9c32b7..cbf4234889b66bc66bc927a27022cba05b6cf2a9 100644 (file)
@@ -17,11 +17,15 @@ void outputDebugStackSymbols(void)
   {
     symbol *sym;
 
-    for (sym = setFirstItem (xstack->syms); sym; sym = setNextItem (xstack->syms))
-      debugFile->writeSymbol(sym);
+    if (xstack) {
+      for (sym = setFirstItem (xstack->syms); sym; sym = setNextItem (xstack->syms))
+        debugFile->writeSymbol(sym);
+    }
 
-    for (sym = setFirstItem (istack->syms); sym; sym = setNextItem (istack->syms))
-      debugFile->writeSymbol(sym);
+    if (istack) {
+      for (sym = setFirstItem (istack->syms); sym; sym = setNextItem (istack->syms))
+        debugFile->writeSymbol(sym);
+    }
   }
 
 }
@@ -33,6 +37,7 @@ void outputDebugSymbols(void)
     {
       dumpSymInfo("Code", code);
       dumpSymInfo("Data", data);
+      dumpSymInfo("PData", pdata);
       dumpSymInfo("XData", xdata);
       dumpSymInfo("XIData", xidata);
       dumpSymInfo("XInit", xinit);
@@ -52,39 +57,62 @@ void outputDebugSymbols(void)
   {
     symbol *sym;
            
-    for (sym = setFirstItem (data->syms); sym; sym = setNextItem (data->syms))
-      debugFile->writeSymbol(sym);        
+    if (data) {
+      for (sym = setFirstItem (data->syms); sym; sym = setNextItem (data->syms))
+        debugFile->writeSymbol(sym);
+    }
 
-    for (sym = setFirstItem (idata->syms); sym; sym = setNextItem (idata->syms))
-      debugFile->writeSymbol(sym);        
+    if (idata) {
+      for (sym = setFirstItem (idata->syms); sym; sym = setNextItem (idata->syms))
+        debugFile->writeSymbol(sym);
+    }
 
-    for (sym = setFirstItem (bit->syms); sym; sym = setNextItem (bit->syms))
-      debugFile->writeSymbol(sym);        
+    if (bit) {
+      for (sym = setFirstItem (bit->syms); sym; sym = setNextItem (bit->syms))
+        debugFile->writeSymbol(sym);
+    }
 
-    for (sym = setFirstItem (xdata->syms); sym; sym = setNextItem (xdata->syms))
-      debugFile->writeSymbol(sym);        
+       if (pdata) {
+      for (sym = setFirstItem (pdata->syms); sym; sym = setNextItem (pdata->syms))
+        debugFile->writeSymbol(sym);
+    }
+
+    if (xdata) {
+      for (sym = setFirstItem (xdata->syms); sym; sym = setNextItem (xdata->syms))
+        debugFile->writeSymbol(sym);
+    }
 
-    if(port->genXINIT) {
+    if(port->genXINIT && xidata) {
       for (sym = setFirstItem (xidata->syms); sym; sym = setNextItem (xidata->syms))
        debugFile->writeSymbol(sym);        
     }
 
-    for (sym = setFirstItem (sfr->syms); sym; sym = setNextItem (sfr->syms))
-      debugFile->writeSymbol(sym);        
+    if (sfr) {
+      for (sym = setFirstItem (sfr->syms); sym; sym = setNextItem (sfr->syms))
+        debugFile->writeSymbol(sym);
+    }
 
-    for (sym = setFirstItem (sfrbit->syms); sym; sym = setNextItem (sfrbit->syms))
-      debugFile->writeSymbol(sym);        
+    if (sfrbit) {
+      for (sym = setFirstItem (sfrbit->syms); sym; sym = setNextItem (sfrbit->syms))
+        debugFile->writeSymbol(sym);
+    }
 
-    for (sym = setFirstItem (home->syms); sym; sym = setNextItem (home->syms))
-      debugFile->writeSymbol(sym);        
+    if (home) {
+      for (sym = setFirstItem (home->syms); sym; sym = setNextItem (home->syms))
+        debugFile->writeSymbol(sym);
+    }
 
-    for (sym = setFirstItem (code->syms); sym; sym = setNextItem (code->syms))
-      debugFile->writeSymbol(sym);        
+    if (code) {
+      for (sym = setFirstItem (code->syms); sym; sym = setNextItem (code->syms))
+        debugFile->writeSymbol(sym);
+    }
 
-    for (sym = setFirstItem (statsg->syms); sym; sym = setNextItem (statsg->syms))
-      debugFile->writeSymbol(sym);        
+    if (statsg) {
+      for (sym = setFirstItem (statsg->syms); sym; sym = setNextItem (statsg->syms))
+        debugFile->writeSymbol(sym);
+    }
 
-    if(port->genXINIT) {
+    if(port->genXINIT && xinit) {
       for (sym = setFirstItem (xinit->syms); sym; sym = setNextItem (xinit->syms))
        debugFile->writeSymbol(sym);        
     }
@@ -98,6 +126,9 @@ void dumpSymInfo(char *pcName, memmap *memItem)
 {
   symbol *sym;
 
+  if (!memItem)
+    return;
+
   printf("--------------------------------------------\n");
   printf(" %s\n", pcName);
 
@@ -124,5 +155,13 @@ void dumpSymInfo(char *pcName, memmap *memItem)
 }
 
 
-
-
+/*------------------------------------------------------------------*/
+/* emitDebuggerSymbol - call the port specific routine to associate */
+/* the current code location with a debugger symbol                 */
+/*------------------------------------------------------------------*/
+void
+emitDebuggerSymbol (char * debugSym)
+{
+  if (port->debugger.emitDebuggerSymbol)
+    port->debugger.emitDebuggerSymbol (debugSym);
+}