&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 ;
}
}
/*-----------------------------------------------------------------*/
-/* preparePrint - common parse function for */
+/* preparePrint - common parse function for set variable, */
/* output, print and display */
/*-----------------------------------------------------------------*/
static char *preparePrint(char *s, context *cctxt, int *fmt, symbol **sym)
s++;
while (isspace(*s)) s++;
}
- for ( bp = s; *bp && ( isalnum( *bp ) || *bp == '_'); bp++ );
+ for ( bp = s; *bp && ( isalnum( *bp ) || *bp == '_' || *bp == '$'); bp++ );
save_ch = *bp;
if ( *bp )
*bp = '\0';
- *sym = symLookup(s,cctxt);
+ if ( *s )
+ *sym = symLookup(s,cctxt);
*bp = save_ch;
if ( ! *sym )
while (*s && *s != '=') s++;
*s++ = '\0';
while (isspace(*s)) *s++ = '\0';
- if (*s)
+ if (*s && sym)
{
- printOrSetSymValue(sym,cctxt,0,0,0,rs,s,'\0');
- return 0;
+ printOrSetSymValue(sym,cctxt,0,0,0,rs,s,'\0');
+ return 0;
}
else
fprintf(stdout,"No new value for \"%s\".\n",s);
/*-----------------------------------------------------------------*/
static void infoRegisters( int all, context *ctxt)
{
- static unsigned int regaddrs[] = {0x81,0x82,0x83,0xd0,0xe0,0xf0,0};
+ static unsigned int regaddrs[] = {0x81,0x82,0x83,0xb8,0xd0,0xe0,0xf0,0};
unsigned long val;
int i,j,*r;
i = simGetValue (0xd0,'I',1);
- fprintf(stdout,"PC : 0x%04X RegisterBank %d:\nR0-7:",ctxt->addr,(i>>3)&3);
+ fprintf(stdout,"IP : 0x%04X RegisterBank %d:\nR0-7:",ctxt->addr,(i>>3)&3);
for ( j = 0; j < 8 ; j++ )
{
val = simGetValue (j ,'R',1);
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;
}v;
if (IS_FLOAT(type))
- v.f = strtof(val,NULL);
+ v.f = strtod(val,NULL);
else
if (IS_PTR(type))
v.val = strtol(val,NULL,0);
}
else
{
- simSetValue(addr,sym->addrspace,size,newval);
+ if ( sym->addrspace == 'I' && addr == 0xb8 )
+ {
+ /* Symbol with address of IP */
+ if ( cctxt ) cctxt->addr = newval;
+ simSetPC(cctxt->addr);
+ }
+ else
+ simSetValue(addr,sym->addrspace,size,newval);
return 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()
{