/* pop the top most from the call stack */
func = STACK_POP(callStack);
+ if (!func)
+ {
+ fprintf(stdout,"Stack underflow\n");
+ return 1;
+ }
+
Dprintf(D_break, ("break: fexitCB: BP_CALLBACK entry %s %p\n",func->sym->name, p_callStack));
/* check main function */
- if ( STACK_EMPTY(callStack))
+ if ( STACK_EMPTY(callStack) && !strcmp(func->sym->name,"main"))
{
fprintf(stdout,"Program exited with code %d.\n",simGetValue (0x82,'I',2));
return 1;
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
: STACK_PUSH_(stack,x) )
#define STACK_POP(stack) (STACK_EMPTY(stack) \
- ?((t_##stack)(long)(STACK_ERR(0))) \
+ ?((t_##stack) NULL) \
: STACK_POP_(stack) )
#define STACK_PEEK(stack) (STACK_EMPTY(stack) \