Martins changes for ddd
[fw/sdcc] / debugger / mcs51 / symtab.c
index b35e2d150a36e33d578132a22e620958f686c4bb..6d12e577917c745c4f436218e2e5060975cb7574 100644 (file)
@@ -734,14 +734,28 @@ static void lnkCSrc (char *s)
 
     line--;
     /* one line can have more than one address : (for loops !)*/
-    if (line < mod->ncLines && line > 0 &&
+    if (line < mod->ncLines && line > 0 /*&&
         ( !mod->cLines[line]->addr ||
-           mod->cLines[line]->level > level )) {
-  mod->cLines[line]->addr = addr;
-  mod->cLines[line]->block = block;
-  mod->cLines[line]->level = level;
-  Dprintf(D_symtab, ("symtab: ccc %s(%d:0x%x) %s",mod->c_name,
-         line+1,addr,mod->cLines[line]->src));
+        mod->cLines[line]->level > level )*/ ) 
+    {
+        if ( mod->cLines[line]->addr )
+        {
+            /* save double line information for exepoints */
+            exePoint *ep ;
+            ep = Safe_calloc(1,sizeof(exePoint));
+            ep->addr =  mod->cLines[line]->addr ;
+            ep->line = line;
+            ep->block= mod->cLines[line]->block;
+            ep->level= mod->cLines[line]->level;
+            addSet(&mod->cfpoints,ep);
+            Dprintf(D_symtab, ("symtab: exe %s(%d:0x%x) %s",mod->c_name,
+                           line+1,addr,mod->cLines[line]->src));
+        }
+        mod->cLines[line]->addr = addr;
+        mod->cLines[line]->block = block;
+        mod->cLines[line]->level = level;
+        Dprintf(D_symtab, ("symtab: ccc %s(%d:0x%x) %s",mod->c_name,
+                           line+1,addr,mod->cLines[line]->src));
     }
     return;