* arch-utils.h (init_frame_pc_default): Declare.
* gdbarch.sh (INIT_FRAME_PC): Default to init_frame_pc_default and
not init_frame_pc_noop.
* gdbarch.h, gdbarch.c: Re-generate.
* blockframe.c (INIT_FRAME_PC): Delete macro definition.
* mips-tdep.c (mips_gdbarch_init): Set init_frame_pc to
init_frame_pc_noop.
+2001-06-16 Andrew Cagney <ac131313@redhat.com>
+
+ * arch-utils.c (init_frame_pc_default): New function
+ * arch-utils.h (init_frame_pc_default): Declare.
+ * gdbarch.sh (INIT_FRAME_PC): Default to init_frame_pc_default and
+ not init_frame_pc_noop.
+ * gdbarch.h, gdbarch.c: Re-generate.
+ * blockframe.c (INIT_FRAME_PC): Delete macro definition.
+ * mips-tdep.c (mips_gdbarch_init): Set init_frame_pc to
+ init_frame_pc_noop.
+
2001-06-16 Andrew Cagney <ac131313@redhat.com>
* gdbarch.c: Regenerate. Out-of-sync with gdbarch.sh.
return;
}
+void
+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);
+ else
+ prev->pc = read_pc ();
+}
+
int
cannot_register_not (int regnum)
{
extern int generic_prepare_to_proceed (int select_it);
-/* Version of init_frame_pc() that does nothing. */
+/* Versions of init_frame_pc(). Do nothing; do the default. */
void init_frame_pc_noop (int fromleaf, struct frame_info *prev);
+void init_frame_pc_default (int fromleaf, struct frame_info *prev);
+
/* Version of cannot_fetch_register() / cannot_store_register() that
always fails. */
/* Default a few macros that people seldom redefine. */
-#if !defined (INIT_FRAME_PC)
-#define INIT_FRAME_PC(fromleaf, prev) \
- prev->pc = (fromleaf ? SAVED_PC_AFTER_CALL (prev->next) : \
- prev->next ? FRAME_SAVED_PC (prev->next) : read_pc ());
-#endif
-
#ifndef FRAME_CHAIN_COMBINE
#define FRAME_CHAIN_COMBINE(chain, thisframe) (chain)
#endif
gdbarch->sizeof_call_dummy_words = legacy_sizeof_call_dummy_words;
gdbarch->call_dummy_stack_adjust_p = -1;
gdbarch->init_frame_pc_first = init_frame_pc_noop;
- gdbarch->init_frame_pc = init_frame_pc_noop;
+ gdbarch->init_frame_pc = init_frame_pc_default;
gdbarch->coerce_float_to_double = default_coerce_float_to_double;
gdbarch->register_convertible = generic_register_convertible_not;
gdbarch->pointer_to_address = unsigned_pointer_to_address;
/* Default (function) for non- multi-arch platforms. */
#if (!GDB_MULTI_ARCH) && !defined (INIT_FRAME_PC)
-#define INIT_FRAME_PC(fromleaf, prev) (init_frame_pc_noop (fromleaf, prev))
+#define INIT_FRAME_PC(fromleaf, prev) (init_frame_pc_default (fromleaf, prev))
#endif
typedef void (gdbarch_init_frame_pc_ftype) (int fromleaf, struct frame_info *prev);
v:2:CALL_DUMMY_STACK_ADJUST:int:call_dummy_stack_adjust::::0:::gdbarch->call_dummy_stack_adjust_p && gdbarch->call_dummy_stack_adjust == 0:0x%08lx::CALL_DUMMY_STACK_ADJUST_P
f:2:FIX_CALL_DUMMY:void:fix_call_dummy:char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs, struct value **args, struct type *type, int gcc_p:dummy, pc, fun, nargs, args, type, gcc_p:::0
f:2:INIT_FRAME_PC_FIRST:void:init_frame_pc_first:int fromleaf, struct frame_info *prev:fromleaf, prev:::init_frame_pc_noop::0
-f:2:INIT_FRAME_PC:void:init_frame_pc:int fromleaf, struct frame_info *prev:fromleaf, prev:::init_frame_pc_noop::0
+f:2:INIT_FRAME_PC:void:init_frame_pc:int fromleaf, struct frame_info *prev:fromleaf, prev:::init_frame_pc_default::0
#
v:2:BELIEVE_PCC_PROMOTION:int:believe_pcc_promotion:::::::
v:2:BELIEVE_PCC_PROMOTION_TYPE:int:believe_pcc_promotion_type:::::::
/* There's a mess in stack frame creation. See comments in
blockframe.c near reference to INIT_FRAME_PC_FIRST. */
set_gdbarch_init_frame_pc_first (gdbarch, mips_init_frame_pc_first);
+ set_gdbarch_init_frame_pc (gdbarch, init_frame_pc_noop);
/* Map debug register numbers onto internal register numbers. */
set_gdbarch_stab_reg_to_regnum (gdbarch, mips_stab_reg_to_regnum);