{
char *registers = deprecated_grub_regcache_for_registers (regcache);
bfd_byte *buf = valbuf;
- DEPRECATED_EXTRACT_RETURN_VALUE (type, registers, buf);
+ DEPRECATED_EXTRACT_RETURN_VALUE (type, registers, buf); /* OK */
}
/* Implementation of store return value that grubs the register cache.
return reg;
}
-/* For use by frame_args_address and frame_locals_address. */
-CORE_ADDR
-default_frame_address (struct frame_info *fi)
-{
- return fi->frame;
-}
-
/* Default prepare_to_procced(). */
int
default_prepare_to_proceed (int select_it)
}
-void
+CORE_ADDR
init_frame_pc_noop (int fromleaf, struct frame_info *prev)
{
- return;
+ /* Do nothing, implies return the same PC value. */
+ return get_frame_pc (prev);
}
-void
+CORE_ADDR
init_frame_pc_default (int fromleaf, struct frame_info *prev)
{
if (fromleaf)
- prev->pc = SAVED_PC_AFTER_CALL (prev->next);
- else if (prev->next != NULL)
- prev->pc = FRAME_SAVED_PC (prev->next);
+ return SAVED_PC_AFTER_CALL (get_next_frame (prev));
+ else if (get_next_frame (prev) != NULL)
+ return FRAME_SAVED_PC (get_next_frame (prev));
else
- prev->pc = read_pc ();
+ return read_pc ();
}
void
int *frame_regnum,
LONGEST *frame_offset)
{
- gdb_assert (FP_REGNUM >= 0);
- *frame_regnum = FP_REGNUM;
+ /* FIXME: cagney/2002-09-13: This code is used when identifying the
+ frame pointer of the current PC. It is assuming that a single
+ register and an offset can determine this. I think it should
+ instead generate a byte code expression as that would work better
+ with things like Dwarf2's CFI. */
+ if (FP_REGNUM >= 0 && FP_REGNUM < NUM_REGS)
+ *frame_regnum = FP_REGNUM;
+ else if (SP_REGNUM >= 0 && SP_REGNUM < NUM_REGS)
+ *frame_regnum = SP_REGNUM;
+ else
+ /* Should this be an internal error? I guess so, it is reflecting
+ an architectural limitation in the current design. */
+ internal_error (__FILE__, __LINE__, "No virtual frame pointer available");
*frame_offset = 0;
}