Get debugger working
[fw/sdcc] / debugger / mcs51 / break.c
index fe412946ed06e74a3f9318c16ea543709fbdb633..75f5b72a74677dc52bd2b9ee60284ae58d689661 100644 (file)
 #include "sdcdb.h"
 #include "symtab.h"
 #include "break.h"
+#include "newalloc.h"
 
 static hTab *bptable = NULL;
 char userBpPresent = 0;
 /* call stack can be 1024 deep */
 STACK_DCL(callStack,function *,1024);
 
+#ifdef SDCDB_DEBUG
+char *debug_bp_type_strings[] =
+    {"ERR-0",
+     "DATA",
+    "CODE"    ,
+    "A_CODE"  ,
+    "USER"    ,
+    "STEP"    ,
+    "NEXT"    ,
+    "FENTRY"  ,
+    "FEXIT", "", ""};
+#endif
+
 /*-----------------------------------------------------------------*/
 /* setBreakPoint - creates an entry in the break point table       */
 /*-----------------------------------------------------------------*/
@@ -41,8 +55,14 @@ int setBreakPoint (unsigned addr, char addrType, char bpType,
     static long bpnum = 0;
     char simbuf[50];
 
+    Dprintf(D_break, ("setBreakPoint: addr:%x atype:%s bpType:%s [%s:%d]\n",
+        addr,
+        debug_bp_type_strings[addrType],
+        debug_bp_type_strings[bpType],
+        fileName, lineno));
+
     /* allocate & init a new bp */
-    Safe_calloc(1,bp,sizeof(breakp));
+    bp = Safe_calloc(1,sizeof(breakp));
     bp->addr = addr;
     bp->addrType = addrType;
     bp->bpType = bpType;
@@ -90,6 +110,7 @@ void deleteSTEPbp ()
     breakp *bp;
     int k;
 
+    Dprintf(D_break, ("Deleting all STEP BPs\n"));
     /* for break points delete if they are STEP */
     for ( bp = hTabFirstItem(bptable,&k); bp ;
     bp = hTabNextItem(bptable,&k)) {
@@ -118,6 +139,8 @@ void deleteNEXTbp ()
     int k;
     char simcmd[50];
 
+    Dprintf(D_break, ("Deleting all NEXT BPs\n"));
+
     /* for break points delete if they are NEXT */
     for ( bp = hTabFirstItem(bptable,&k); bp ;
     bp = hTabNextItem(bptable,&k)) {
@@ -148,6 +171,8 @@ void deleteUSERbp (int bpnum)
     int k;
     char simcmd[50];
 
+    Dprintf(D_break, ("deleteUSERbp %d\n", bpnum));
+
     /* for break points delete if they are STEP */
     for ( bp = hTabFirstItem(bptable,&k); bp ;
     bp = hTabNextItem(bptable,&k)) {
@@ -162,6 +187,7 @@ void deleteUSERbp (int bpnum)
          send command to simulator to delete bp from this addr */
       if (hTabSearch(bptable,bp->addr) == NULL) {
     simClearBP (bp->addr);
+    Dprintf(D_break, ("deleteUSERbp:simClearBP 0x%x\n", bp->addr));
 
       }
       fprintf(stdout,"Deleted breakpoint %d\n",
@@ -255,6 +281,8 @@ int dispatchCB (unsigned addr, context *ctxt)
     breakp *bp;
     int rv =0;
 
+    Dprintf(D_break, ("dispatchCB: addr:0x%x \n", addr));
+
     /* if no break points set for this address
        then use a simulator stop break point */
     if ((bp = hTabFirstItemWK(bptable,addr)) == NULL) {
@@ -269,6 +297,10 @@ int dispatchCB (unsigned addr, context *ctxt)
 
     }
 
+    if (rv == 0) {
+      Dprintf(D_break, ("dispatchCB: WARNING rv==0\n", rv));
+    }
+
     return rv;
 }
 
@@ -277,6 +309,8 @@ int dispatchCB (unsigned addr, context *ctxt)
 /*-----------------------------------------------------------------*/
 BP_CALLBACK(fentryCB)
 {
+    Dprintf(D_break, ("fentryCB: BP_CALLBACK entry\n"));
+
     /* add the current function into the call stack */
     STACK_PUSH(callStack,ctxt->func);
 
@@ -292,6 +326,8 @@ BP_CALLBACK(fentryCB)
 /*-----------------------------------------------------------------*/
 BP_CALLBACK(fexitCB)
 {
+    Dprintf(D_break, ("fexitCB: BP_CALLBACK entry\n"));
+
     /* pop the top most from the call stack */
     STACK_POP(callStack);
     return 0;
@@ -301,6 +337,8 @@ BP_CALLBACK(fexitCB)
 /*-----------------------------------------------------------------*/
 BP_CALLBACK(userBpCB)
 {
+    Dprintf(D_break, ("userBpCB: BP_CALLBACK entry\n"));
+
     if (srcMode == SRC_CMODE) {
   fprintf(stdout,"Breakpoint %d, %s() at %s:%d\n",
     bpnum,
@@ -331,6 +369,8 @@ BP_CALLBACK(stepBpCB)
 {
     static function *lfunc = NULL;
 
+    Dprintf(D_break, ("stepBpCB: BP_CALLBACK entry\n"));
+
     if (srcMode == SRC_CMODE) {
   if ((lfunc && lfunc != ctxt->func) || !lfunc)
       fprintf(stdout,"%s () at %s:%d\n",
@@ -367,6 +407,8 @@ BP_CALLBACK(nextBpCB)
 {
     static function *lfunc = NULL;
 
+    Dprintf(D_break, ("nextBpCB: BP_CALLBACK entry\n"));
+
     if (srcMode == SRC_CMODE) {
   if ((lfunc && lfunc != ctxt->func) || !lfunc)
       fprintf(stdout,"%s () at %s:%d\n",