Patchwork [PATCHv3,3/4] gdb: Supply a default for gdbarch_dummy_id

login
register
mail settings
Submitter Andrew Burgess
Date June 5, 2018, 2:34 p.m.
Message ID <82dc4cc20963473b28567a1c7c8567ad4da5ed90.1528206468.git.andrew.burgess@embecosm.com>
Download mbox | patch
Permalink /patch/27630/
State New
Headers show

Comments

Andrew Burgess - June 5, 2018, 2:34 p.m.
A lot of targets use the same pattern for their implementation of
gdbarch_dummy_id.  Create a new function default_dummy_id and use this
as the default for gdbarch_dummy_id where possible.

gdb/ChangeLog:

	* aarch64-tdep.c (aarch64_dummy_id): Delete.
	(aarch64_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* alpha-tdep.c (alpha_dummy_id): Delete.
	(alpha_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* arc-tdep.c (arc_dummy_id): Delete.
	(arc_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* arm-tdep.c (arm_dummy_id): Delete.
	(arm_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* bfin-tdep.c (bfin_dummy_id): Delete.
	(bfin_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* cris-tdep.c (cris_dummy_id): Delete.
	(cris_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* dummy-frame.c (default_dummy_id): Defined new function.
	* dummy-frame.h (default_dummy_id): Declare new function.
	* frv-tdep.c (frv_dummy_id): Delete.
	(frv_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* ft32-tdep.c (ft32_dummy_id): Delete.
	(ft32_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* gdbarch.c: Regenerate.
	* gdbarch.h: Regenerate.
	* gdbarch.sh: Remove predicate function, and supply default for
	dummy_id method.  Add 'dummy-frame.h' header.
	* h8300-tdep.c (h8300_dummy_id): Delete.
	(h8300_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* hppa-tdep.c (hppa_dummy_id): Delete.
	(hppa_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* iq2000-tdep.c (iq2000_dummy_id): Delete.
	(iq2000_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* lm32-tdep.c (lm32_dummy_id): Delete.
	(lm32_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* m32r-tdep.c (m32r_dummy_id): Delete.
	(m32r_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* mep-tdep.c (mep_dummy_id): Delete.
	(mep_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* mn10300-tdep.c (mn10300_dummy_id): Delete.
	(mn10300_frame_unwind_init): Don't call set_gdbarch_dummy_id.
	* moxie-tdep.c (moxie_dummy_id): Delete.
	(moxie_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* msp430-tdep.c (msp430_dummy_id): Delete.
	(msp430_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* nds32-tdep.c (nds32_dummy_id): Delete.
	(nds32_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* nios2-tdep.c (nios2_dummy_id): Delete.
	(nios2_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* or1k-tdep.c (or1k_dummy_id): Delete.
	(or1k_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* riscv-tdep.c (riscv_dummy_id): Delete.
	(riscv_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* rs6000-tdep.c (rs6000_dummy_id): Delete.
	(rs6000_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* rx-tdep.c (rx_dummy_id): Delete.
	(rx_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* score-tdep.c (score_dummy_id): Delete.
	(score_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* sh-tdep.c (sh_dummy_id): Delete.
	(sh_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* tic6x-tdep.c (tic6x_dummy_id): Delete.
	(tic6x_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* tilegx-tdep.c (tilegx_unwind_dummy_id): Delete.
	(tilegx_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* v850-tdep.c (v850_dummy_id): Delete.
	(v850_gdbarch_init): Don't call set_gdbarch_dummy_id.
	* gdb/xstormy16-tdep.c (xstormy16_dummy_id): Delete.
	(xstormy16_gdbarch_init): Don't call set_gdbarch_dummy_id.
---
 gdb/ChangeLog        | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 gdb/aarch64-tdep.c   | 15 ------------
 gdb/alpha-tdep.c     | 18 --------------
 gdb/arc-tdep.c       | 14 -----------
 gdb/arm-tdep.c       | 15 ------------
 gdb/bfin-tdep.c      | 11 ---------
 gdb/cris-tdep.c      | 13 ----------
 gdb/dummy-frame.c    | 16 +++++++++++++
 gdb/dummy-frame.h    |  6 +++++
 gdb/frv-tdep.c       | 13 ----------
 gdb/ft32-tdep.c      | 13 ----------
 gdb/gdbarch.c        | 14 +++--------
 gdb/gdbarch.h        |  2 --
 gdb/gdbarch.sh       |  3 ++-
 gdb/h8300-tdep.c     |  8 -------
 gdb/hppa-tdep.c      |  9 -------
 gdb/iq2000-tdep.c    |  8 -------
 gdb/lm32-tdep.c      |  9 -------
 gdb/m32r-tdep.c      | 17 -------------
 gdb/mep-tdep.c       | 10 --------
 gdb/mn10300-tdep.c   | 10 --------
 gdb/moxie-tdep.c     | 13 ----------
 gdb/msp430-tdep.c    | 13 ----------
 gdb/nds32-tdep.c     | 11 ---------
 gdb/nios2-tdep.c     | 11 ---------
 gdb/or1k-tdep.c      | 10 --------
 gdb/riscv-tdep.c     | 10 --------
 gdb/rs6000-tdep.c    | 10 --------
 gdb/rx-tdep.c        | 10 --------
 gdb/score-tdep.c     |  9 -------
 gdb/sh-tdep.c        |  9 -------
 gdb/tic6x-tdep.c     | 12 ----------
 gdb/tilegx-tdep.c    | 12 ----------
 gdb/v850-tdep.c      |  9 -------
 gdb/xstormy16-tdep.c |  9 -------
 35 files changed, 94 insertions(+), 345 deletions(-)

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 5bf169ca02d..c2f6957b461 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,70 @@ 
+2018-06-05  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* aarch64-tdep.c (aarch64_dummy_id): Delete.
+	(aarch64_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* alpha-tdep.c (alpha_dummy_id): Delete.
+	(alpha_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* arc-tdep.c (arc_dummy_id): Delete.
+	(arc_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* arm-tdep.c (arm_dummy_id): Delete.
+	(arm_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* bfin-tdep.c (bfin_dummy_id): Delete.
+	(bfin_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* cris-tdep.c (cris_dummy_id): Delete.
+	(cris_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* dummy-frame.c (default_dummy_id): Defined new function.
+	* dummy-frame.h (default_dummy_id): Declare new function.
+	* frv-tdep.c (frv_dummy_id): Delete.
+	(frv_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* ft32-tdep.c (ft32_dummy_id): Delete.
+	(ft32_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+	* gdbarch.sh: Remove predicate function, and supply default for
+	dummy_id method.  Add 'dummy-frame.h' header.
+	* h8300-tdep.c (h8300_dummy_id): Delete.
+	(h8300_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* hppa-tdep.c (hppa_dummy_id): Delete.
+	(hppa_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* iq2000-tdep.c (iq2000_dummy_id): Delete.
+	(iq2000_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* lm32-tdep.c (lm32_dummy_id): Delete.
+	(lm32_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* m32r-tdep.c (m32r_dummy_id): Delete.
+	(m32r_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* mep-tdep.c (mep_dummy_id): Delete.
+	(mep_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* mn10300-tdep.c (mn10300_dummy_id): Delete.
+	(mn10300_frame_unwind_init): Don't call set_gdbarch_dummy_id.
+	* moxie-tdep.c (moxie_dummy_id): Delete.
+	(moxie_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* msp430-tdep.c (msp430_dummy_id): Delete.
+	(msp430_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* nds32-tdep.c (nds32_dummy_id): Delete.
+	(nds32_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* nios2-tdep.c (nios2_dummy_id): Delete.
+	(nios2_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* or1k-tdep.c (or1k_dummy_id): Delete.
+	(or1k_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* riscv-tdep.c (riscv_dummy_id): Delete.
+	(riscv_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* rs6000-tdep.c (rs6000_dummy_id): Delete.
+	(rs6000_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* rx-tdep.c (rx_dummy_id): Delete.
+	(rx_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* score-tdep.c (score_dummy_id): Delete.
+	(score_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* sh-tdep.c (sh_dummy_id): Delete.
+	(sh_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* tic6x-tdep.c (tic6x_dummy_id): Delete.
+	(tic6x_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* tilegx-tdep.c (tilegx_unwind_dummy_id): Delete.
+	(tilegx_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* v850-tdep.c (v850_dummy_id): Delete.
+	(v850_gdbarch_init): Don't call set_gdbarch_dummy_id.
+	* gdb/xstormy16-tdep.c (xstormy16_dummy_id): Delete.
+	(xstormy16_gdbarch_init): Don't call set_gdbarch_dummy_id.
+
 2018-06-05  Andrew Burgess  <andrew.burgess@embecosm.com>
 
 	* arm-tdep.c (arm_unwind_pc): Delete.
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index 1d837ec4771..71f5066e996 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -1000,20 +1000,6 @@  struct frame_base aarch64_normal_base =
   aarch64_normal_frame_base
 };
 
-/* Assuming THIS_FRAME is a dummy, return the frame ID of that
-   dummy frame.  The frame ID's base needs to match the TOS value
-   saved by save_dummy_frame_tos () and returned from
-   aarch64_push_dummy_call, and the PC needs to match the dummy
-   frame's breakpoint.  */
-
-static struct frame_id
-aarch64_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  return frame_id_build (get_frame_register_unsigned (this_frame,
-						      AARCH64_SP_REGNUM),
-			 get_frame_pc (this_frame));
-}
-
 /* Implement the "unwind_sp" gdbarch method.  */
 
 static CORE_ADDR
@@ -2940,7 +2926,6 @@  aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_frame_align (gdbarch, aarch64_frame_align);
 
   /* Frame handling.  */
-  set_gdbarch_dummy_id (gdbarch, aarch64_dummy_id);
   set_gdbarch_unwind_sp (gdbarch, aarch64_unwind_sp);
 
   /* Advance PC across function entry code.  */
diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c
index 26b7e34ad23..f82cd8bd0bc 100644
--- a/gdb/alpha-tdep.c
+++ b/gdb/alpha-tdep.c
@@ -1462,21 +1462,6 @@  reinit_frame_cache_sfunc (const char *args,
 {
   reinit_frame_cache ();
 }
-
-
-/* Assuming NEXT_FRAME->prev is a dummy, return the frame ID of that
-   dummy frame.  The frame ID's base needs to match the TOS value
-   saved by save_dummy_frame_tos(), and the PC match the dummy frame's
-   breakpoint.  */
-
-static struct frame_id
-alpha_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  ULONGEST base;
-  base = get_frame_register_unsigned (this_frame, ALPHA_SP_REGNUM);
-  return frame_id_build (base, get_frame_pc (this_frame));
-}
-
 
 /* Helper routines for alpha*-nat.c files to move register sets to and
    from core files.  The UNIQUE pointer is allowed to be NULL, as most
@@ -1798,9 +1783,6 @@  alpha_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   /* Settings for calling functions in the inferior.  */
   set_gdbarch_push_dummy_call (gdbarch, alpha_push_dummy_call);
 
-  /* Methods for saving / extracting a dummy frame's ID.  */
-  set_gdbarch_dummy_id (gdbarch, alpha_dummy_id);
-
   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
 
diff --git a/gdb/arc-tdep.c b/gdb/arc-tdep.c
index fad91709786..569409fdf43 100644
--- a/gdb/arc-tdep.c
+++ b/gdb/arc-tdep.c
@@ -509,19 +509,6 @@  arc_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc,
   *offset_ptr = 0;
 }
 
-/* Implement the "dummy_id" gdbarch method.
-
-   Tear down a dummy frame created by arc_push_dummy_call ().  This data has
-   to be constructed manually from the data in our hand.  The stack pointer
-   and program counter can be obtained from the frame info.  */
-
-static struct frame_id
-arc_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  return frame_id_build (get_frame_sp (this_frame),
-			 get_frame_pc (this_frame));
-}
-
 /* Implement the "push_dummy_call" gdbarch method.
 
    Stack Frame Layout
@@ -2014,7 +2001,6 @@  arc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_ps_regnum (gdbarch, ARC_STATUS32_REGNUM);
   set_gdbarch_fp0_regnum (gdbarch, -1);	/* No FPU registers.  */
 
-  set_gdbarch_dummy_id (gdbarch, arc_dummy_id);
   set_gdbarch_push_dummy_call (gdbarch, arc_push_dummy_call);
   set_gdbarch_push_dummy_code (gdbarch, arc_push_dummy_code);
 
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index 45c5b36383a..933cd136941 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -3055,20 +3055,6 @@  struct frame_base arm_normal_base = {
   arm_normal_frame_base
 };
 
-/* Assuming THIS_FRAME is a dummy, return the frame ID of that
-   dummy frame.  The frame ID's base needs to match the TOS value
-   saved by save_dummy_frame_tos() and returned from
-   arm_push_dummy_call, and the PC needs to match the dummy frame's
-   breakpoint.  */
-
-static struct frame_id
-arm_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  return frame_id_build (get_frame_register_unsigned (this_frame,
-						      ARM_SP_REGNUM),
-			 get_frame_pc (this_frame));
-}
-
 static CORE_ADDR
 arm_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
 {
@@ -9347,7 +9333,6 @@  arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_write_pc (gdbarch, arm_write_pc);
 
   /* Frame handling.  */
-  set_gdbarch_dummy_id (gdbarch, arm_dummy_id);
   set_gdbarch_unwind_sp (gdbarch, arm_unwind_sp);
 
   frame_base_set_default (gdbarch, &arm_normal_base);
diff --git a/gdb/bfin-tdep.c b/gdb/bfin-tdep.c
index b60dd00dbb5..690335b4a55 100644
--- a/gdb/bfin-tdep.c
+++ b/gdb/bfin-tdep.c
@@ -756,16 +756,6 @@  static const struct frame_base bfin_frame_base =
   bfin_frame_args_address
 };
 
-static struct frame_id
-bfin_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp;
-
-  sp = get_frame_register_unsigned (this_frame, BFIN_SP_REGNUM);
-
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
 static CORE_ADDR
 bfin_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
 {
@@ -820,7 +810,6 @@  bfin_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, bfin_reg_to_regnum);
   set_gdbarch_register_name (gdbarch, bfin_register_name);
   set_gdbarch_register_type (gdbarch, bfin_register_type);
-  set_gdbarch_dummy_id (gdbarch, bfin_dummy_id);
   set_gdbarch_push_dummy_call (gdbarch, bfin_push_dummy_call);
   set_gdbarch_believe_pcc_promotion (gdbarch, 1);
   set_gdbarch_return_value (gdbarch, bfin_return_value);
diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
index d86d9830b8d..a731a673c3f 100644
--- a/gdb/cris-tdep.c
+++ b/gdb/cris-tdep.c
@@ -764,18 +764,6 @@  cris_frame_prev_register (struct frame_info *this_frame,
   return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
 }
 
-/* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
-   frame.  The frame ID's base needs to match the TOS value saved by
-   save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint.  */
-
-static struct frame_id
-cris_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp;
-  sp = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
 static CORE_ADDR
 cris_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
 {
@@ -4085,7 +4073,6 @@  cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_sw_breakpoint_from_kind (gdbarch, cris_sw_breakpoint_from_kind);
   
   set_gdbarch_unwind_sp (gdbarch, cris_unwind_sp);
-  set_gdbarch_dummy_id (gdbarch, cris_dummy_id);
 
   if (tdep->cris_dwarf2_cfi == 1)
     {
diff --git a/gdb/dummy-frame.c b/gdb/dummy-frame.c
index 82e7251ccec..4df4f4eec35 100644
--- a/gdb/dummy-frame.c
+++ b/gdb/dummy-frame.c
@@ -385,6 +385,22 @@  const struct frame_unwind dummy_frame_unwind =
   dummy_frame_sniffer,
 };
 
+/* Default implementation of gdbarch_dummy_id.  Generate frame_id for
+   THIS_FRAME assuming that it is a dummy frame.  A dummy frame is created
+   before an inferior call, the frame_id returned here must match the base
+   address returned by gdbarch_push_dummy_call and the frame's pc must
+   match the dummy frames breakpoint address.  */
+
+struct frame_id
+default_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
+{
+  CORE_ADDR sp, pc;
+
+  sp = get_frame_sp (this_frame);
+  pc = get_frame_pc (this_frame);
+  return frame_id_build (sp, pc);
+}
+
 static void
 fprint_dummy_frames (struct ui_file *file)
 {
diff --git a/gdb/dummy-frame.h b/gdb/dummy-frame.h
index cad99609927..342e97a327b 100644
--- a/gdb/dummy-frame.h
+++ b/gdb/dummy-frame.h
@@ -71,4 +71,10 @@  extern void register_dummy_frame_dtor (struct frame_id dummy_id, ptid_t ptid,
 extern int find_dummy_frame_dtor (dummy_frame_dtor_ftype *dtor,
 				  void *dtor_data);
 
+/* Default implementation of gdbarch_dummy_id.  Generate a dummy frame_id
+   for THIS_FRAME assuming that the frame is a dummy frame.  */
+
+extern struct frame_id default_dummy_id (struct gdbarch *gdbarch,
+					 struct frame_info *this_frame);
+
 #endif /* !defined (DUMMY_FRAME_H)  */
diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c
index 8170bf94fdb..c967d2a6d16 100644
--- a/gdb/frv-tdep.c
+++ b/gdb/frv-tdep.c
@@ -1438,18 +1438,6 @@  frv_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
   return frame_unwind_register_unsigned (next_frame, sp_regnum);
 }
 
-
-/* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
-   frame.  The frame ID's base needs to match the TOS value saved by
-   save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint.  */
-
-static struct frame_id
-frv_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, sp_regnum);
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
 static struct gdbarch *
 frv_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 {
@@ -1541,7 +1529,6 @@  frv_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   /* Settings for calling functions in the inferior.  */
   set_gdbarch_push_dummy_call (gdbarch, frv_push_dummy_call);
-  set_gdbarch_dummy_id (gdbarch, frv_dummy_id);
 
   /* Settings that should be unnecessary.  */
   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
diff --git a/gdb/ft32-tdep.c b/gdb/ft32-tdep.c
index 5c0a3384dbd..79cf1a08c1d 100644
--- a/gdb/ft32-tdep.c
+++ b/gdb/ft32-tdep.c
@@ -559,14 +559,6 @@  static const struct frame_base ft32_frame_base =
   ft32_frame_base_address
 };
 
-static struct frame_id
-ft32_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, FT32_SP_REGNUM);
-
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
 /* Allocate and initialize the ft32 gdbarch object.  */
 
 static struct gdbarch *
@@ -614,11 +606,6 @@  ft32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   frame_base_set_default (gdbarch, &ft32_frame_base);
 
-  /* Methods for saving / extracting a dummy frame's ID.  The ID's
-     stack address must match the SP value returned by
-     PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos.  */
-  set_gdbarch_dummy_id (gdbarch, ft32_dummy_id);
-
   /* Hook in ABI-specific overrides, if they have been registered.  */
   gdbarch_init_osabi (info, gdbarch);
 
diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
index dcd2d59f16c..1ba256f921a 100644
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -49,6 +49,7 @@ 
 #include "objfiles.h"
 #include "auxv.h"
 #include "frame-unwind.h"
+#include "dummy-frame.h"
 
 /* Static function declarations */
 
@@ -408,6 +409,7 @@  gdbarch_alloc (const struct gdbarch_info *info,
   gdbarch->ecoff_reg_to_regnum = no_op_reg_to_regnum;
   gdbarch->sdb_reg_to_regnum = no_op_reg_to_regnum;
   gdbarch->dwarf2_reg_to_regnum = no_op_reg_to_regnum;
+  gdbarch->dummy_id = default_dummy_id;
   gdbarch->deprecated_fp_regnum = -1;
   gdbarch->call_dummy_location = AT_ENTRY_POINT;
   gdbarch->code_of_frame_writable = default_code_of_frame_writable;
@@ -571,7 +573,7 @@  verify_gdbarch (struct gdbarch *gdbarch)
   if (gdbarch->register_name == 0)
     log.puts ("\n\tregister_name");
   /* Skip verify of register_type, has predicate.  */
-  /* Skip verify of dummy_id, has predicate.  */
+  /* Skip verify of dummy_id, invalid_p == 0 */
   /* Skip verify of deprecated_fp_regnum, invalid_p == 0 */
   /* Skip verify of push_dummy_call, has predicate.  */
   /* Skip verify of call_dummy_location, invalid_p == 0 */
@@ -951,9 +953,6 @@  gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
   fprintf_unfiltered (file,
                       "gdbarch_dump: dtrace_probe_is_enabled = <%s>\n",
                       host_address_to_string (gdbarch->dtrace_probe_is_enabled));
-  fprintf_unfiltered (file,
-                      "gdbarch_dump: gdbarch_dummy_id_p() = %d\n",
-                      gdbarch_dummy_id_p (gdbarch));
   fprintf_unfiltered (file,
                       "gdbarch_dump: dummy_id = <%s>\n",
                       host_address_to_string (gdbarch->dummy_id));
@@ -2301,13 +2300,6 @@  set_gdbarch_register_type (struct gdbarch *gdbarch,
   gdbarch->register_type = register_type;
 }
 
-int
-gdbarch_dummy_id_p (struct gdbarch *gdbarch)
-{
-  gdb_assert (gdbarch != NULL);
-  return gdbarch->dummy_id != NULL;
-}
-
 struct frame_id
 gdbarch_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
 {
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
index c71974f2b36..4d994a17b50 100644
--- a/gdb/gdbarch.h
+++ b/gdb/gdbarch.h
@@ -378,8 +378,6 @@  typedef struct type * (gdbarch_register_type_ftype) (struct gdbarch *gdbarch, in
 extern struct type * gdbarch_register_type (struct gdbarch *gdbarch, int reg_nr);
 extern void set_gdbarch_register_type (struct gdbarch *gdbarch, gdbarch_register_type_ftype *register_type);
 
-extern int gdbarch_dummy_id_p (struct gdbarch *gdbarch);
-
 typedef struct frame_id (gdbarch_dummy_id_ftype) (struct gdbarch *gdbarch, struct frame_info *this_frame);
 extern struct frame_id gdbarch_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame);
 extern void set_gdbarch_dummy_id (struct gdbarch *gdbarch, gdbarch_dummy_id_ftype *dummy_id);
diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh
index 19aaa4200d2..6db8b0eb50a 100755
--- a/gdb/gdbarch.sh
+++ b/gdb/gdbarch.sh
@@ -480,7 +480,7 @@  m;const char *;register_name;int regnr;regnr;;0
 # use "register_type".
 M;struct type *;register_type;int reg_nr;reg_nr
 
-M;struct frame_id;dummy_id;struct frame_info *this_frame;this_frame
+m;struct frame_id;dummy_id;struct frame_info *this_frame;this_frame;;default_dummy_id;;0
 # Implement DUMMY_ID and PUSH_DUMMY_CALL, then delete
 # deprecated_fp_regnum.
 v;int;deprecated_fp_regnum;;;-1;-1;;0
@@ -1658,6 +1658,7 @@  cat <<EOF
 #include "objfiles.h"
 #include "auxv.h"
 #include "frame-unwind.h"
+#include "dummy-frame.h"
 
 /* Static function declarations */
 
diff --git a/gdb/h8300-tdep.c b/gdb/h8300-tdep.c
index 48137ed02a0..fa2597f9d0d 100644
--- a/gdb/h8300-tdep.c
+++ b/gdb/h8300-tdep.c
@@ -98,13 +98,6 @@  h8300_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
   return frame_unwind_register_unsigned (next_frame, E_SP_REGNUM);
 }
 
-static struct frame_id
-h8300_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, E_SP_REGNUM);
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
 /* Normal frames.  */
 
 /* Allocate and initialize a frame cache.  */
@@ -1348,7 +1341,6 @@  h8300_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   /* Frame unwinder.  */
   set_gdbarch_unwind_sp (gdbarch, h8300_unwind_sp);
-  set_gdbarch_dummy_id (gdbarch, h8300_dummy_id);
   frame_base_set_default (gdbarch, &h8300_frame_base);
 
   /* 
diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
index 1ea36704279..ddaa39a0149 100644
--- a/gdb/hppa-tdep.c
+++ b/gdb/hppa-tdep.c
@@ -2506,14 +2506,6 @@  static const struct frame_unwind hppa_stub_frame_unwind = {
   hppa_stub_unwind_sniffer
 };
 
-static struct frame_id
-hppa_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  return frame_id_build (get_frame_register_unsigned (this_frame,
-                                                      HPPA_SP_REGNUM),
-			 get_frame_pc (this_frame));
-}
-
 CORE_ADDR
 hppa_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
 {
@@ -3156,7 +3148,6 @@  hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_pseudo_register_read (gdbarch, hppa_pseudo_register_read);
 
   /* Frame unwind methods.  */
-  set_gdbarch_dummy_id (gdbarch, hppa_dummy_id);
   set_gdbarch_unwind_pc (gdbarch, hppa_unwind_pc);
 
   /* Hook in ABI-specific overrides, if they have been registered.  */
diff --git a/gdb/iq2000-tdep.c b/gdb/iq2000-tdep.c
index 74fefdab374..f98b9066858 100644
--- a/gdb/iq2000-tdep.c
+++ b/gdb/iq2000-tdep.c
@@ -440,13 +440,6 @@  iq2000_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
   return frame_unwind_register_unsigned (next_frame, E_SP_REGNUM);
 }   
 
-static struct frame_id
-iq2000_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, E_SP_REGNUM);
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
 static CORE_ADDR
 iq2000_frame_base_address (struct frame_info *this_frame, void **this_cache)
 {
@@ -835,7 +828,6 @@  iq2000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_register_type (gdbarch, iq2000_register_type);
   set_gdbarch_frame_align (gdbarch, iq2000_frame_align);
   set_gdbarch_unwind_sp (gdbarch, iq2000_unwind_sp);
-  set_gdbarch_dummy_id (gdbarch, iq2000_dummy_id);
   frame_base_set_default (gdbarch, &iq2000_frame_base);
   set_gdbarch_push_dummy_call (gdbarch, iq2000_push_dummy_call);
 
diff --git a/gdb/lm32-tdep.c b/gdb/lm32-tdep.c
index 26f2faee365..651b09c73ec 100644
--- a/gdb/lm32-tdep.c
+++ b/gdb/lm32-tdep.c
@@ -388,14 +388,6 @@  lm32_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
   return frame_unwind_register_unsigned (next_frame, SIM_LM32_SP_REGNUM);
 }
 
-static struct frame_id
-lm32_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, SIM_LM32_SP_REGNUM);
-
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
 /* Put here the code to store, into fi->saved_regs, the addresses of
    the saved registers of frame described by FRAME_INFO.  This
    includes special registers such as pc and fp saved in special ways
@@ -546,7 +538,6 @@  lm32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_frame_align (gdbarch, lm32_frame_align);
   frame_base_set_default (gdbarch, &lm32_frame_base);
   set_gdbarch_unwind_sp (gdbarch, lm32_unwind_sp);
-  set_gdbarch_dummy_id (gdbarch, lm32_dummy_id);
   frame_unwind_append_unwinder (gdbarch, &lm32_frame_unwind);
 
   /* Breakpoints.  */
diff --git a/gdb/m32r-tdep.c b/gdb/m32r-tdep.c
index 9bfff6b0675..77019162d22 100644
--- a/gdb/m32r-tdep.c
+++ b/gdb/m32r-tdep.c
@@ -864,18 +864,6 @@  static const struct frame_base m32r_frame_base = {
   m32r_frame_base_address
 };
 
-/* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
-   frame.  The frame ID's base needs to match the TOS value saved by
-   save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint.  */
-
-static struct frame_id
-m32r_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, M32R_SP_REGNUM);
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
-
 static gdbarch_init_ftype m32r_gdbarch_init;
 
 static struct gdbarch *
@@ -920,11 +908,6 @@  m32r_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   frame_base_set_default (gdbarch, &m32r_frame_base);
 
-  /* Methods for saving / extracting a dummy frame's ID.  The ID's
-     stack address must match the SP value returned by
-     PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos.  */
-  set_gdbarch_dummy_id (gdbarch, m32r_dummy_id);
-
   /* Hook in ABI-specific overrides, if they have been registered.  */
   gdbarch_init_osabi (info, gdbarch);
 
diff --git a/gdb/mep-tdep.c b/gdb/mep-tdep.c
index 0f205988680..2e434daa41e 100644
--- a/gdb/mep-tdep.c
+++ b/gdb/mep-tdep.c
@@ -2328,15 +2328,6 @@  mep_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
   return sp;
 }
 
-
-static struct frame_id
-mep_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, MEP_SP_REGNUM);
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
-
 
 /* Initialization.  */
 
@@ -2465,7 +2456,6 @@  mep_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   /* Inferior function calls.  */
   set_gdbarch_frame_align (gdbarch, mep_frame_align);
   set_gdbarch_push_dummy_call (gdbarch, mep_push_dummy_call);
-  set_gdbarch_dummy_id (gdbarch, mep_dummy_id);
 
   return gdbarch;
 }
diff --git a/gdb/mn10300-tdep.c b/gdb/mn10300-tdep.c
index 8b72c287ab4..3b366e9322d 100644
--- a/gdb/mn10300-tdep.c
+++ b/gdb/mn10300-tdep.c
@@ -1098,15 +1098,6 @@  mn10300_frame_base (struct frame_info *this_frame, void **this_prologue_cache)
     }
 }
 
-/* Here is a dummy implementation.  */
-static struct frame_id
-mn10300_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, E_SP_REGNUM);
-  CORE_ADDR pc = get_frame_register_unsigned (this_frame, E_PC_REGNUM);
-  return frame_id_build (sp, pc);
-}
-
 static void
 mn10300_frame_this_id (struct frame_info *this_frame,
 		       void **this_prologue_cache,
@@ -1163,7 +1154,6 @@  mn10300_frame_unwind_init (struct gdbarch *gdbarch)
 {
   dwarf2_append_unwinders (gdbarch);
   frame_unwind_append_unwinder (gdbarch, &mn10300_frame_unwind);
-  set_gdbarch_dummy_id (gdbarch, mn10300_dummy_id);
   set_gdbarch_unwind_sp (gdbarch, mn10300_unwind_sp);
 }
 
diff --git a/gdb/moxie-tdep.c b/gdb/moxie-tdep.c
index 515357c8ea3..ca235050df5 100644
--- a/gdb/moxie-tdep.c
+++ b/gdb/moxie-tdep.c
@@ -621,14 +621,6 @@  static const struct frame_base moxie_frame_base = {
   moxie_frame_base_address
 };
 
-static struct frame_id
-moxie_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, MOXIE_SP_REGNUM);
-
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
 /* Parse the current instruction and record the values of the registers and
    memory that will be changed in current instruction to "record_arch_list".
    Return -1 if something wrong.  */
@@ -1101,11 +1093,6 @@  moxie_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   frame_base_set_default (gdbarch, &moxie_frame_base);
 
-  /* Methods for saving / extracting a dummy frame's ID.  The ID's
-     stack address must match the SP value returned by
-     PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos.  */
-  set_gdbarch_dummy_id (gdbarch, moxie_dummy_id);
-
   /* Hook in ABI-specific overrides, if they have been registered.  */
   gdbarch_init_osabi (info, gdbarch);
 
diff --git a/gdb/msp430-tdep.c b/gdb/msp430-tdep.c
index 2e30a648de2..3f09b594f8b 100644
--- a/gdb/msp430-tdep.c
+++ b/gdb/msp430-tdep.c
@@ -643,18 +643,6 @@  msp430_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
 }
 
 
-/* Implement the "dummy_id" gdbarch method.  */
-
-static struct frame_id
-msp430_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  return
-    frame_id_build (get_frame_register_unsigned
-		    (this_frame, MSP430_SP_REGNUM),
-		    get_frame_pc (this_frame));
-}
-
-
 /* Implement the "push_dummy_call" gdbarch method.  */
 
 static CORE_ADDR
@@ -993,7 +981,6 @@  msp430_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   frame_unwind_append_unwinder (gdbarch, &msp430_unwind);
 
   /* Dummy frames, return values.  */
-  set_gdbarch_dummy_id (gdbarch, msp430_dummy_id);
   set_gdbarch_push_dummy_call (gdbarch, msp430_push_dummy_call);
   set_gdbarch_return_value (gdbarch, msp430_return_value);
 
diff --git a/gdb/nds32-tdep.c b/gdb/nds32-tdep.c
index 59cdacdad82..5df7054f621 100644
--- a/gdb/nds32-tdep.c
+++ b/gdb/nds32-tdep.c
@@ -1388,16 +1388,6 @@  static const struct frame_unwind nds32_epilogue_frame_unwind =
   nds32_epilogue_frame_sniffer
 };
 
-/* Implement the "dummy_id" gdbarch method.  */
-
-static struct frame_id
-nds32_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, NDS32_SP_REGNUM);
-
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
 /* Implement the "unwind_sp" gdbarch method.  */
 
 static CORE_ADDR
@@ -2136,7 +2126,6 @@  nds32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   set_gdbarch_push_dummy_call (gdbarch, nds32_push_dummy_call);
   set_gdbarch_return_value (gdbarch, nds32_return_value);
-  set_gdbarch_dummy_id (gdbarch, nds32_dummy_id);
 
   set_gdbarch_skip_prologue (gdbarch, nds32_skip_prologue);
   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
diff --git a/gdb/nios2-tdep.c b/gdb/nios2-tdep.c
index b6533d57719..f41fde2da2f 100644
--- a/gdb/nios2-tdep.c
+++ b/gdb/nios2-tdep.c
@@ -1798,16 +1798,6 @@  nios2_return_value (struct gdbarch *gdbarch, struct value *function,
   return RETURN_VALUE_REGISTER_CONVENTION;
 }
 
-/* Implement the dummy_id gdbarch method.  */
-
-static struct frame_id
-nios2_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  return frame_id_build
-    (get_frame_register_unsigned (this_frame, NIOS2_SP_REGNUM),
-     get_frame_pc (this_frame));
-}
-
 /* Implement the push_dummy_call gdbarch method.  */
 
 static CORE_ADDR
@@ -2310,7 +2300,6 @@  nios2_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_breakpoint_kind_from_pc (gdbarch, nios2_breakpoint_kind_from_pc);
   set_gdbarch_sw_breakpoint_from_kind (gdbarch, nios2_sw_breakpoint_from_kind);
 
-  set_gdbarch_dummy_id (gdbarch, nios2_dummy_id);
   set_gdbarch_unwind_sp (gdbarch, nios2_unwind_sp);
 
   /* The dwarf2 unwinder will normally produce the best results if
diff --git a/gdb/or1k-tdep.c b/gdb/or1k-tdep.c
index c5104e3959d..faefa0c151f 100644
--- a/gdb/or1k-tdep.c
+++ b/gdb/or1k-tdep.c
@@ -788,15 +788,6 @@  or1k_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 
   return sp;
 }
-
-/* Implement the dummy_id gdbarch method.  */
-
-static struct frame_id
-or1k_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  return frame_id_build (get_frame_sp (this_frame),
-			 get_frame_pc (this_frame));
-}
 
 
 /* Support functions for frame handling.  */
@@ -1184,7 +1175,6 @@  or1k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
   set_gdbarch_push_dummy_code (gdbarch, or1k_push_dummy_code);
   set_gdbarch_push_dummy_call (gdbarch, or1k_push_dummy_call);
-  set_gdbarch_dummy_id (gdbarch, or1k_dummy_id);
 
   /* Frame unwinders.  Use DWARF debug info if available, otherwise use our
      own unwinder.  */
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index c732f2cbe27..7ef04627bef 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -2330,15 +2330,6 @@  riscv_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
   return frame_unwind_register_unsigned (next_frame, RISCV_SP_REGNUM);
 }
 
-/* Implement the dummy_id gdbarch method.  */
-
-static struct frame_id
-riscv_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  return frame_id_build (get_frame_register_signed (this_frame, RISCV_SP_REGNUM),
-			 get_frame_pc (this_frame));
-}
-
 /* Generate, or return the cached frame cache for the RiscV frame
    unwinder.  */
 
@@ -2542,7 +2533,6 @@  riscv_gdbarch_init (struct gdbarch_info info,
   set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
   set_gdbarch_push_dummy_code (gdbarch, riscv_push_dummy_code);
   set_gdbarch_push_dummy_call (gdbarch, riscv_push_dummy_call);
-  set_gdbarch_dummy_id (gdbarch, riscv_dummy_id);
 
   /* Frame unwinders.  Use DWARF debug info if available, otherwise use our own
      unwinder.  */
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index cf884b7f34f..26ccedb082c 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -3098,14 +3098,6 @@  find_variant_by_arch (enum bfd_architecture arch, unsigned long mach)
 }
 
 
-static struct frame_id
-rs6000_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  return frame_id_build (get_frame_register_unsigned
-			  (this_frame, gdbarch_sp_regnum (gdbarch)),
-			 get_frame_pc (this_frame));
-}
-
 struct rs6000_frame_cache
 {
   CORE_ADDR base;
@@ -6420,7 +6412,6 @@  rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
     case GDB_OSABI_UNKNOWN:
       frame_unwind_append_unwinder (gdbarch, &rs6000_epilogue_frame_unwind);
       frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
-      set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
       frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
       break;
     default:
@@ -6428,7 +6419,6 @@  rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
       frame_unwind_append_unwinder (gdbarch, &rs6000_epilogue_frame_unwind);
       frame_unwind_append_unwinder (gdbarch, &rs6000_frame_unwind);
-      set_gdbarch_dummy_id (gdbarch, rs6000_dummy_id);
       frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
     }
 
diff --git a/gdb/rx-tdep.c b/gdb/rx-tdep.c
index 3d982795db4..07e83d0e11e 100644
--- a/gdb/rx-tdep.c
+++ b/gdb/rx-tdep.c
@@ -761,15 +761,6 @@  rx_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
   return sp;
 }
 
-/* Implement the "dummy_id" gdbarch method.  */
-static struct frame_id
-rx_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  return
-    frame_id_build (get_frame_register_unsigned (this_frame, RX_SP_REGNUM),
-		    get_frame_pc (this_frame));
-}
-
 /* Implement the "push_dummy_call" gdbarch method.  */
 static CORE_ADDR
 rx_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
@@ -1137,7 +1128,6 @@  rx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   /* Methods for saving / extracting a dummy frame's ID.
      The ID's stack address must match the SP value returned by
      PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos.  */
-  set_gdbarch_dummy_id (gdbarch, rx_dummy_id);
   set_gdbarch_push_dummy_call (gdbarch, rx_push_dummy_call);
   set_gdbarch_return_value (gdbarch, rx_return_value);
 
diff --git a/gdb/score-tdep.c b/gdb/score-tdep.c
index e47d7ce18fa..f2d831899d1 100644
--- a/gdb/score-tdep.c
+++ b/gdb/score-tdep.c
@@ -472,14 +472,6 @@  score_return_value (struct gdbarch *gdbarch, struct value *function,
     }
 }
 
-static struct frame_id
-score_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  return frame_id_build (get_frame_register_unsigned (this_frame,
-						      SCORE_SP_REGNUM),
-			 get_frame_pc (this_frame));
-}
-
 static int
 score_type_needs_double_align (struct type *type)
 {
@@ -1511,7 +1503,6 @@  score_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   /* Dummy frame hooks.  */
   set_gdbarch_return_value (gdbarch, score_return_value);
   set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
-  set_gdbarch_dummy_id (gdbarch, score_dummy_id);
   set_gdbarch_push_dummy_call (gdbarch, score_push_dummy_call);
 
   /* Normal frame hooks.  */
diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c
index 6dd7e575e64..a65fd170c02 100644
--- a/gdb/sh-tdep.c
+++ b/gdb/sh-tdep.c
@@ -1982,14 +1982,6 @@  sh_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
 					 gdbarch_sp_regnum (gdbarch));
 }
 
-static struct frame_id
-sh_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame,
-					      gdbarch_sp_regnum (gdbarch));
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
 static CORE_ADDR
 sh_frame_base_address (struct frame_info *this_frame, void **this_cache)
 {
@@ -2299,7 +2291,6 @@  sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   set_gdbarch_frame_align (gdbarch, sh_frame_align);
   set_gdbarch_unwind_sp (gdbarch, sh_unwind_sp);
-  set_gdbarch_dummy_id (gdbarch, sh_dummy_id);
   frame_base_set_default (gdbarch, &sh_frame_base);
 
   set_gdbarch_stack_frame_destroyed_p (gdbarch, sh_stack_frame_destroyed_p);
diff --git a/gdb/tic6x-tdep.c b/gdb/tic6x-tdep.c
index 1d2671f155f..84fad648db1 100644
--- a/gdb/tic6x-tdep.c
+++ b/gdb/tic6x-tdep.c
@@ -801,16 +801,6 @@  tic6x_return_value (struct gdbarch *gdbarch, struct value *function,
   return RETURN_VALUE_REGISTER_CONVENTION;
 }
 
-/* This is the implementation of gdbarch method dummy_id.  */
-
-static struct frame_id
-tic6x_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  return frame_id_build
-    (get_frame_register_unsigned (this_frame, TIC6X_SP_REGNUM),
-     get_frame_pc (this_frame));
-}
-
 /* Get the alignment requirement of TYPE.  */
 
 static int
@@ -1292,8 +1282,6 @@  tic6x_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   set_gdbarch_return_value (gdbarch, tic6x_return_value);
 
-  set_gdbarch_dummy_id (gdbarch, tic6x_dummy_id);
-
   /* Enable inferior call support.  */
   set_gdbarch_push_dummy_call (gdbarch, tic6x_push_dummy_call);
 
diff --git a/gdb/tilegx-tdep.c b/gdb/tilegx-tdep.c
index 5885f60dbca..f8a8153bb3e 100644
--- a/gdb/tilegx-tdep.c
+++ b/gdb/tilegx-tdep.c
@@ -936,17 +936,6 @@  tilegx_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
   return frame_unwind_register_unsigned (next_frame, TILEGX_SP_REGNUM);
 }
 
-static struct frame_id
-tilegx_unwind_dummy_id (struct gdbarch *gdbarch,
-			struct frame_info *this_frame)
-{
-  CORE_ADDR sp;
-
-  sp = get_frame_register_unsigned (this_frame, TILEGX_SP_REGNUM);
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
-
 /* We cannot read/write the "special" registers.  */
 
 static int
@@ -1022,7 +1011,6 @@  tilegx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   /* Frame Info.  */
   set_gdbarch_unwind_sp (gdbarch, tilegx_unwind_sp);
-  set_gdbarch_dummy_id (gdbarch, tilegx_unwind_dummy_id);
   set_gdbarch_frame_align (gdbarch, tilegx_frame_align);
   frame_base_set_default (gdbarch, &tilegx_frame_base);
 
diff --git a/gdb/v850-tdep.c b/gdb/v850-tdep.c
index 0f08c64f1d1..6434ceb1de4 100644
--- a/gdb/v850-tdep.c
+++ b/gdb/v850-tdep.c
@@ -1333,14 +1333,6 @@  v850_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
 					 gdbarch_sp_regnum (gdbarch));
 } 
 
-static struct frame_id
-v850_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame,
-					      gdbarch_sp_regnum (gdbarch));
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-  
 static CORE_ADDR
 v850_frame_base_address (struct frame_info *this_frame, void **this_cache)
 {
@@ -1458,7 +1450,6 @@  v850_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   set_gdbarch_frame_align (gdbarch, v850_frame_align);
   set_gdbarch_unwind_sp (gdbarch, v850_unwind_sp);
-  set_gdbarch_dummy_id (gdbarch, v850_dummy_id);
   frame_base_set_default (gdbarch, &v850_frame_base);
 
   /* Hook in ABI-specific overrides, if they have been registered.  */
diff --git a/gdb/xstormy16-tdep.c b/gdb/xstormy16-tdep.c
index 45369cdf56a..ee378600958 100644
--- a/gdb/xstormy16-tdep.c
+++ b/gdb/xstormy16-tdep.c
@@ -757,14 +757,6 @@  xstormy16_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
   return frame_unwind_register_unsigned (next_frame, E_SP_REGNUM);
 }
 
-static struct frame_id
-xstormy16_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, E_SP_REGNUM);
-  return frame_id_build (sp, get_frame_pc (this_frame));
-}
-
-
 /* Function: xstormy16_gdbarch_init
    Initializer function for the xstormy16 gdbarch vector.
    Called by gdbarch.  Sets up the gdbarch vector(s) for this target.  */
@@ -819,7 +811,6 @@  xstormy16_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
    * Frame Info
    */
   set_gdbarch_unwind_sp (gdbarch, xstormy16_unwind_sp);
-  set_gdbarch_dummy_id (gdbarch, xstormy16_dummy_id);
   set_gdbarch_frame_align (gdbarch, xstormy16_frame_align);
   frame_base_set_default (gdbarch, &xstormy16_frame_base);