void generic_push_dummy_frame (void) { struct dummy_frame *dummy_frame; CORE_ADDR fp = (get_current_frame ())->frame; /* check to see if there are stale dummy frames, perhaps left over from when a longjump took us out of a function that was called by the debugger */ dummy_frame = dummy_frame_stack; while (dummy_frame) if (INNER_THAN (dummy_frame->fp, fp)) /* stale -- destroy! */ { dummy_frame_stack = dummy_frame->next; xfree (dummy_frame->registers); xfree (dummy_frame); dummy_frame = dummy_frame_stack; } else dummy_frame = dummy_frame->next; dummy_frame = xmalloc (sizeof (struct dummy_frame)); dummy_frame->registers = xmalloc (REGISTER_BYTES); dummy_frame->pc = read_pc (); dummy_frame->sp = read_sp (); dummy_frame->top = dummy_frame->sp; dummy_frame->fp = fp; read_register_bytes (0, dummy_frame->registers, REGISTER_BYTES); dummy_frame->next = dummy_frame_stack; dummy_frame_stack = dummy_frame; }
void m68k_push_dummy_frame () { register CORE_ADDR sp = read_register (SP_REGNUM); register int regnum; char raw_buffer[12]; sp = push_word (sp, read_register (PC_REGNUM)); sp = push_word (sp, read_register (FP_REGNUM)); write_register (FP_REGNUM, sp); #if defined (HAVE_68881) for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--) { read_register_bytes (REGISTER_BYTE (regnum), raw_buffer, 12); sp = push_bytes (sp, raw_buffer, 12); } #endif for (regnum = FP_REGNUM - 1; regnum >= 0; regnum--) { sp = push_word (sp, read_register (regnum)); } sp = push_word (sp, read_register (PS_REGNUM)); write_register (SP_REGNUM, sp); }