X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCdebug.c;h=cbf4234889b66bc66bc927a27022cba05b6cf2a9;hb=e87e91ad968cd9944a6710554cd96ca8cf586c89;hp=ee9c2115d97c05225a2be26aaecaef3bdd9c32b7;hpb=c7f4a6fa7318f4495c4c68870600eede23249868;p=fw%2Fsdcc diff --git a/src/SDCCdebug.c b/src/SDCCdebug.c index ee9c2115..cbf42348 100644 --- a/src/SDCCdebug.c +++ b/src/SDCCdebug.c @@ -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); +}