/*-----------------------------------------------------------------*/
static void setBPatModLine (module *mod, int line, char bpType )
{
- int next_line;
+ int next_line;
/* look for the first executable line after the line
- specified & get the break point there */
+ specified & get the break point there */
+
+ if ( line < 0 )
+ return;
+
if (srcMode == SRC_CMODE && line > mod->ncLines) {
- fprintf(stderr,"No line %d in file \"%s\".\n",
- line,mod->c_name);
- return ;
+ fprintf(stderr,"No line %d in file \"%s\".\n",
+ line,mod->c_name);
+ return ;
}
if (srcMode == SRC_AMODE && line > mod->nasmLines) {
- fprintf(stderr,"No line %d in file \"%s\".\n",
- line,mod->asm_name);
- return ;
+ fprintf(stderr,"No line %d in file \"%s\".\n",
+ line,mod->asm_name);
+ return ;
}
next_line = line;
for ( ; next_line < (srcMode == SRC_CMODE ? mod->ncLines : mod->nasmLines ) ;
next_line++ ) {
if (srcMode == SRC_CMODE) {
- if (mod->cLines[next_line]->addr) {
+ if (mod->cLines[next_line]->addr != INT_MAX) {
setBreakPoint (mod->cLines[next_line]->addr, CODE, bpType,
userBpCB, mod->c_name, next_line);
return;
}
}
else {
- if (mod->asmLines[next_line]->addr) {
+ if (mod->asmLines[next_line]->addr != INT_MAX) {
setBreakPoint (mod->asmLines[next_line]->addr, CODE, bpType,
userBpCB, mod->asm_name, next_line);
return;
/* find the function we are in */
if (!func && !applyToSet(functions,funcInAddr,addr,&func)) {
- if (!applyToSet(functions,funcWithName,"main",&func) ||
+ if (!applyToSet(functions,funcWithName,"_main",&func) ||
!applyToSet(modules,moduleLineWithAddr,addr,&mod,NULL))
{
- fprintf(stderr, "Error?:discoverContext: cannot apply addr 0x%x\n",addr);
+ fprintf(stderr, "addr 0x%x in no module/function (runtime env?)\n",addr);
return NULL;
}
currCtxt->func = func;
&line,&currCtxt->block,&currCtxt->level))
currCtxt->cline = func->lline = line;
else
- currCtxt->cline = func->exitline;
+ currCtxt->cline = -1;
}
/* find the asm line number */
line = 0;
if (applyToSet(func->afpoints,lineAtAddr,addr,
&line,NULL,NULL))
- currCtxt->asmline = line;
+ currCtxt->asmline = line;
else
- currCtxt->asmline = -1;
+ currCtxt->asmline = -1;
return currCtxt ;
}
userinterrupt = 0;
return;
}
+ if ( gaddr == 0 )
+ {
+ function *func = NULL;;
+ if (applyToSet(functions,funcInAddr,gaddr,&func))
+ STACK_PUSH(callStack,func);
+ }
addr = simGoTillBp (gaddr);
/* got the pc for the break point now first
}
fprintf(stderr,"No function contains specified address.\n");
+ if( saddr >= 0 )
+ {
+ char lbuf[64];
+ sprintf(lbuf,"dis 0x%lx 0 %ld\n",saddr,( eaddr == -1 )?1L:eaddr-saddr);
+ sendSim(lbuf);
+ waitForSim(1000, NULL);
+ fputs(simResponse(),stdout);
+ }
return 0;
}
/*-----------------------------------------------------------------*/
/* get the lineno */
int line = atoi(s) -1;
Dprintf(D_break, ("commonSetUserBp: b) line:%d \n",line));
-
+ if ( line < 0 )
+ {
+ fprintf(stdout,"linenumber <= 0\n");
+ goto ret;
+ }
/* if current context not present then we must get the module
which has main & set the break point @ line number provided
of that module : if current context known then set the bp
if ( cctxt && cctxt->func)
{
/* actual line */
- if (printAsmLine(cctxt->func,cctxt->func->mod,
+ if ( cctxt->addr != INT_MAX )
+ {
+ if (printAsmLine(cctxt->func,cctxt->func->mod,
(long)cctxt->addr,(long)cctxt->addr))
return 0;
+ }
}
return 0;
}
int cmdStepi (char *s, context *cctxt)
{
- if (STACK_EMPTY(callStack))
+ if (0 /*STACK_EMPTY(callStack)*/)
fprintf(stdout,"The program is not being run.\n");
else
{
val = simGetValue (0x82,'I',2);
fprintf(stdout,"DPTR: 0x%04X %d\n",val,val);
val = simGetValue (0x81,'I',1);
- fprintf(stdout,"SP : 0x%02X\n",val);
+ fprintf(stdout,"SP : 0x%02X (0x%04X)\n",val,simGetValue (val-1,'B',2));
fprintf(stdout,"PSW : 0x%02X | CY : %c | AC : %c | OV : %c | P : %c\n",
i,(i&0x80)?'1':'0',(i&0x40)?'1':'0',(i&4)?'1':'0',(i&1)?'1':'0');
if ( all )
func ? func->sym->name : "?",
func ? lastaddr -func->sym->addr : 0);
llines = pline +1;
- while ( pline < list_mod->ncLines )
+ for ( ; pline < list_mod->ncLines; pline++ )
{
- pline++;
if ( list_mod->cLines[pline]->addr > lastaddr )
{
lastaddr = list_mod->cLines[pline]->addr -1;
{
function *func = NULL;
currentFrame = 0;
- if (!applyToSet(functions,funcWithName,"main",&func) &&
- !applyToSet(functions,funcWithName,"_main",&func))
- return;
+ if (!applyToSet(functions,funcWithName,"_main",&func) &&
+ !applyToSet(functions,funcWithName,"main",&func))
+ return;
discoverContext (func->sym->addr, func);
}
+
+function *needExtraMainFunction()
+{
+ function *func = NULL;
+ if (!applyToSet(functions,funcWithName,"_main",&func))
+ {
+ if (applyToSet(functions,funcWithName,"main",&func))
+ {
+ return func;
+ }
+ }
+ return NULL;
+}
static void printFrame()
{