public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Change GDB to use frame_info_ptr
@ 2022-10-10 10:13 Bruno Larsen
  0 siblings, 0 replies; only message in thread
From: Bruno Larsen @ 2022-10-10 10:13 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=bd2b40ac129b167f1a709589dee9c009a04a6e21

commit bd2b40ac129b167f1a709589dee9c009a04a6e21
Author: Tom Tromey <tom@tromey.com>
Date:   Mon Jul 25 14:06:35 2022 -0300

    Change GDB to use frame_info_ptr
    
    This changes GDB to use frame_info_ptr instead of frame_info *
    The substitution was done with multiple sequential `sed` commands:
    
    sed 's/^struct frame_info;/class frame_info_ptr;/'
    sed 's/struct frame_info \*/frame_info_ptr /g' - which left some
        issues in a few files, that were manually fixed.
    sed 's/\<frame_info \*/frame_info_ptr /g'
    sed 's/frame_info_ptr $/frame_info_ptr/g' - used to remove whitespace
        problems.
    
    The changed files were then manually checked and some 'sed' changes
    undone, some constructors and some gets were added, according to what
    made sense, and what Tromey originally did
    
    Co-Authored-By: Bruno Larsen <blarsen@redhat.com>
    Approved-by: Tom Tomey <tom@tromey.com>

Diff:
---
 gdb/aarch64-fbsd-tdep.c             |   2 +-
 gdb/aarch64-linux-tdep.c            |   2 +-
 gdb/aarch64-tdep.c                  |  34 ++---
 gdb/ada-lang.c                      |  10 +-
 gdb/ada-lang.h                      |   4 +-
 gdb/alpha-linux-tdep.c              |   2 +-
 gdb/alpha-mdebug-tdep.c             |  16 +-
 gdb/alpha-netbsd-tdep.c             |   2 +-
 gdb/alpha-obsd-tdep.c               |   2 +-
 gdb/alpha-tdep.c                    |  22 +--
 gdb/alpha-tdep.h                    |   2 +-
 gdb/amd64-darwin-tdep.c             |   2 +-
 gdb/amd64-fbsd-tdep.c               |   2 +-
 gdb/amd64-linux-tdep.c              |   6 +-
 gdb/amd64-netbsd-tdep.c             |   4 +-
 gdb/amd64-obsd-tdep.c               |  12 +-
 gdb/amd64-sol2-tdep.c               |   2 +-
 gdb/amd64-tdep.c                    |  34 ++---
 gdb/amd64-tdep.h                    |   2 +-
 gdb/amd64-windows-tdep.c            |  12 +-
 gdb/arc-linux-tdep.c                |   4 +-
 gdb/arc-tdep.c                      |  20 +--
 gdb/arc-tdep.h                      |   4 +-
 gdb/arch-utils.c                    |   6 +-
 gdb/arch-utils.h                    |   8 +-
 gdb/arm-fbsd-tdep.c                 |   2 +-
 gdb/arm-linux-tdep.c                |  14 +-
 gdb/arm-obsd-tdep.c                 |   2 +-
 gdb/arm-tdep.c                      |  64 ++++----
 gdb/arm-tdep.h                      |   4 +-
 gdb/arm-wince-tdep.c                |   2 +-
 gdb/avr-tdep.c                      |  14 +-
 gdb/ax-gdb.c                        |   2 +-
 gdb/bfin-linux-tdep.c               |   2 +-
 gdb/bfin-tdep.c                     |  12 +-
 gdb/blockframe.c                    |   8 +-
 gdb/bpf-tdep.c                      |   8 +-
 gdb/break-catch-throw.c             |   2 +-
 gdb/breakpoint.c                    |  18 +--
 gdb/c-lang.c                        |   2 +-
 gdb/cli/cli-cmds.c                  |   2 +-
 gdb/compile/compile-c-symbols.c     |   2 +-
 gdb/compile/compile-cplus-symbols.c |   2 +-
 gdb/compile/compile-loc2c.c         |   2 +-
 gdb/cp-abi.c                        |   2 +-
 gdb/cp-abi.h                        |   6 +-
 gdb/cris-tdep.c                     |  36 ++---
 gdb/csky-linux-tdep.c               |   4 +-
 gdb/csky-tdep.c                     |  22 +--
 gdb/defs.h                          |   2 +-
 gdb/dtrace-probe.c                  |   4 +-
 gdb/dummy-frame.c                   |   8 +-
 gdb/dummy-frame.h                   |   2 +-
 gdb/dwarf2/expr.c                   |  20 +--
 gdb/dwarf2/expr.h                   |   6 +-
 gdb/dwarf2/frame-tailcall.c         |  41 ++---
 gdb/dwarf2/frame-tailcall.h         |   6 +-
 gdb/dwarf2/frame.c                  |  39 ++---
 gdb/dwarf2/frame.h                  |  12 +-
 gdb/dwarf2/loc.c                    |  38 ++---
 gdb/dwarf2/loc.h                    |   8 +-
 gdb/elfread.c                       |   2 +-
 gdb/eval.c                          |   2 +-
 gdb/extension-priv.h                |   2 +-
 gdb/extension.c                     |   2 +-
 gdb/extension.h                     |   4 +-
 gdb/f-valprint.c                    |   2 +-
 gdb/findvar.c                       |  26 ++--
 gdb/frame-base.c                    |   8 +-
 gdb/frame-base.h                    |  12 +-
 gdb/frame-unwind.c                  |  24 +--
 gdb/frame-unwind.h                  |  36 ++---
 gdb/frame.c                         | 292 ++++++++++++++++++------------------
 gdb/frame.h                         | 152 +++++++++----------
 gdb/frv-linux-tdep.c                |  10 +-
 gdb/frv-tdep.c                      |  10 +-
 gdb/ft32-tdep.c                     |   8 +-
 gdb/gcore.c                         |   2 +-
 gdb/gdbarch-components.py           |  30 ++--
 gdb/gdbarch-gen.h                   |  60 ++++----
 gdb/gdbarch-selftests.c             |   2 +-
 gdb/gdbarch.c                       |  30 ++--
 gdb/gdbtypes.h                      |   5 +-
 gdb/gnu-v3-abi.c                    |   2 +-
 gdb/guile/scm-frame.c               |   2 +-
 gdb/h8300-tdep.c                    |  12 +-
 gdb/hppa-bsd-tdep.c                 |   2 +-
 gdb/hppa-linux-tdep.c               |   8 +-
 gdb/hppa-netbsd-tdep.c              |   4 +-
 gdb/hppa-tdep.c                     |  32 ++--
 gdb/hppa-tdep.h                     |   8 +-
 gdb/i386-bsd-tdep.c                 |   2 +-
 gdb/i386-darwin-tdep.c              |   4 +-
 gdb/i386-darwin-tdep.h              |   2 +-
 gdb/i386-fbsd-tdep.c                |   2 +-
 gdb/i386-gnu-tdep.c                 |   6 +-
 gdb/i386-linux-tdep.c               |  10 +-
 gdb/i386-netbsd-tdep.c              |   4 +-
 gdb/i386-nto-tdep.c                 |   4 +-
 gdb/i386-obsd-tdep.c                |  10 +-
 gdb/i386-sol2-tdep.c                |   2 +-
 gdb/i386-tdep.c                     |  54 +++----
 gdb/i386-tdep.h                     |  10 +-
 gdb/i386-windows-tdep.c             |   2 +-
 gdb/i387-tdep.c                     |   6 +-
 gdb/i387-tdep.h                     |   8 +-
 gdb/ia64-libunwind-tdep.c           |  12 +-
 gdb/ia64-libunwind-tdep.h           |  12 +-
 gdb/ia64-tdep.c                     |  50 +++---
 gdb/ia64-tdep.h                     |   4 +-
 gdb/infcall.c                       |   4 +-
 gdb/infcmd.c                        |  28 ++--
 gdb/inferior.h                      |   6 +-
 gdb/infrun.c                        |  32 ++--
 gdb/infrun.h                        |   4 +-
 gdb/inline-frame.c                  |  14 +-
 gdb/inline-frame.h                  |   4 +-
 gdb/iq2000-tdep.c                   |  10 +-
 gdb/jit.c                           |  12 +-
 gdb/language.c                      |   6 +-
 gdb/language.h                      |   8 +-
 gdb/lm32-tdep.c                     |   8 +-
 gdb/loongarch-linux-tdep.c          |   4 +-
 gdb/loongarch-tdep.c                |   8 +-
 gdb/loongarch-tdep.h                |   2 +-
 gdb/m32c-tdep.c                     |  10 +-
 gdb/m32r-linux-tdep.c               |  14 +-
 gdb/m32r-tdep.c                     |   8 +-
 gdb/m68hc11-tdep.c                  |  16 +-
 gdb/m68k-linux-tdep.c               |  12 +-
 gdb/m68k-tdep.c                     |  18 +--
 gdb/m68k-tdep.h                     |   2 +-
 gdb/macroscope.c                    |   2 +-
 gdb/mep-tdep.c                      |   8 +-
 gdb/mi/mi-cmd-stack.c               |  22 +--
 gdb/mi/mi-main.c                    |  10 +-
 gdb/microblaze-linux-tdep.c         |   4 +-
 gdb/microblaze-tdep.c               |  10 +-
 gdb/minsyms.c                       |   2 +-
 gdb/mips-fbsd-tdep.c                |   4 +-
 gdb/mips-linux-tdep.c               |  22 +--
 gdb/mips-netbsd-tdep.c              |   2 +-
 gdb/mips-sde-tdep.c                 |  12 +-
 gdb/mips-tdep.c                     |  96 ++++++------
 gdb/mips-tdep.h                     |   2 +-
 gdb/mips64-obsd-tdep.c              |   2 +-
 gdb/mn10300-linux-tdep.c            |   4 +-
 gdb/mn10300-tdep.c                  |   8 +-
 gdb/moxie-tdep.c                    |   8 +-
 gdb/msp430-tdep.c                   |  10 +-
 gdb/nds32-tdep.c                    |  20 +--
 gdb/nios2-linux-tdep.c              |   4 +-
 gdb/nios2-tdep.c                    |  22 +--
 gdb/nios2-tdep.h                    |   2 +-
 gdb/objc-lang.c                     |  10 +-
 gdb/observable.h                    |   2 +-
 gdb/or1k-linux-tdep.c               |   4 +-
 gdb/or1k-tdep.c                     |  12 +-
 gdb/ppc-fbsd-tdep.c                 |   8 +-
 gdb/ppc-linux-tdep.c                |  12 +-
 gdb/ppc-netbsd-tdep.c               |   2 +-
 gdb/ppc-obsd-tdep.c                 |   8 +-
 gdb/ppc-tdep.h                      |   4 +-
 gdb/ppc64-tdep.c                    |  20 +--
 gdb/ppc64-tdep.h                    |   4 +-
 gdb/printcmd.c                      |   4 +-
 gdb/probe.c                         |   4 +-
 gdb/probe.h                         |   4 +-
 gdb/python/py-event.h               |   2 +-
 gdb/python/py-finishbreakpoint.c    |   4 +-
 gdb/python/py-frame.c               |  42 +++---
 gdb/python/py-framefilter.c         |  22 +--
 gdb/python/py-inferior.c            |   2 +-
 gdb/python/py-infevents.c           |   4 +-
 gdb/python/py-symbol.c              |   6 +-
 gdb/python/py-unwind.c              |  12 +-
 gdb/python/python-internal.h        |   6 +-
 gdb/record-btrace.c                 |  26 ++--
 gdb/riscv-fbsd-tdep.c               |   2 +-
 gdb/riscv-linux-tdep.c              |   6 +-
 gdb/riscv-tdep.c                    |  12 +-
 gdb/riscv-tdep.h                    |   2 +-
 gdb/rl78-tdep.c                     |  12 +-
 gdb/rs6000-aix-tdep.c               |  10 +-
 gdb/rs6000-tdep.c                   |  34 ++---
 gdb/rx-tdep.c                       |  16 +-
 gdb/s12z-tdep.c                     |  10 +-
 gdb/s390-linux-tdep.c               |   8 +-
 gdb/s390-tdep.c                     |  38 ++---
 gdb/s390-tdep.h                     |   2 +-
 gdb/sentinel-frame.c                |   6 +-
 gdb/sh-linux-tdep.c                 |   6 +-
 gdb/sh-tdep.c                       |  16 +-
 gdb/skip.c                          |   2 +-
 gdb/sol2-tdep.c                     |   2 +-
 gdb/sol2-tdep.h                     |   2 +-
 gdb/solib-svr4.c                    |   4 +-
 gdb/sparc-linux-tdep.c              |   6 +-
 gdb/sparc-netbsd-tdep.c             |  12 +-
 gdb/sparc-obsd-tdep.c               |   8 +-
 gdb/sparc-sol2-tdep.c               |   8 +-
 gdb/sparc-tdep.c                    |  20 +--
 gdb/sparc-tdep.h                    |  12 +-
 gdb/sparc64-fbsd-tdep.c             |   8 +-
 gdb/sparc64-linux-tdep.c            |   8 +-
 gdb/sparc64-netbsd-tdep.c           |  10 +-
 gdb/sparc64-obsd-tdep.c             |  16 +-
 gdb/sparc64-sol2-tdep.c             |   8 +-
 gdb/sparc64-tdep.c                  |  10 +-
 gdb/sparc64-tdep.h                  |   4 +-
 gdb/stack.c                         | 104 ++++++-------
 gdb/stack.h                         |   4 +-
 gdb/stap-probe.c                    |   4 +-
 gdb/std-regs.c                      |   8 +-
 gdb/symfile.h                       |   2 +-
 gdb/symtab.h                        |  10 +-
 gdb/tic6x-linux-tdep.c              |   4 +-
 gdb/tic6x-tdep.c                    |  22 +--
 gdb/tic6x-tdep.h                    |   2 +-
 gdb/tilegx-linux-tdep.c             |   2 +-
 gdb/tilegx-tdep.c                   |  12 +-
 gdb/top.c                           |   2 +-
 gdb/tracepoint.c                    |   2 +-
 gdb/trad-frame.c                    |  10 +-
 gdb/trad-frame.h                    |  10 +-
 gdb/tramp-frame.c                   |  10 +-
 gdb/tramp-frame.h                   |   6 +-
 gdb/tui/tui-disasm.c                |   2 +-
 gdb/tui/tui-disasm.h                |   2 +-
 gdb/tui/tui-hooks.c                 |   6 +-
 gdb/tui/tui-regs.c                  |   8 +-
 gdb/tui/tui-regs.h                  |   4 +-
 gdb/tui/tui-source.c                |   4 +-
 gdb/tui/tui-source.h                |   2 +-
 gdb/tui/tui-stack.c                 |   4 +-
 gdb/tui/tui-stack.h                 |   4 +-
 gdb/tui/tui-winsource.c             |   4 +-
 gdb/tui/tui-winsource.h             |   2 +-
 gdb/user-regs.c                     |   4 +-
 gdb/user-regs.h                     |   6 +-
 gdb/v850-tdep.c                     |  10 +-
 gdb/valops.c                        |  10 +-
 gdb/value.c                         |   4 +-
 gdb/value.h                         |  16 +-
 gdb/varobj.c                        |   8 +-
 gdb/vax-tdep.c                      |  14 +-
 gdb/xstormy16-tdep.c                |  12 +-
 gdb/xtensa-tdep.c                   |  22 +--
 gdb/z80-tdep.c                      |   6 +-
 249 files changed, 1527 insertions(+), 1522 deletions(-)

diff --git a/gdb/aarch64-fbsd-tdep.c b/gdb/aarch64-fbsd-tdep.c
index 4a6b4115234..f37729a4d01 100644
--- a/gdb/aarch64-fbsd-tdep.c
+++ b/gdb/aarch64-fbsd-tdep.c
@@ -80,7 +80,7 @@ static const struct regcache_map_entry aarch64_fbsd_fpregmap[] =
 
 static void
 aarch64_fbsd_sigframe_init (const struct tramp_frame *self,
-			     struct frame_info *this_frame,
+			     frame_info_ptr this_frame,
 			     struct trad_frame_cache *this_cache,
 			     CORE_ADDR func)
 {
diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c
index 15773c75da8..0954e219a25 100644
--- a/gdb/aarch64-linux-tdep.c
+++ b/gdb/aarch64-linux-tdep.c
@@ -283,7 +283,7 @@ aarch64_linux_restore_vreg (struct trad_frame_cache *cache, int num_regs,
 
 static void
 aarch64_linux_sigframe_init (const struct tramp_frame *self,
-			     struct frame_info *this_frame,
+			     frame_info_ptr this_frame,
 			     struct trad_frame_cache *this_cache,
 			     CORE_ADDR func)
 {
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index 78bf1225e97..32e85794ca5 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -216,7 +216,7 @@ class instruction_reader : public abstract_instruction_reader
 
 static CORE_ADDR
 aarch64_frame_unmask_lr (aarch64_gdbarch_tdep *tdep,
-			 struct frame_info *this_frame, CORE_ADDR addr)
+			 frame_info_ptr this_frame, CORE_ADDR addr)
 {
   if (tdep->has_pauth ()
       && frame_unwind_register_unsigned (this_frame,
@@ -236,7 +236,7 @@ aarch64_frame_unmask_lr (aarch64_gdbarch_tdep *tdep,
 /* Implement the "get_pc_address_flags" gdbarch method.  */
 
 static std::string
-aarch64_get_pc_address_flags (frame_info *frame, CORE_ADDR pc)
+aarch64_get_pc_address_flags (frame_info_ptr frame, CORE_ADDR pc)
 {
   if (pc != 0 && get_frame_pc_masked (frame))
     return "PAC";
@@ -927,7 +927,7 @@ aarch64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
    cache CACHE.  */
 
 static void
-aarch64_scan_prologue (struct frame_info *this_frame,
+aarch64_scan_prologue (frame_info_ptr this_frame,
 		       struct aarch64_prologue_cache *cache)
 {
   CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
@@ -981,7 +981,7 @@ aarch64_scan_prologue (struct frame_info *this_frame,
    not available.  */
 
 static void
-aarch64_make_prologue_cache_1 (struct frame_info *this_frame,
+aarch64_make_prologue_cache_1 (frame_info_ptr this_frame,
 			       struct aarch64_prologue_cache *cache)
 {
   CORE_ADDR unwound_fp;
@@ -1016,7 +1016,7 @@ aarch64_make_prologue_cache_1 (struct frame_info *this_frame,
    *THIS_CACHE.  */
 
 static struct aarch64_prologue_cache *
-aarch64_make_prologue_cache (struct frame_info *this_frame, void **this_cache)
+aarch64_make_prologue_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct aarch64_prologue_cache *cache;
 
@@ -1043,7 +1043,7 @@ aarch64_make_prologue_cache (struct frame_info *this_frame, void **this_cache)
 /* Implement the "stop_reason" frame_unwind method.  */
 
 static enum unwind_stop_reason
-aarch64_prologue_frame_unwind_stop_reason (struct frame_info *this_frame,
+aarch64_prologue_frame_unwind_stop_reason (frame_info_ptr this_frame,
 					   void **this_cache)
 {
   struct aarch64_prologue_cache *cache
@@ -1069,7 +1069,7 @@ aarch64_prologue_frame_unwind_stop_reason (struct frame_info *this_frame,
    PC and the caller's SP when we were called.  */
 
 static void
-aarch64_prologue_this_id (struct frame_info *this_frame,
+aarch64_prologue_this_id (frame_info_ptr this_frame,
 			  void **this_cache, struct frame_id *this_id)
 {
   struct aarch64_prologue_cache *cache
@@ -1084,7 +1084,7 @@ aarch64_prologue_this_id (struct frame_info *this_frame,
 /* Implement the "prev_register" frame_unwind method.  */
 
 static struct value *
-aarch64_prologue_prev_register (struct frame_info *this_frame,
+aarch64_prologue_prev_register (frame_info_ptr this_frame,
 				void **this_cache, int prev_regnum)
 {
   struct aarch64_prologue_cache *cache
@@ -1150,7 +1150,7 @@ static frame_unwind aarch64_prologue_unwind =
    *THIS_CACHE.  */
 
 static struct aarch64_prologue_cache *
-aarch64_make_stub_cache (struct frame_info *this_frame, void **this_cache)
+aarch64_make_stub_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct aarch64_prologue_cache *cache;
 
@@ -1180,7 +1180,7 @@ aarch64_make_stub_cache (struct frame_info *this_frame, void **this_cache)
 /* Implement the "stop_reason" frame_unwind method.  */
 
 static enum unwind_stop_reason
-aarch64_stub_frame_unwind_stop_reason (struct frame_info *this_frame,
+aarch64_stub_frame_unwind_stop_reason (frame_info_ptr this_frame,
 				       void **this_cache)
 {
   struct aarch64_prologue_cache *cache
@@ -1195,7 +1195,7 @@ aarch64_stub_frame_unwind_stop_reason (struct frame_info *this_frame,
 /* Our frame ID for a stub frame is the current SP and LR.  */
 
 static void
-aarch64_stub_this_id (struct frame_info *this_frame,
+aarch64_stub_this_id (frame_info_ptr this_frame,
 		      void **this_cache, struct frame_id *this_id)
 {
   struct aarch64_prologue_cache *cache
@@ -1211,7 +1211,7 @@ aarch64_stub_this_id (struct frame_info *this_frame,
 
 static int
 aarch64_stub_unwind_sniffer (const struct frame_unwind *self,
-			     struct frame_info *this_frame,
+			     frame_info_ptr this_frame,
 			     void **this_prologue_cache)
 {
   CORE_ADDR addr_in_block;
@@ -1242,7 +1242,7 @@ static frame_unwind aarch64_stub_unwind =
 /* Return the frame base address of *THIS_FRAME.  */
 
 static CORE_ADDR
-aarch64_normal_frame_base (struct frame_info *this_frame, void **this_cache)
+aarch64_normal_frame_base (frame_info_ptr this_frame, void **this_cache)
 {
   struct aarch64_prologue_cache *cache
     = aarch64_make_prologue_cache (this_frame, this_cache);
@@ -1263,7 +1263,7 @@ static frame_base aarch64_normal_base =
    *THIS_FRAME.  */
 
 static struct value *
-aarch64_dwarf2_prev_register (struct frame_info *this_frame,
+aarch64_dwarf2_prev_register (frame_info_ptr this_frame,
 			      void **this_cache, int regnum)
 {
   gdbarch *arch = get_frame_arch (this_frame);
@@ -1291,7 +1291,7 @@ static const unsigned char op_lit1 = DW_OP_lit1;
 static void
 aarch64_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
 			       struct dwarf2_frame_state_reg *reg,
-			       struct frame_info *this_frame)
+			       frame_info_ptr this_frame)
 {
   aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
 
@@ -2491,7 +2491,7 @@ aarch64_return_value (struct gdbarch *gdbarch, struct value *func_value,
 /* Implement the "get_longjmp_target" gdbarch method.  */
 
 static int
-aarch64_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
+aarch64_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
 {
   CORE_ADDR jb_addr;
   gdb_byte buf[X_REGISTER_SIZE];
@@ -2921,7 +2921,7 @@ aarch64_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
 /* Callback function for user_reg_add.  */
 
 static struct value *
-value_of_aarch64_user_reg (struct frame_info *frame, const void *baton)
+value_of_aarch64_user_reg (frame_info_ptr frame, const void *baton)
 {
   const int *reg_p = (const int *) baton;
 
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index ac23eb5938c..0e3f0daa416 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -11840,7 +11840,7 @@ ada_exception_support_info_sniffer (void)
    to most users.  */
 
 static int
-is_known_support_routine (struct frame_info *frame)
+is_known_support_routine (frame_info_ptr frame)
 {
   enum language func_lang;
   int i;
@@ -11899,7 +11899,7 @@ is_known_support_routine (struct frame_info *frame)
    part of the Ada run-time, starting from FI and moving upward.  */
 
 void
-ada_find_printable_frame (struct frame_info *fi)
+ada_find_printable_frame (frame_info_ptr fi)
 {
   for (; fi != NULL; fi = get_prev_frame (fi))
     {
@@ -11933,7 +11933,7 @@ static CORE_ADDR
 ada_unhandled_exception_name_addr_from_raise (void)
 {
   int frame_level;
-  struct frame_info *fi;
+  frame_info_ptr fi;
   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
 
   /* To determine the name of this exception, we need to select
@@ -13048,7 +13048,7 @@ ada_add_standard_exceptions (compiled_regex *preg,
 
 static void
 ada_add_exceptions_from_frame (compiled_regex *preg,
-			       struct frame_info *frame,
+			       frame_info_ptr frame,
 			       std::vector<ada_exc_info> *exceptions)
 {
   const struct block *block = get_frame_block (frame, 0);
@@ -13477,7 +13477,7 @@ public:
 
   struct value *read_var_value (struct symbol *var,
 				const struct block *var_block,
-				struct frame_info *frame) const override
+				frame_info_ptr frame) const override
   {
     /* The only case where default_read_var_value is not sufficient
        is when VAR is a renaming...  */
diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h
index 0dcdb56c198..df648c2297e 100644
--- a/gdb/ada-lang.h
+++ b/gdb/ada-lang.h
@@ -20,7 +20,7 @@
 #if !defined (ADA_LANG_H)
 #define ADA_LANG_H 1
 
-struct frame_info;
+class frame_info_ptr;
 struct inferior;
 struct type_print_options;
 struct parser_state;
@@ -334,7 +334,7 @@ extern enum ada_renaming_category ada_parse_renaming (struct symbol *,
 						      const char **,
 						      int *, const char **);
 
-extern void ada_find_printable_frame (struct frame_info *fi);
+extern void ada_find_printable_frame (frame_info_ptr fi);
 
 extern char *ada_breakpoint_rewrite (char *, int *);
 
diff --git a/gdb/alpha-linux-tdep.c b/gdb/alpha-linux-tdep.c
index c103aafc1ff..3a6a9aea160 100644
--- a/gdb/alpha-linux-tdep.c
+++ b/gdb/alpha-linux-tdep.c
@@ -126,7 +126,7 @@ alpha_linux_pc_in_sigtramp (struct gdbarch *gdbarch,
 }
 
 static CORE_ADDR
-alpha_linux_sigcontext_addr (struct frame_info *this_frame)
+alpha_linux_sigcontext_addr (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR pc;
diff --git a/gdb/alpha-mdebug-tdep.c b/gdb/alpha-mdebug-tdep.c
index 10169c76c37..01f84f7fc3e 100644
--- a/gdb/alpha-mdebug-tdep.c
+++ b/gdb/alpha-mdebug-tdep.c
@@ -187,7 +187,7 @@ struct alpha_mdebug_unwind_cache
    and store the resulting register save locations in the structure.  */
 
 static struct alpha_mdebug_unwind_cache *
-alpha_mdebug_frame_unwind_cache (struct frame_info *this_frame, 
+alpha_mdebug_frame_unwind_cache (frame_info_ptr this_frame, 
 				 void **this_prologue_cache)
 {
   struct alpha_mdebug_unwind_cache *info;
@@ -264,7 +264,7 @@ alpha_mdebug_frame_unwind_cache (struct frame_info *this_frame,
    frame.  This will be used to create a new GDB frame struct.  */
 
 static void
-alpha_mdebug_frame_this_id (struct frame_info *this_frame,
+alpha_mdebug_frame_this_id (frame_info_ptr this_frame,
 			    void **this_prologue_cache,
 			    struct frame_id *this_id)
 {
@@ -277,7 +277,7 @@ alpha_mdebug_frame_this_id (struct frame_info *this_frame,
 /* Retrieve the value of REGNUM in FRAME.  Don't give up!  */
 
 static struct value *
-alpha_mdebug_frame_prev_register (struct frame_info *this_frame,
+alpha_mdebug_frame_prev_register (frame_info_ptr this_frame,
 				  void **this_prologue_cache, int regnum)
 {
   struct alpha_mdebug_unwind_cache *info
@@ -308,7 +308,7 @@ alpha_mdebug_max_frame_size_exceeded (struct mdebug_extra_func_info *proc_desc)
 
 static int
 alpha_mdebug_frame_sniffer (const struct frame_unwind *self,
-			    struct frame_info *this_frame,
+			    frame_info_ptr this_frame,
 			    void **this_cache)
 {
   CORE_ADDR pc = get_frame_address_in_block (this_frame);
@@ -345,7 +345,7 @@ static const struct frame_unwind alpha_mdebug_frame_unwind =
 };
 
 static CORE_ADDR
-alpha_mdebug_frame_base_address (struct frame_info *this_frame,
+alpha_mdebug_frame_base_address (frame_info_ptr this_frame,
 				 void **this_prologue_cache)
 {
   struct alpha_mdebug_unwind_cache *info
@@ -355,7 +355,7 @@ alpha_mdebug_frame_base_address (struct frame_info *this_frame,
 }
 
 static CORE_ADDR
-alpha_mdebug_frame_locals_address (struct frame_info *this_frame,
+alpha_mdebug_frame_locals_address (frame_info_ptr this_frame,
 				   void **this_prologue_cache)
 {
   struct alpha_mdebug_unwind_cache *info
@@ -365,7 +365,7 @@ alpha_mdebug_frame_locals_address (struct frame_info *this_frame,
 }
 
 static CORE_ADDR
-alpha_mdebug_frame_args_address (struct frame_info *this_frame,
+alpha_mdebug_frame_args_address (frame_info_ptr this_frame,
 				 void **this_prologue_cache)
 {
   struct alpha_mdebug_unwind_cache *info
@@ -382,7 +382,7 @@ static const struct frame_base alpha_mdebug_frame_base = {
 };
 
 static const struct frame_base *
-alpha_mdebug_frame_base_sniffer (struct frame_info *this_frame)
+alpha_mdebug_frame_base_sniffer (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_address_in_block (this_frame);
   struct mdebug_extra_func_info *proc_desc;
diff --git a/gdb/alpha-netbsd-tdep.c b/gdb/alpha-netbsd-tdep.c
index 72d7019377f..ae2deca2c85 100644
--- a/gdb/alpha-netbsd-tdep.c
+++ b/gdb/alpha-netbsd-tdep.c
@@ -235,7 +235,7 @@ alphanbsd_pc_in_sigtramp (struct gdbarch *gdbarch,
 }
 
 static CORE_ADDR
-alphanbsd_sigcontext_addr (struct frame_info *frame)
+alphanbsd_sigcontext_addr (frame_info_ptr frame)
 {
   /* FIXME: This is not correct for all versions of NetBSD/alpha.
      We will probably need to disassemble the trampoline to figure
diff --git a/gdb/alpha-obsd-tdep.c b/gdb/alpha-obsd-tdep.c
index c0d672c3f72..41c376c6503 100644
--- a/gdb/alpha-obsd-tdep.c
+++ b/gdb/alpha-obsd-tdep.c
@@ -69,7 +69,7 @@ alphaobsd_pc_in_sigtramp (struct gdbarch *gdbarch,
 }
 
 static CORE_ADDR
-alphaobsd_sigcontext_addr (struct frame_info *this_frame)
+alphaobsd_sigcontext_addr (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR pc = get_frame_pc (this_frame);
diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c
index 9b3dbca8cde..646d4270636 100644
--- a/gdb/alpha-tdep.c
+++ b/gdb/alpha-tdep.c
@@ -234,7 +234,7 @@ alpha_convert_register_p (struct gdbarch *gdbarch, int regno,
 }
 
 static int
-alpha_register_to_value (struct frame_info *frame, int regnum,
+alpha_register_to_value (frame_info_ptr frame, int regnum,
 			 struct type *valtype, gdb_byte *out,
 			int *optimizedp, int *unavailablep)
 {
@@ -261,7 +261,7 @@ alpha_register_to_value (struct frame_info *frame, int regnum,
 }
 
 static void
-alpha_value_to_register (struct frame_info *frame, int regnum,
+alpha_value_to_register (frame_info_ptr frame, int regnum,
 			 struct type *valtype, const gdb_byte *in)
 {
   gdb_byte out[ALPHA_REGISTER_SIZE];
@@ -844,7 +844,7 @@ alpha_deal_with_atomic_sequence (struct gdbarch *gdbarch, CORE_ADDR pc)
    into the "pc".  This routine returns true on success.  */
 
 static int
-alpha_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
+alpha_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
   alpha_gdbarch_tdep *tdep = gdbarch_tdep<alpha_gdbarch_tdep> (gdbarch);
@@ -875,7 +875,7 @@ struct alpha_sigtramp_unwind_cache
 };
 
 static struct alpha_sigtramp_unwind_cache *
-alpha_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
+alpha_sigtramp_frame_unwind_cache (frame_info_ptr this_frame,
 				   void **this_prologue_cache)
 {
   struct alpha_sigtramp_unwind_cache *info;
@@ -916,7 +916,7 @@ alpha_sigtramp_register_address (struct gdbarch *gdbarch,
    frame.  This will be used to create a new GDB frame struct.  */
 
 static void
-alpha_sigtramp_frame_this_id (struct frame_info *this_frame,
+alpha_sigtramp_frame_this_id (frame_info_ptr this_frame,
 			      void **this_prologue_cache,
 			      struct frame_id *this_id)
 {
@@ -958,7 +958,7 @@ alpha_sigtramp_frame_this_id (struct frame_info *this_frame,
 /* Retrieve the value of REGNUM in FRAME.  Don't give up!  */
 
 static struct value *
-alpha_sigtramp_frame_prev_register (struct frame_info *this_frame,
+alpha_sigtramp_frame_prev_register (frame_info_ptr this_frame,
 				    void **this_prologue_cache, int regnum)
 {
   struct alpha_sigtramp_unwind_cache *info
@@ -983,7 +983,7 @@ alpha_sigtramp_frame_prev_register (struct frame_info *this_frame,
 
 static int
 alpha_sigtramp_frame_sniffer (const struct frame_unwind *self,
-			      struct frame_info *this_frame,
+			      frame_info_ptr this_frame,
 			      void **this_prologue_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -1225,7 +1225,7 @@ alpha_heuristic_analyze_probing_loop (struct gdbarch *gdbarch, CORE_ADDR *pc,
 }
 
 static struct alpha_heuristic_unwind_cache *
-alpha_heuristic_frame_unwind_cache (struct frame_info *this_frame,
+alpha_heuristic_frame_unwind_cache (frame_info_ptr this_frame,
 				    void **this_prologue_cache,
 				    CORE_ADDR start_pc)
 {
@@ -1402,7 +1402,7 @@ alpha_heuristic_frame_unwind_cache (struct frame_info *this_frame,
    frame.  This will be used to create a new GDB frame struct.  */
 
 static void
-alpha_heuristic_frame_this_id (struct frame_info *this_frame,
+alpha_heuristic_frame_this_id (frame_info_ptr this_frame,
 			       void **this_prologue_cache,
 			       struct frame_id *this_id)
 {
@@ -1415,7 +1415,7 @@ alpha_heuristic_frame_this_id (struct frame_info *this_frame,
 /* Retrieve the value of REGNUM in FRAME.  Don't give up!  */
 
 static struct value *
-alpha_heuristic_frame_prev_register (struct frame_info *this_frame,
+alpha_heuristic_frame_prev_register (frame_info_ptr this_frame,
 				     void **this_prologue_cache, int regnum)
 {
   struct alpha_heuristic_unwind_cache *info
@@ -1442,7 +1442,7 @@ static const struct frame_unwind alpha_heuristic_frame_unwind =
 };
 
 static CORE_ADDR
-alpha_heuristic_frame_base_address (struct frame_info *this_frame,
+alpha_heuristic_frame_base_address (frame_info_ptr this_frame,
 				    void **this_prologue_cache)
 {
   struct alpha_heuristic_unwind_cache *info
diff --git a/gdb/alpha-tdep.h b/gdb/alpha-tdep.h
index bc4a8407249..c12d7ec92ae 100644
--- a/gdb/alpha-tdep.h
+++ b/gdb/alpha-tdep.h
@@ -81,7 +81,7 @@ struct alpha_gdbarch_tdep : gdbarch_tdep_base
 
   /* Translate a signal handler stack base address into the address of
      the sigcontext structure for that signal handler.  */
-  CORE_ADDR (*sigcontext_addr) (struct frame_info *) = nullptr;
+  CORE_ADDR (*sigcontext_addr) (frame_info_ptr ) = nullptr;
 
   /* Does the PC fall in a signal trampoline.  */
   /* NOTE: cagney/2004-04-30: Do not copy/clone this code.  Instead
diff --git a/gdb/amd64-darwin-tdep.c b/gdb/amd64-darwin-tdep.c
index 718bf4996e5..86819cf148f 100644
--- a/gdb/amd64-darwin-tdep.c
+++ b/gdb/amd64-darwin-tdep.c
@@ -75,7 +75,7 @@ const int amd64_darwin_thread_state_num_regs =
    address of the associated sigcontext structure.  */
 
 static CORE_ADDR
-amd64_darwin_sigcontext_addr (struct frame_info *this_frame)
+amd64_darwin_sigcontext_addr (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
diff --git a/gdb/amd64-fbsd-tdep.c b/gdb/amd64-fbsd-tdep.c
index 8e40283d838..960bb0b5942 100644
--- a/gdb/amd64-fbsd-tdep.c
+++ b/gdb/amd64-fbsd-tdep.c
@@ -169,7 +169,7 @@ const struct regset amd64_fbsd_segbases_regset =
 
 static void
 amd64_fbsd_sigframe_init (const struct tramp_frame *self,
-			  struct frame_info *this_frame,
+			  frame_info_ptr this_frame,
 			  struct trad_frame_cache *this_cache,
 			  CORE_ADDR func)
 {
diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index 35703a36785..07c1669f91e 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -133,7 +133,7 @@ static const gdb_byte amd64_x32_linux_sigtramp_code[] =
    the routine.  Otherwise, return 0.  */
 
 static CORE_ADDR
-amd64_linux_sigtramp_start (struct frame_info *this_frame)
+amd64_linux_sigtramp_start (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch;
   const gdb_byte *sigtramp_code;
@@ -175,7 +175,7 @@ amd64_linux_sigtramp_start (struct frame_info *this_frame)
    routine.  */
 
 static int
-amd64_linux_sigtramp_p (struct frame_info *this_frame)
+amd64_linux_sigtramp_p (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
   const char *name;
@@ -201,7 +201,7 @@ amd64_linux_sigtramp_p (struct frame_info *this_frame)
    address of the associated sigcontext structure.  */
 
 static CORE_ADDR
-amd64_linux_sigcontext_addr (struct frame_info *this_frame)
+amd64_linux_sigcontext_addr (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
diff --git a/gdb/amd64-netbsd-tdep.c b/gdb/amd64-netbsd-tdep.c
index 59d723caa55..ec6906c12fb 100644
--- a/gdb/amd64-netbsd-tdep.c
+++ b/gdb/amd64-netbsd-tdep.c
@@ -35,7 +35,7 @@
    routine.  */
 
 static int
-amd64nbsd_sigtramp_p (struct frame_info *this_frame)
+amd64nbsd_sigtramp_p (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
   const char *name;
@@ -48,7 +48,7 @@ amd64nbsd_sigtramp_p (struct frame_info *this_frame)
    return the address of the associated mcontext structure.  */
 
 static CORE_ADDR
-amd64nbsd_mcontext_addr (struct frame_info *this_frame)
+amd64nbsd_mcontext_addr (frame_info_ptr this_frame)
 {
   CORE_ADDR addr;
 
diff --git a/gdb/amd64-obsd-tdep.c b/gdb/amd64-obsd-tdep.c
index f0bc7c474a6..22cf7f5d6c2 100644
--- a/gdb/amd64-obsd-tdep.c
+++ b/gdb/amd64-obsd-tdep.c
@@ -45,7 +45,7 @@ static const int amd64obsd_page_size = 4096;
    routine.  */
 
 static int
-amd64obsd_sigtramp_p (struct frame_info *this_frame)
+amd64obsd_sigtramp_p (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
   CORE_ADDR start_pc = (pc & ~(amd64obsd_page_size - 1));
@@ -98,7 +98,7 @@ amd64obsd_sigtramp_p (struct frame_info *this_frame)
    address of the associated sigcontext structure.  */
 
 static CORE_ADDR
-amd64obsd_sigcontext_addr (struct frame_info *this_frame)
+amd64obsd_sigcontext_addr (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
   ULONGEST offset = (pc & (amd64obsd_page_size - 1));
@@ -315,7 +315,7 @@ amd64obsd_collect_uthread (const struct regcache *regcache,
 #define amd64obsd_tf_reg_offset amd64obsd_sc_reg_offset
 
 static struct trad_frame_cache *
-amd64obsd_trapframe_cache (struct frame_info *this_frame, void **this_cache)
+amd64obsd_trapframe_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -362,7 +362,7 @@ amd64obsd_trapframe_cache (struct frame_info *this_frame, void **this_cache)
 }
 
 static void
-amd64obsd_trapframe_this_id (struct frame_info *this_frame,
+amd64obsd_trapframe_this_id (frame_info_ptr this_frame,
 			     void **this_cache, struct frame_id *this_id)
 {
   struct trad_frame_cache *cache =
@@ -372,7 +372,7 @@ amd64obsd_trapframe_this_id (struct frame_info *this_frame,
 }
 
 static struct value *
-amd64obsd_trapframe_prev_register (struct frame_info *this_frame,
+amd64obsd_trapframe_prev_register (frame_info_ptr this_frame,
 				   void **this_cache, int regnum)
 {
   struct trad_frame_cache *cache =
@@ -383,7 +383,7 @@ amd64obsd_trapframe_prev_register (struct frame_info *this_frame,
 
 static int
 amd64obsd_trapframe_sniffer (const struct frame_unwind *self,
-			     struct frame_info *this_frame,
+			     frame_info_ptr this_frame,
 			     void **this_prologue_cache)
 {
   ULONGEST cs;
diff --git a/gdb/amd64-sol2-tdep.c b/gdb/amd64-sol2-tdep.c
index ce96eb045ec..f62240fcd55 100644
--- a/gdb/amd64-sol2-tdep.c
+++ b/gdb/amd64-sol2-tdep.c
@@ -67,7 +67,7 @@ static int amd64_sol2_gregset_reg_offset[] = {
    'mcontext_t' that contains the saved set of machine registers.  */
 
 static CORE_ADDR
-amd64_sol2_mcontext_addr (struct frame_info *this_frame)
+amd64_sol2_mcontext_addr (frame_info_ptr this_frame)
 {
   CORE_ADDR sp, ucontext_addr;
 
diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
index ea2b3b1ecc3..ccdceeef0e5 100644
--- a/gdb/amd64-tdep.c
+++ b/gdb/amd64-tdep.c
@@ -2560,7 +2560,7 @@ amd64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
 /* Normal frames.  */
 
 static void
-amd64_frame_cache_1 (struct frame_info *this_frame,
+amd64_frame_cache_1 (frame_info_ptr this_frame,
 		     struct amd64_frame_cache *cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -2629,7 +2629,7 @@ amd64_frame_cache_1 (struct frame_info *this_frame,
 }
 
 static struct amd64_frame_cache *
-amd64_frame_cache (struct frame_info *this_frame, void **this_cache)
+amd64_frame_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct amd64_frame_cache *cache;
 
@@ -2653,7 +2653,7 @@ amd64_frame_cache (struct frame_info *this_frame, void **this_cache)
 }
 
 static enum unwind_stop_reason
-amd64_frame_unwind_stop_reason (struct frame_info *this_frame,
+amd64_frame_unwind_stop_reason (frame_info_ptr this_frame,
 				void **this_cache)
 {
   struct amd64_frame_cache *cache =
@@ -2670,7 +2670,7 @@ amd64_frame_unwind_stop_reason (struct frame_info *this_frame,
 }
 
 static void
-amd64_frame_this_id (struct frame_info *this_frame, void **this_cache,
+amd64_frame_this_id (frame_info_ptr this_frame, void **this_cache,
 		     struct frame_id *this_id)
 {
   struct amd64_frame_cache *cache =
@@ -2688,7 +2688,7 @@ amd64_frame_this_id (struct frame_info *this_frame, void **this_cache,
 }
 
 static struct value *
-amd64_frame_prev_register (struct frame_info *this_frame, void **this_cache,
+amd64_frame_prev_register (frame_info_ptr this_frame, void **this_cache,
 			   int regnum)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -2742,7 +2742,7 @@ amd64_gen_return_address (struct gdbarch *gdbarch,
    on both platforms.  */
 
 static struct amd64_frame_cache *
-amd64_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
+amd64_sigtramp_frame_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   i386_gdbarch_tdep *tdep = gdbarch_tdep<i386_gdbarch_tdep> (gdbarch);
@@ -2782,7 +2782,7 @@ amd64_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
 }
 
 static enum unwind_stop_reason
-amd64_sigtramp_frame_unwind_stop_reason (struct frame_info *this_frame,
+amd64_sigtramp_frame_unwind_stop_reason (frame_info_ptr this_frame,
 					 void **this_cache)
 {
   struct amd64_frame_cache *cache =
@@ -2795,7 +2795,7 @@ amd64_sigtramp_frame_unwind_stop_reason (struct frame_info *this_frame,
 }
 
 static void
-amd64_sigtramp_frame_this_id (struct frame_info *this_frame,
+amd64_sigtramp_frame_this_id (frame_info_ptr this_frame,
 			      void **this_cache, struct frame_id *this_id)
 {
   struct amd64_frame_cache *cache =
@@ -2813,7 +2813,7 @@ amd64_sigtramp_frame_this_id (struct frame_info *this_frame,
 }
 
 static struct value *
-amd64_sigtramp_frame_prev_register (struct frame_info *this_frame,
+amd64_sigtramp_frame_prev_register (frame_info_ptr this_frame,
 				    void **this_cache, int regnum)
 {
   /* Make sure we've initialized the cache.  */
@@ -2824,7 +2824,7 @@ amd64_sigtramp_frame_prev_register (struct frame_info *this_frame,
 
 static int
 amd64_sigtramp_frame_sniffer (const struct frame_unwind *self,
-			      struct frame_info *this_frame,
+			      frame_info_ptr this_frame,
 			      void **this_cache)
 {
   gdbarch *arch = get_frame_arch (this_frame);
@@ -2866,7 +2866,7 @@ static const struct frame_unwind amd64_sigtramp_frame_unwind =
 \f
 
 static CORE_ADDR
-amd64_frame_base_address (struct frame_info *this_frame, void **this_cache)
+amd64_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct amd64_frame_cache *cache =
     amd64_frame_cache (this_frame, this_cache);
@@ -2911,7 +2911,7 @@ amd64_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
 
 static int
 amd64_epilogue_frame_sniffer (const struct frame_unwind *self,
-			      struct frame_info *this_frame,
+			      frame_info_ptr this_frame,
 			      void **this_prologue_cache)
 {
   if (frame_relative_level (this_frame) == 0)
@@ -2922,7 +2922,7 @@ amd64_epilogue_frame_sniffer (const struct frame_unwind *self,
 }
 
 static struct amd64_frame_cache *
-amd64_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
+amd64_epilogue_frame_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -2963,7 +2963,7 @@ amd64_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
 }
 
 static enum unwind_stop_reason
-amd64_epilogue_frame_unwind_stop_reason (struct frame_info *this_frame,
+amd64_epilogue_frame_unwind_stop_reason (frame_info_ptr this_frame,
 					 void **this_cache)
 {
   struct amd64_frame_cache *cache
@@ -2976,7 +2976,7 @@ amd64_epilogue_frame_unwind_stop_reason (struct frame_info *this_frame,
 }
 
 static void
-amd64_epilogue_frame_this_id (struct frame_info *this_frame,
+amd64_epilogue_frame_this_id (frame_info_ptr this_frame,
 			      void **this_cache,
 			      struct frame_id *this_id)
 {
@@ -3001,7 +3001,7 @@ static const struct frame_unwind amd64_epilogue_frame_unwind =
 };
 
 static struct frame_id
-amd64_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
+amd64_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame)
 {
   CORE_ADDR fp;
 
@@ -3064,7 +3064,7 @@ const struct regset amd64_fpregset =
    success.  */
 
 static int
-amd64_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
+amd64_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
 {
   gdb_byte buf[8];
   CORE_ADDR jb_addr;
diff --git a/gdb/amd64-tdep.h b/gdb/amd64-tdep.h
index c18766e71c4..df85c60c19c 100644
--- a/gdb/amd64-tdep.h
+++ b/gdb/amd64-tdep.h
@@ -22,7 +22,7 @@
 #define AMD64_TDEP_H
 
 struct gdbarch;
-struct frame_info;
+class frame_info_ptr;
 struct regcache;
 
 #include "i386-tdep.h"
diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
index 8573e4c0676..0cc5feec2a4 100644
--- a/gdb/amd64-windows-tdep.c
+++ b/gdb/amd64-windows-tdep.c
@@ -513,7 +513,7 @@ pc_in_range (CORE_ADDR pc, const struct amd64_windows_frame_cache *cache)
    Return 1 if an epilogue sequence was recognized, 0 otherwise.  */
 
 static int
-amd64_windows_frame_decode_epilogue (struct frame_info *this_frame,
+amd64_windows_frame_decode_epilogue (frame_info_ptr this_frame,
 				     struct amd64_windows_frame_cache *cache)
 {
   /* According to MSDN an epilogue "must consist of either an add RSP,constant
@@ -693,7 +693,7 @@ amd64_windows_frame_decode_epilogue (struct frame_info *this_frame,
 /* Decode and execute unwind insns at UNWIND_INFO.  */
 
 static void
-amd64_windows_frame_decode_insns (struct frame_info *this_frame,
+amd64_windows_frame_decode_insns (frame_info_ptr this_frame,
 				  struct amd64_windows_frame_cache *cache,
 				  CORE_ADDR unwind_info)
 {
@@ -1073,7 +1073,7 @@ amd64_windows_find_unwind_info (struct gdbarch *gdbarch, CORE_ADDR pc,
    for THIS_FRAME.  */
 
 static struct amd64_windows_frame_cache *
-amd64_windows_frame_cache (struct frame_info *this_frame, void **this_cache)
+amd64_windows_frame_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -1118,7 +1118,7 @@ amd64_windows_frame_cache (struct frame_info *this_frame, void **this_cache)
    using the standard Windows x64 SEH info.  */
 
 static struct value *
-amd64_windows_frame_prev_register (struct frame_info *this_frame,
+amd64_windows_frame_prev_register (frame_info_ptr this_frame,
 				   void **this_cache, int regnum)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -1164,7 +1164,7 @@ amd64_windows_frame_prev_register (struct frame_info *this_frame,
    the standard Windows x64 SEH info.  */
 
 static void
-amd64_windows_frame_this_id (struct frame_info *this_frame, void **this_cache,
+amd64_windows_frame_this_id (frame_info_ptr this_frame, void **this_cache,
 		   struct frame_id *this_id)
 {
   struct amd64_windows_frame_cache *cache =
@@ -1230,7 +1230,7 @@ amd64_windows_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 /* Check Win64 DLL jmp trampolines and find jump destination.  */
 
 static CORE_ADDR
-amd64_windows_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
+amd64_windows_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
 {
   CORE_ADDR destination = 0;
   struct gdbarch *gdbarch = get_frame_arch (frame);
diff --git a/gdb/arc-linux-tdep.c b/gdb/arc-linux-tdep.c
index d72bdaf24ac..da7f4758c19 100644
--- a/gdb/arc-linux-tdep.c
+++ b/gdb/arc-linux-tdep.c
@@ -159,7 +159,7 @@ static const int arc_linux_core_reg_offsets[] = {
    Returns TRUE if this is a sigtramp frame.  */
 
 static bool
-arc_linux_is_sigtramp (struct frame_info *this_frame)
+arc_linux_is_sigtramp (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR pc = get_frame_pc (this_frame);
@@ -257,7 +257,7 @@ arc_linux_is_sigtramp (struct frame_info *this_frame)
    etc) in GDB hardcode values.  */
 
 static CORE_ADDR
-arc_linux_sigcontext_addr (struct frame_info *this_frame)
+arc_linux_sigcontext_addr (frame_info_ptr this_frame)
 {
   const int ucontext_offset = 0x80;
   const int sigcontext_offset = 0x14;
diff --git a/gdb/arc-tdep.c b/gdb/arc-tdep.c
index ee5cd87407e..edca4d0803d 100644
--- a/gdb/arc-tdep.c
+++ b/gdb/arc-tdep.c
@@ -997,7 +997,7 @@ arc_store_return_value (struct gdbarch *gdbarch, struct type *type,
 /* Implement the "get_longjmp_target" gdbarch method.  */
 
 static int
-arc_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
+arc_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
 {
   arc_debug_printf ("called");
 
@@ -1061,7 +1061,7 @@ arc_return_value (struct gdbarch *gdbarch, struct value *function,
    frame pointer.  */
 
 static CORE_ADDR
-arc_frame_base_address (struct frame_info *this_frame, void **prologue_cache)
+arc_frame_base_address (frame_info_ptr this_frame, void **prologue_cache)
 {
   return (CORE_ADDR) get_frame_register_unsigned (this_frame, ARC_FP_REGNUM);
 }
@@ -1642,7 +1642,7 @@ arc_print_frame_cache (struct gdbarch *gdbarch, const char *message,
 /* Frame unwinder for normal frames.  */
 
 static struct arc_frame_cache *
-arc_make_frame_cache (struct frame_info *this_frame)
+arc_make_frame_cache (frame_info_ptr this_frame)
 {
   arc_debug_printf ("called");
 
@@ -1709,7 +1709,7 @@ arc_make_frame_cache (struct frame_info *this_frame)
 /* Implement the "this_id" frame_unwind method.  */
 
 static void
-arc_frame_this_id (struct frame_info *this_frame, void **this_cache,
+arc_frame_this_id (frame_info_ptr this_frame, void **this_cache,
 		   struct frame_id *this_id)
 {
   arc_debug_printf ("called");
@@ -1754,7 +1754,7 @@ arc_frame_this_id (struct frame_info *this_frame, void **this_cache,
 /* Implement the "prev_register" frame_unwind method.  */
 
 static struct value *
-arc_frame_prev_register (struct frame_info *this_frame,
+arc_frame_prev_register (frame_info_ptr this_frame,
 			 void **this_cache, int regnum)
 {
   if (*this_cache == NULL)
@@ -1791,7 +1791,7 @@ arc_frame_prev_register (struct frame_info *this_frame,
 static void
 arc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
 			   struct dwarf2_frame_state_reg *reg,
-			   struct frame_info *info)
+			   frame_info_ptr info)
 {
   if (regnum == gdbarch_pc_regnum (gdbarch))
     /* The return address column.  */
@@ -1805,7 +1805,7 @@ arc_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
     from within signal handlers.  */
 
 static struct arc_frame_cache *
-arc_make_sigtramp_frame_cache (struct frame_info *this_frame)
+arc_make_sigtramp_frame_cache (frame_info_ptr this_frame)
 {
   arc_debug_printf ("called");
 
@@ -1844,7 +1844,7 @@ arc_make_sigtramp_frame_cache (struct frame_info *this_frame)
    frames.  */
 
 static void
-arc_sigtramp_frame_this_id (struct frame_info *this_frame,
+arc_sigtramp_frame_this_id (frame_info_ptr this_frame,
 			    void **this_cache, struct frame_id *this_id)
 {
   arc_debug_printf ("called");
@@ -1863,7 +1863,7 @@ arc_sigtramp_frame_this_id (struct frame_info *this_frame,
 /* Get a register from a signal handler frame.  */
 
 static struct value *
-arc_sigtramp_frame_prev_register (struct frame_info *this_frame,
+arc_sigtramp_frame_prev_register (frame_info_ptr this_frame,
 				  void **this_cache, int regnum)
 {
   arc_debug_printf ("regnum = %d", regnum);
@@ -1881,7 +1881,7 @@ arc_sigtramp_frame_prev_register (struct frame_info *this_frame,
 
 static int
 arc_sigtramp_frame_sniffer (const struct frame_unwind *self,
-			    struct frame_info *this_frame,
+			    frame_info_ptr this_frame,
 			    void **this_cache)
 {
   arc_debug_printf ("called");
diff --git a/gdb/arc-tdep.h b/gdb/arc-tdep.h
index eba435f62f0..56e0c49ae71 100644
--- a/gdb/arc-tdep.h
+++ b/gdb/arc-tdep.h
@@ -131,10 +131,10 @@ struct arc_gdbarch_tdep : gdbarch_tdep_base
   bool has_hw_loops = false;
 
   /* Detect sigtramp.  */
-  bool (*is_sigtramp) (struct frame_info *) = nullptr;
+  bool (*is_sigtramp) (frame_info_ptr ) = nullptr;
 
   /* Get address of sigcontext for sigtramp.  */
-  CORE_ADDR (*sigcontext_addr) (struct frame_info *) = nullptr;
+  CORE_ADDR (*sigcontext_addr) (frame_info_ptr ) = nullptr;
 
   /* Offset of registers in `struct sigcontext'.  */
   const int *sc_reg_offset = nullptr;
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
index 77269425ddc..100348444c0 100644
--- a/gdb/arch-utils.c
+++ b/gdb/arch-utils.c
@@ -132,7 +132,7 @@ default_get_memtag (struct gdbarch *gdbarch, struct value *address,
 }
 
 CORE_ADDR
-generic_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
+generic_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
 {
   return 0;
 }
@@ -158,7 +158,7 @@ generic_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
 
 int
 default_code_of_frame_writable (struct gdbarch *gdbarch,
-				struct frame_info *frame)
+				frame_info_ptr frame)
 {
   return 1;
 }
@@ -1077,7 +1077,7 @@ default_type_align (struct gdbarch *gdbarch, struct type *type)
 /* See arch-utils.h.  */
 
 std::string
-default_get_pc_address_flags (frame_info *frame, CORE_ADDR pc)
+default_get_pc_address_flags (frame_info_ptr frame, CORE_ADDR pc)
 {
   return "";
 }
diff --git a/gdb/arch-utils.h b/gdb/arch-utils.h
index f850e5fd6e7..f6229f434fd 100644
--- a/gdb/arch-utils.h
+++ b/gdb/arch-utils.h
@@ -22,7 +22,7 @@
 
 #include "gdbarch.h"
 
-struct frame_info;
+class frame_info_ptr;
 struct minimal_symbol;
 struct type;
 struct gdbarch_info;
@@ -154,7 +154,7 @@ struct value *default_get_memtag (struct gdbarch *gdbarch,
 				  struct value *address,
 				  memtag_type tag_type);
 
-extern CORE_ADDR generic_skip_trampoline_code (struct frame_info *frame,
+extern CORE_ADDR generic_skip_trampoline_code (frame_info_ptr frame,
 					       CORE_ADDR pc);
 
 extern CORE_ADDR generic_skip_solib_resolver (struct gdbarch *gdbarch,
@@ -167,7 +167,7 @@ extern int generic_stack_frame_destroyed_p (struct gdbarch *gdbarch,
 					    CORE_ADDR pc);
 
 extern int default_code_of_frame_writable (struct gdbarch *gdbarch,
-					   struct frame_info *frame);
+					   frame_info_ptr frame);
 
 /* By default, registers are not convertible.  */
 extern int generic_convert_register_p (struct gdbarch *gdbarch, int regnum,
@@ -291,7 +291,7 @@ extern ULONGEST default_type_align (struct gdbarch *gdbarch,
 				    struct type *type);
 
 /* Default implementation of gdbarch get_pc_address_flags method.  */
-extern std::string default_get_pc_address_flags (frame_info *frame,
+extern std::string default_get_pc_address_flags (frame_info_ptr frame,
 						 CORE_ADDR pc);
 
 /* Default implementation of gdbarch read_core_file_mappings method.  */
diff --git a/gdb/arm-fbsd-tdep.c b/gdb/arm-fbsd-tdep.c
index 61c8f0cecad..dabbceb743a 100644
--- a/gdb/arm-fbsd-tdep.c
+++ b/gdb/arm-fbsd-tdep.c
@@ -97,7 +97,7 @@ static const struct regcache_map_entry arm_fbsd_vfpregmap[] =
 
 static void
 arm_fbsd_sigframe_init (const struct tramp_frame *self,
-			struct frame_info *this_frame,
+			frame_info_ptr this_frame,
 			struct trad_frame_cache *this_cache,
 			CORE_ADDR func)
 {
diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c
index 1feb69fe6dd..86ab5794b37 100644
--- a/gdb/arm-linux-tdep.c
+++ b/gdb/arm-linux-tdep.c
@@ -277,7 +277,7 @@ static struct arm_get_next_pcs_ops arm_linux_get_next_pcs_ops = {
 };
 
 static void
-arm_linux_sigtramp_cache (struct frame_info *this_frame,
+arm_linux_sigtramp_cache (frame_info_ptr this_frame,
 			  struct trad_frame_cache *this_cache,
 			  CORE_ADDR func, int regs_offset)
 {
@@ -300,7 +300,7 @@ arm_linux_sigtramp_cache (struct frame_info *this_frame,
 /* See arm-linux.h for stack layout details.  */
 static void
 arm_linux_sigreturn_init (const struct tramp_frame *self,
-			  struct frame_info *this_frame,
+			  frame_info_ptr this_frame,
 			  struct trad_frame_cache *this_cache,
 			  CORE_ADDR func)
 {
@@ -320,7 +320,7 @@ arm_linux_sigreturn_init (const struct tramp_frame *self,
 
 static void
 arm_linux_rt_sigreturn_init (const struct tramp_frame *self,
-			  struct frame_info *this_frame,
+			  frame_info_ptr this_frame,
 			  struct trad_frame_cache *this_cache,
 			  CORE_ADDR func)
 {
@@ -343,7 +343,7 @@ arm_linux_rt_sigreturn_init (const struct tramp_frame *self,
 
 static void
 arm_linux_restart_syscall_init (const struct tramp_frame *self,
-				struct frame_info *this_frame,
+				frame_info_ptr this_frame,
 				struct trad_frame_cache *this_cache,
 				CORE_ADDR func)
 {
@@ -755,7 +755,7 @@ arm_linux_core_read_description (struct gdbarch *gdbarch,
    will return to ARM or Thumb code.  Return 0 if it is not a
    rt_sigreturn/sigreturn syscall.  */
 static int
-arm_linux_sigreturn_return_addr (struct frame_info *frame,
+arm_linux_sigreturn_return_addr (frame_info_ptr frame,
 				 unsigned long svc_number,
 				 CORE_ADDR *pc, int *is_thumb)
 {
@@ -975,7 +975,7 @@ arm_linux_copy_svc (struct gdbarch *gdbarch, struct regcache *regs,
 {
   CORE_ADDR return_to = 0;
 
-  struct frame_info *frame;
+  frame_info_ptr frame;
   unsigned int svc_number = displaced_read_reg (regs, dsc, 7);
   int is_sigreturn = 0;
   int is_thumb;
@@ -1687,7 +1687,7 @@ arm_linux_syscall_record (struct regcache *regcache, unsigned long svc_number)
 /* Implement the skip_trampoline_code gdbarch method.  */
 
 static CORE_ADDR
-arm_linux_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
+arm_linux_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
 {
   CORE_ADDR target_pc = arm_skip_stub (frame, pc);
 
diff --git a/gdb/arm-obsd-tdep.c b/gdb/arm-obsd-tdep.c
index 634c76b7561..697f0756112 100644
--- a/gdb/arm-obsd-tdep.c
+++ b/gdb/arm-obsd-tdep.c
@@ -30,7 +30,7 @@
 
 static void
 armobsd_sigframe_init (const struct tramp_frame *self,
-		       struct frame_info *this_frame,
+		       frame_info_ptr this_frame,
 		       struct trad_frame_cache *cache,
 		       CORE_ADDR func)
 {
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index d357066653b..041e6afefed 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -329,7 +329,7 @@ reconstruct_t_bit(struct gdbarch *gdbarch, CORE_ADDR lr, ULONGEST psr)
 static inline void
 arm_cache_init_sp (int regnum, CORE_ADDR* member,
 				      struct arm_prologue_cache *cache,
-				      struct frame_info *frame)
+				      frame_info_ptr frame)
 {
   CORE_ADDR val = get_frame_register_unsigned (frame, regnum);
   if (val == cache->sp)
@@ -352,7 +352,7 @@ arm_cache_init (struct arm_prologue_cache *cache, struct gdbarch *gdbarch)
 /* Similar to the previous function, but extracts GDBARCH from FRAME.  */
 
 static void
-arm_cache_init (struct arm_prologue_cache *cache, struct frame_info *frame)
+arm_cache_init (struct arm_prologue_cache *cache, frame_info_ptr frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
   arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
@@ -578,7 +578,7 @@ arm_is_thumb (struct regcache *regcache)
    frame.  */
 
 int
-arm_frame_is_thumb (struct frame_info *frame)
+arm_frame_is_thumb (frame_info_ptr frame)
 {
   /* Check the architecture of FRAME.  */
   struct gdbarch *gdbarch = get_frame_arch (frame);
@@ -2119,7 +2119,7 @@ arm_analyze_prologue (struct gdbarch *gdbarch,
 }
 
 static void
-arm_scan_prologue (struct frame_info *this_frame,
+arm_scan_prologue (frame_info_ptr this_frame,
 		   struct arm_prologue_cache *cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -2216,7 +2216,7 @@ arm_scan_prologue (struct frame_info *this_frame,
 }
 
 static struct arm_prologue_cache *
-arm_make_prologue_cache (struct frame_info *this_frame)
+arm_make_prologue_cache (frame_info_ptr this_frame)
 {
   int reg;
   struct arm_prologue_cache *cache;
@@ -2250,7 +2250,7 @@ arm_make_prologue_cache (struct frame_info *this_frame)
 /* Implementation of the stop_reason hook for arm_prologue frames.  */
 
 static enum unwind_stop_reason
-arm_prologue_unwind_stop_reason (struct frame_info *this_frame,
+arm_prologue_unwind_stop_reason (frame_info_ptr this_frame,
 				 void **this_cache)
 {
   struct arm_prologue_cache *cache;
@@ -2278,7 +2278,7 @@ arm_prologue_unwind_stop_reason (struct frame_info *this_frame,
    and the caller's SP when we were called.  */
 
 static void
-arm_prologue_this_id (struct frame_info *this_frame,
+arm_prologue_this_id (frame_info_ptr this_frame,
 		      void **this_cache,
 		      struct frame_id *this_id)
 {
@@ -2306,7 +2306,7 @@ arm_prologue_this_id (struct frame_info *this_frame,
 }
 
 static struct value *
-arm_prologue_prev_register (struct frame_info *this_frame,
+arm_prologue_prev_register (frame_info_ptr this_frame,
 			    void **this_cache,
 			    int prev_regnum)
 {
@@ -2702,7 +2702,7 @@ arm_find_exidx_entry (CORE_ADDR memaddr, CORE_ADDR *start)
    for the ARM Architecture" document.  */
 
 static struct arm_prologue_cache *
-arm_exidx_fill_cache (struct frame_info *this_frame, gdb_byte *entry)
+arm_exidx_fill_cache (frame_info_ptr this_frame, gdb_byte *entry)
 {
   CORE_ADDR vsp = 0;
   int vsp_valid = 0;
@@ -3000,7 +3000,7 @@ arm_exidx_fill_cache (struct frame_info *this_frame, gdb_byte *entry)
 
 static int
 arm_exidx_unwind_sniffer (const struct frame_unwind *self,
-			  struct frame_info *this_frame,
+			  frame_info_ptr this_frame,
 			  void **this_prologue_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -3099,7 +3099,7 @@ struct frame_unwind arm_exidx_unwind = {
 };
 
 static struct arm_prologue_cache *
-arm_make_epilogue_frame_cache (struct frame_info *this_frame)
+arm_make_epilogue_frame_cache (frame_info_ptr this_frame)
 {
   struct arm_prologue_cache *cache;
   int reg;
@@ -3131,7 +3131,7 @@ arm_make_epilogue_frame_cache (struct frame_info *this_frame)
    'struct frame_uwnind' for epilogue unwinder.  */
 
 static void
-arm_epilogue_frame_this_id (struct frame_info *this_frame,
+arm_epilogue_frame_this_id (frame_info_ptr this_frame,
 			    void **this_cache,
 			    struct frame_id *this_id)
 {
@@ -3159,7 +3159,7 @@ arm_epilogue_frame_this_id (struct frame_info *this_frame,
    'struct frame_uwnind' for epilogue unwinder.  */
 
 static struct value *
-arm_epilogue_frame_prev_register (struct frame_info *this_frame,
+arm_epilogue_frame_prev_register (frame_info_ptr this_frame,
 				  void **this_cache, int regnum)
 {
   if (*this_cache == NULL)
@@ -3178,7 +3178,7 @@ static int thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch,
 
 static int
 arm_epilogue_frame_sniffer (const struct frame_unwind *self,
-			    struct frame_info *this_frame,
+			    frame_info_ptr this_frame,
 			    void **this_prologue_cache)
 {
   if (frame_relative_level (this_frame) == 0)
@@ -3235,7 +3235,7 @@ static const struct frame_unwind arm_epilogue_frame_unwind =
    The trampoline 'bx r2' doesn't belong to main.  */
 
 static CORE_ADDR
-arm_skip_bx_reg (struct frame_info *frame, CORE_ADDR pc)
+arm_skip_bx_reg (frame_info_ptr frame, CORE_ADDR pc)
 {
   /* The heuristics of recognizing such trampoline is that FRAME is
      executing in Thumb mode and the instruction on PC is 'bx Rm'.  */
@@ -3267,7 +3267,7 @@ arm_skip_bx_reg (struct frame_info *frame, CORE_ADDR pc)
 }
 
 static struct arm_prologue_cache *
-arm_make_stub_cache (struct frame_info *this_frame)
+arm_make_stub_cache (frame_info_ptr this_frame)
 {
   struct arm_prologue_cache *cache;
 
@@ -3286,7 +3286,7 @@ arm_make_stub_cache (struct frame_info *this_frame)
 /* Our frame ID for a stub frame is the current SP and LR.  */
 
 static void
-arm_stub_this_id (struct frame_info *this_frame,
+arm_stub_this_id (frame_info_ptr this_frame,
 		  void **this_cache,
 		  struct frame_id *this_id)
 {
@@ -3304,7 +3304,7 @@ arm_stub_this_id (struct frame_info *this_frame,
 
 static int
 arm_stub_unwind_sniffer (const struct frame_unwind *self,
-			 struct frame_info *this_frame,
+			 frame_info_ptr this_frame,
 			 void **this_prologue_cache)
 {
   CORE_ADDR addr_in_block;
@@ -3342,7 +3342,7 @@ struct frame_unwind arm_stub_unwind = {
    returned.  */
 
 static struct arm_prologue_cache *
-arm_m_exception_cache (struct frame_info *this_frame)
+arm_m_exception_cache (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
@@ -3693,7 +3693,7 @@ arm_m_exception_cache (struct frame_info *this_frame)
    'struct frame_uwnind'.  */
 
 static void
-arm_m_exception_this_id (struct frame_info *this_frame,
+arm_m_exception_this_id (frame_info_ptr this_frame,
 			 void **this_cache,
 			 struct frame_id *this_id)
 {
@@ -3714,7 +3714,7 @@ arm_m_exception_this_id (struct frame_info *this_frame,
    'struct frame_uwnind'.  */
 
 static struct value *
-arm_m_exception_prev_register (struct frame_info *this_frame,
+arm_m_exception_prev_register (frame_info_ptr this_frame,
 			       void **this_cache,
 			       int prev_regnum)
 {
@@ -3779,7 +3779,7 @@ arm_m_exception_prev_register (struct frame_info *this_frame,
 
 static int
 arm_m_exception_unwind_sniffer (const struct frame_unwind *self,
-				struct frame_info *this_frame,
+				frame_info_ptr this_frame,
 				void **this_prologue_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -3806,7 +3806,7 @@ struct frame_unwind arm_m_exception_unwind =
 };
 
 static CORE_ADDR
-arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
+arm_normal_frame_base (frame_info_ptr this_frame, void **this_cache)
 {
   struct arm_prologue_cache *cache;
 
@@ -3827,7 +3827,7 @@ struct frame_base arm_normal_base = {
 };
 
 static struct value *
-arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
+arm_dwarf2_prev_register (frame_info_ptr this_frame, void **this_cache,
 			  int regnum)
 {
   struct gdbarch * gdbarch = get_frame_arch (this_frame);
@@ -3925,7 +3925,7 @@ arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
       if (override_with_sp_value)
 	{
 	  /* Use value of SP from previous frame.  */
-	  struct frame_info *prev_frame = get_prev_frame (this_frame);
+	  frame_info_ptr prev_frame = get_prev_frame (this_frame);
 	  if (prev_frame)
 	    val = get_frame_register_unsigned (prev_frame, ARM_SP_REGNUM);
 	  else
@@ -4710,7 +4710,7 @@ print_fpu_flags (struct ui_file *file, int flags)
    (if present) or emulator.  */
 static void
 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
-		      struct frame_info *frame, const char *args)
+		      frame_info_ptr frame, const char *args)
 {
   unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
   int type;
@@ -5054,7 +5054,7 @@ static const unsigned char op_lit0 = DW_OP_lit0;
 static void
 arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
 			   struct dwarf2_frame_state_reg *reg,
-			   struct frame_info *this_frame)
+			   frame_info_ptr this_frame)
 {
   arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
@@ -9099,7 +9099,7 @@ arm_return_value (struct gdbarch *gdbarch, struct value *function,
 
 
 static int
-arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
+arm_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
   arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
@@ -9171,7 +9171,7 @@ arm_is_sgstubs_section (struct obj_section *sec)
    return the target PC.  Otherwise return 0.  */
 
 CORE_ADDR
-arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
+arm_skip_stub (frame_info_ptr frame, CORE_ADDR pc)
 {
   const char *name;
   int namelen;
@@ -9720,7 +9720,7 @@ arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
 }
 
 static struct value *
-value_of_arm_user_reg (struct frame_info *frame, const void *baton)
+value_of_arm_user_reg (frame_info_ptr frame, const void *baton)
 {
   const int *reg_p = (const int *) baton;
   return value_of_register (*reg_p, frame);
@@ -9814,7 +9814,7 @@ arm_register_g_packet_guesses (struct gdbarch *gdbarch)
 /* Implement the code_of_frame_writable gdbarch method.  */
 
 static int
-arm_code_of_frame_writable (struct gdbarch *gdbarch, struct frame_info *frame)
+arm_code_of_frame_writable (struct gdbarch *gdbarch, frame_info_ptr frame)
 {
   arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
@@ -9842,7 +9842,7 @@ arm_gnu_triplet_regexp (struct gdbarch *gdbarch)
 /* Implement the "get_pc_address_flags" gdbarch method.  */
 
 static std::string
-arm_get_pc_address_flags (frame_info *frame, CORE_ADDR pc)
+arm_get_pc_address_flags (frame_info_ptr frame, CORE_ADDR pc)
 {
   if (get_frame_pc_masked (frame))
     return "PAC";
diff --git a/gdb/arm-tdep.h b/gdb/arm-tdep.h
index 67dd1151da4..47b0270c5c2 100644
--- a/gdb/arm-tdep.h
+++ b/gdb/arm-tdep.h
@@ -279,7 +279,7 @@ extern void
 		       arm_displaced_step_copy_insn_closure *dsc, int regno,
 		       ULONGEST val, enum pc_write_style write_pc);
 
-CORE_ADDR arm_skip_stub (struct frame_info *, CORE_ADDR);
+CORE_ADDR arm_skip_stub (frame_info_ptr , CORE_ADDR);
 
 ULONGEST arm_get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr,
 							int len,
@@ -292,7 +292,7 @@ int arm_get_next_pcs_is_thumb (struct arm_get_next_pcs *self);
 
 std::vector<CORE_ADDR> arm_software_single_step (struct regcache *);
 int arm_is_thumb (struct regcache *regcache);
-int arm_frame_is_thumb (struct frame_info *frame);
+int arm_frame_is_thumb (frame_info_ptr frame);
 
 extern void arm_displaced_step_fixup (struct gdbarch *,
 				      displaced_step_copy_insn_closure *,
diff --git a/gdb/arm-wince-tdep.c b/gdb/arm-wince-tdep.c
index 5063b308809..6ec3c04b5a8 100644
--- a/gdb/arm-wince-tdep.c
+++ b/gdb/arm-wince-tdep.c
@@ -36,7 +36,7 @@ static const gdb_byte arm_wince_thumb_le_breakpoint[] = { 0xfe, 0xdf };
 #define ARM_WINCE_JB_PC			10
 
 static CORE_ADDR
-arm_pe_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
+arm_pe_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
index 2d8f91f3240..41ffa046b40 100644
--- a/gdb/avr-tdep.c
+++ b/gdb/avr-tdep.c
@@ -979,7 +979,7 @@ avr_return_value (struct gdbarch *gdbarch, struct value *function,
    for it IS the sp for the next frame.  */
 
 static struct avr_unwind_cache *
-avr_frame_unwind_cache (struct frame_info *this_frame,
+avr_frame_unwind_cache (frame_info_ptr this_frame,
 			void **this_prologue_cache)
 {
   CORE_ADDR start_pc, current_pc;
@@ -1059,7 +1059,7 @@ avr_frame_unwind_cache (struct frame_info *this_frame,
 }
 
 static CORE_ADDR
-avr_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
+avr_unwind_pc (struct gdbarch *gdbarch, frame_info_ptr next_frame)
 {
   ULONGEST pc;
 
@@ -1069,7 +1069,7 @@ avr_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
 }
 
 static CORE_ADDR
-avr_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
+avr_unwind_sp (struct gdbarch *gdbarch, frame_info_ptr next_frame)
 {
   ULONGEST sp;
 
@@ -1082,7 +1082,7 @@ avr_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
    frame.  This will be used to create a new GDB frame struct.  */
 
 static void
-avr_frame_this_id (struct frame_info *this_frame,
+avr_frame_this_id (frame_info_ptr this_frame,
 		   void **this_prologue_cache,
 		   struct frame_id *this_id)
 {
@@ -1107,7 +1107,7 @@ avr_frame_this_id (struct frame_info *this_frame,
 }
 
 static struct value *
-avr_frame_prev_register (struct frame_info *this_frame,
+avr_frame_prev_register (frame_info_ptr this_frame,
 			 void **this_prologue_cache, int regnum)
 {
   struct avr_unwind_cache *info
@@ -1166,7 +1166,7 @@ static const struct frame_unwind avr_frame_unwind = {
 };
 
 static CORE_ADDR
-avr_frame_base_address (struct frame_info *this_frame, void **this_cache)
+avr_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct avr_unwind_cache *info
     = avr_frame_unwind_cache (this_frame, this_cache);
@@ -1186,7 +1186,7 @@ static const struct frame_base avr_frame_base = {
    save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint.  */
 
 static struct frame_id
-avr_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
+avr_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame)
 {
   ULONGEST base;
 
diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c
index a52a5bf2596..3a223b34ba3 100644
--- a/gdb/ax-gdb.c
+++ b/gdb/ax-gdb.c
@@ -2567,7 +2567,7 @@ maint_agent_eval_command (const char *exp, int from_tty)
 static void
 maint_agent_printf_command (const char *cmdrest, int from_tty)
 {
-  struct frame_info *fi = get_current_frame ();	/* need current scope */
+  frame_info_ptr fi = get_current_frame ();	/* need current scope */
   const char *format_start, *format_end;
 
   /* We don't deal with overlay debugging at the moment.  We need to
diff --git a/gdb/bfin-linux-tdep.c b/gdb/bfin-linux-tdep.c
index 6c4023da9f5..873cb017e82 100644
--- a/gdb/bfin-linux-tdep.c
+++ b/gdb/bfin-linux-tdep.c
@@ -95,7 +95,7 @@ static const int bfin_linux_sigcontext_reg_offset[BFIN_NUM_REGS] =
 
 static void
 bfin_linux_sigframe_init (const struct tramp_frame *self,
-			  struct frame_info *this_frame,
+			  frame_info_ptr this_frame,
 			  struct trad_frame_cache *this_cache,
 			  CORE_ADDR func)
 {
diff --git a/gdb/bfin-tdep.c b/gdb/bfin-tdep.c
index dc1ee51d103..cdaa8111472 100644
--- a/gdb/bfin-tdep.c
+++ b/gdb/bfin-tdep.c
@@ -288,7 +288,7 @@ bfin_alloc_frame_cache (void)
 }
 
 static struct bfin_frame_cache *
-bfin_frame_cache (struct frame_info *this_frame, void **this_cache)
+bfin_frame_cache (frame_info_ptr this_frame, void **this_cache)
 {
   struct bfin_frame_cache *cache;
   int i;
@@ -340,7 +340,7 @@ bfin_frame_cache (struct frame_info *this_frame, void **this_cache)
 }
 
 static void
-bfin_frame_this_id (struct frame_info *this_frame,
+bfin_frame_this_id (frame_info_ptr this_frame,
 		    void **this_cache,
 		    struct frame_id *this_id)
 {
@@ -355,7 +355,7 @@ bfin_frame_this_id (struct frame_info *this_frame,
 }
 
 static struct value *
-bfin_frame_prev_register (struct frame_info *this_frame,
+bfin_frame_prev_register (frame_info_ptr this_frame,
 			  void **this_cache,
 			  int regnum)
 {
@@ -726,7 +726,7 @@ bfin_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
 }
 
 static CORE_ADDR
-bfin_frame_base_address (struct frame_info *this_frame, void **this_cache)
+bfin_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct bfin_frame_cache *cache = bfin_frame_cache (this_frame, this_cache);
 
@@ -734,7 +734,7 @@ bfin_frame_base_address (struct frame_info *this_frame, void **this_cache)
 }
 
 static CORE_ADDR
-bfin_frame_local_address (struct frame_info *this_frame, void **this_cache)
+bfin_frame_local_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct bfin_frame_cache *cache = bfin_frame_cache (this_frame, this_cache);
 
@@ -742,7 +742,7 @@ bfin_frame_local_address (struct frame_info *this_frame, void **this_cache)
 }
 
 static CORE_ADDR
-bfin_frame_args_address (struct frame_info *this_frame, void **this_cache)
+bfin_frame_args_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct bfin_frame_cache *cache = bfin_frame_cache (this_frame, this_cache);
 
diff --git a/gdb/blockframe.c b/gdb/blockframe.c
index 1c9e5db7eac..a1b4a476b0f 100644
--- a/gdb/blockframe.c
+++ b/gdb/blockframe.c
@@ -52,7 +52,7 @@
    slot instruction.  */
 
 const struct block *
-get_frame_block (struct frame_info *frame, CORE_ADDR *addr_in_block)
+get_frame_block (frame_info_ptr frame, CORE_ADDR *addr_in_block)
 {
   CORE_ADDR pc;
   const struct block *bl;
@@ -115,7 +115,7 @@ get_pc_function_start (CORE_ADDR pc)
 /* Return the symbol for the function executing in frame FRAME.  */
 
 struct symbol *
-get_frame_function (struct frame_info *frame)
+get_frame_function (frame_info_ptr frame)
 {
   const struct block *bl = get_frame_block (frame, 0);
 
@@ -460,13 +460,13 @@ find_gnu_ifunc_target_type (CORE_ADDR resolver_funaddr)
    at least as old as the selected frame. Return NULL if there is no
    such frame.  If BLOCK is NULL, just return NULL.  */
 
-struct frame_info *
+frame_info_ptr
 block_innermost_frame (const struct block *block)
 {
   if (block == NULL)
     return NULL;
 
-  frame_info *frame = get_selected_frame ();
+  frame_info_ptr frame = get_selected_frame ();
   while (frame != NULL)
     {
       const struct block *frame_block = get_frame_block (frame, NULL);
diff --git a/gdb/bpf-tdep.c b/gdb/bpf-tdep.c
index 64c9f03512b..ea7c1147378 100644
--- a/gdb/bpf-tdep.c
+++ b/gdb/bpf-tdep.c
@@ -154,7 +154,7 @@ bpf_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
 /* Given THIS_FRAME, return its ID.  */
 
 static void
-bpf_frame_this_id (struct frame_info *this_frame,
+bpf_frame_this_id (frame_info_ptr this_frame,
 		   void **this_prologue_cache,
 		   struct frame_id *this_id)
 {
@@ -165,7 +165,7 @@ bpf_frame_this_id (struct frame_info *this_frame,
 /* Return the reason why we can't unwind past THIS_FRAME.  */
 
 static enum unwind_stop_reason
-bpf_frame_unwind_stop_reason (struct frame_info *this_frame,
+bpf_frame_unwind_stop_reason (frame_info_ptr this_frame,
 			      void **this_cache)
 {
   return UNWIND_OUTERMOST;
@@ -174,7 +174,7 @@ bpf_frame_unwind_stop_reason (struct frame_info *this_frame,
 /* Ask THIS_FRAME to unwind its register.  */
 
 static struct value *
-bpf_frame_prev_register (struct frame_info *this_frame,
+bpf_frame_prev_register (frame_info_ptr this_frame,
 			 void **this_prologue_cache, int regnum)
 {
   return frame_unwind_got_register (this_frame, regnum, regnum);
@@ -235,7 +235,7 @@ bpf_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
 /* Assuming THIS_FRAME is a dummy frame, return its frame ID.  */
 
 static struct frame_id
-bpf_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
+bpf_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame)
 {
   CORE_ADDR sp = get_frame_register_unsigned (this_frame,
 					      gdbarch_sp_regnum (gdbarch));
diff --git a/gdb/break-catch-throw.c b/gdb/break-catch-throw.c
index 2eb24f3b76c..6557ee71449 100644
--- a/gdb/break-catch-throw.c
+++ b/gdb/break-catch-throw.c
@@ -133,7 +133,7 @@ is_exception_catchpoint (breakpoint *bp)
 static void
 fetch_probe_arguments (struct value **arg0, struct value **arg1)
 {
-  struct frame_info *frame = get_selected_frame (_("No frame selected"));
+  frame_info_ptr frame = get_selected_frame (_("No frame selected"));
   CORE_ADDR pc = get_frame_pc (frame);
   struct bound_probe pc_probe;
   unsigned n_args;
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 2eabdd63c2e..e9aee6315fa 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -1944,7 +1944,7 @@ update_watchpoint (struct watchpoint *b, int reparse)
     within_current_scope = 1;
   else
     {
-      struct frame_info *fi = get_current_frame ();
+      frame_info_ptr fi = get_current_frame ();
       struct gdbarch *frame_arch = get_frame_arch (fi);
       CORE_ADDR frame_pc = get_frame_pc (fi);
 
@@ -4971,7 +4971,7 @@ static wp_check_result
 watchpoint_check (bpstat *bs)
 {
   struct watchpoint *b;
-  struct frame_info *fr;
+  frame_info_ptr fr;
   int within_current_scope;
 
   /* BS is built from an existing struct breakpoint.  */
@@ -4988,7 +4988,7 @@ watchpoint_check (bpstat *bs)
     within_current_scope = 1;
   else
     {
-      struct frame_info *frame = get_current_frame ();
+      frame_info_ptr frame = get_current_frame ();
       struct gdbarch *frame_arch = get_frame_arch (frame);
       CORE_ADDR frame_pc = get_frame_pc (frame);
 
@@ -5385,7 +5385,7 @@ bpstat_check_breakpoint_conditions (bpstat *bs, thread_info *thread)
 	select_frame (get_current_frame ());
       else
 	{
-	  struct frame_info *frame;
+	  frame_info_ptr frame;
 
 	  /* For local watchpoint expressions, which particular
 	     instance of a local is being watched matters, so we
@@ -7482,9 +7482,9 @@ check_longjmp_breakpoint_for_call_dummy (struct thread_info *tp)
 	   original dummy frame, hence frame_id_inner can't be used.  See
 	   the comments on frame_id_inner for more details.  */
 	bool unwind_finished_unexpectedly = false;
-	for (struct frame_info *fi = get_current_frame (); fi != nullptr; )
+	for (frame_info_ptr fi = get_current_frame (); fi != nullptr; )
 	  {
-	    struct frame_info *prev = get_prev_frame (fi);
+	    frame_info_ptr prev = get_prev_frame (fi);
 	    if (prev == nullptr)
 	      {
 		/* FI is the last stack frame.  Why did this frame not
@@ -10081,7 +10081,7 @@ watch_command_1 (const char *arg, int accessflag, int from_tty,
   if (*tok)
     error (_("Junk at end of command."));
 
-  frame_info *wp_frame = block_innermost_frame (exp_valid_block);
+  frame_info_ptr wp_frame = block_innermost_frame (exp_valid_block);
 
   /* Save this because create_internal_breakpoint below invalidates
      'wp_frame'.  */
@@ -10472,7 +10472,7 @@ until_break_fsm::do_async_reply_reason ()
 void
 until_break_command (const char *arg, int from_tty, int anywhere)
 {
-  struct frame_info *frame;
+  frame_info_ptr frame;
   struct gdbarch *frame_gdbarch;
   struct frame_id stack_frame_id;
   struct frame_id caller_frame_id;
@@ -13526,7 +13526,7 @@ insert_single_step_breakpoints (struct gdbarch *gdbarch)
 
   if (!next_pcs.empty ())
     {
-      struct frame_info *frame = get_current_frame ();
+      frame_info_ptr frame = get_current_frame ();
       const address_space *aspace = get_frame_address_space (frame);
 
       for (CORE_ADDR pc : next_pcs)
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index 86e0af7c91b..88ccc8aaf41 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -975,7 +975,7 @@ public:
 
   /* See language.h.  */
 
-  CORE_ADDR skip_trampoline (struct frame_info *fi,
+  CORE_ADDR skip_trampoline (frame_info_ptr fi,
 			     CORE_ADDR pc) const override
   {
     return cplus_skip_trampoline (fi, pc);
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index c78b93f57b5..fe4041662ef 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -1466,7 +1466,7 @@ print_disassembly (struct gdbarch *gdbarch, const char *name,
 static void
 disassemble_current_function (gdb_disassembly_flags flags)
 {
-  struct frame_info *frame;
+  frame_info_ptr frame;
   struct gdbarch *gdbarch;
   CORE_ADDR low, high, pc;
   const char *name;
diff --git a/gdb/compile/compile-c-symbols.c b/gdb/compile/compile-c-symbols.c
index dd892b31116..3a5d70bfeb0 100644
--- a/gdb/compile/compile-c-symbols.c
+++ b/gdb/compile/compile-c-symbols.c
@@ -144,7 +144,7 @@ convert_one_symbol (compile_c_instance *context,
 	     by their name.  */
 	  {
 	    struct value *val;
-	    struct frame_info *frame = NULL;
+	    frame_info_ptr frame = NULL;
 
 	    if (symbol_read_needs_frame (sym.symbol))
 	      {
diff --git a/gdb/compile/compile-cplus-symbols.c b/gdb/compile/compile-cplus-symbols.c
index ef2a1f57603..4d3f1602322 100644
--- a/gdb/compile/compile-cplus-symbols.c
+++ b/gdb/compile/compile-cplus-symbols.c
@@ -138,7 +138,7 @@ convert_one_symbol (compile_cplus_instance *instance,
 	     by their name.  */
 	  {
 	    struct value *val;
-	    struct frame_info *frame = nullptr;
+	    frame_info_ptr frame = nullptr;
 
 	    if (symbol_read_needs_frame (sym.symbol))
 	      {
diff --git a/gdb/compile/compile-loc2c.c b/gdb/compile/compile-loc2c.c
index 3ce0bfab45f..3864228ef37 100644
--- a/gdb/compile/compile-loc2c.c
+++ b/gdb/compile/compile-loc2c.c
@@ -633,7 +633,7 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
      offset by hand seemed too hackish.  */
   if (is_tls)
     {
-      struct frame_info *frame = get_selected_frame (NULL);
+      frame_info_ptr frame = get_selected_frame (NULL);
       struct value *val;
 
       if (frame == NULL)
diff --git a/gdb/cp-abi.c b/gdb/cp-abi.c
index f9ba559f12c..f10117491ec 100644
--- a/gdb/cp-abi.c
+++ b/gdb/cp-abi.c
@@ -152,7 +152,7 @@ cplus_make_method_ptr (struct type *type, gdb_byte *contents,
 }
 
 CORE_ADDR
-cplus_skip_trampoline (struct frame_info *frame,
+cplus_skip_trampoline (frame_info_ptr frame,
 		       CORE_ADDR stop_pc)
 {
   if (current_cp_abi.skip_trampoline == NULL)
diff --git a/gdb/cp-abi.h b/gdb/cp-abi.h
index c53b02d509c..bc85f6dc187 100644
--- a/gdb/cp-abi.h
+++ b/gdb/cp-abi.h
@@ -27,7 +27,7 @@ struct fn_field;
 struct type;
 struct value;
 struct ui_file;
-struct frame_info;
+class frame_info_ptr;
 
 /* The functions here that attempt to determine what sort of thing a
    mangled name refers to may well be revised in the future.  It would
@@ -204,7 +204,7 @@ extern std::string cplus_typename_from_type_info (struct value *value);
    address of the routine we are thunking to and continue to there
    instead.  */
 
-CORE_ADDR cplus_skip_trampoline (struct frame_info *frame,
+CORE_ADDR cplus_skip_trampoline (frame_info_ptr frame,
 				 CORE_ADDR stop_pc);
 
 /* Return a struct that provides pass-by-reference information
@@ -247,7 +247,7 @@ struct cp_abi_ops
   struct type *(*get_typeid_type) (struct gdbarch *gdbarch);
   struct type *(*get_type_from_type_info) (struct value *value);
   std::string (*get_typename_from_type_info) (struct value *value);
-  CORE_ADDR (*skip_trampoline) (struct frame_info *, CORE_ADDR);
+  CORE_ADDR (*skip_trampoline) (frame_info_ptr , CORE_ADDR);
   struct language_pass_by_ref_info (*pass_by_reference) (struct type *type);
 };
 
diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
index 51c4e30e12b..4a2f14ad076 100644
--- a/gdb/cris-tdep.c
+++ b/gdb/cris-tdep.c
@@ -193,7 +193,7 @@ static const unsigned short rt_sigtramp_code[] =
    the routine.  Otherwise, return 0.  */
 
 static CORE_ADDR
-cris_sigtramp_start (struct frame_info *this_frame)
+cris_sigtramp_start (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
   gdb_byte buf[SIGTRAMP_LEN];
@@ -221,7 +221,7 @@ cris_sigtramp_start (struct frame_info *this_frame)
    the routine.  Otherwise, return 0.  */
 
 static CORE_ADDR
-cris_rt_sigtramp_start (struct frame_info *this_frame)
+cris_rt_sigtramp_start (frame_info_ptr this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
   gdb_byte buf[SIGTRAMP_LEN];
@@ -249,7 +249,7 @@ cris_rt_sigtramp_start (struct frame_info *this_frame)
    return the address of the associated sigcontext structure.  */
 
 static CORE_ADDR
-cris_sigcontext_addr (struct frame_info *this_frame)
+cris_sigcontext_addr (frame_info_ptr this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -309,7 +309,7 @@ struct cris_unwind_cache
 };
 
 static struct cris_unwind_cache *
-cris_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
+cris_sigtramp_frame_unwind_cache (frame_info_ptr this_frame,
 				  void **this_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -402,7 +402,7 @@ cris_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
 }
 
 static void
-cris_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache,
+cris_sigtramp_frame_this_id (frame_info_ptr this_frame, void **this_cache,
 			     struct frame_id *this_id)
 {
   struct cris_unwind_cache *cache =
@@ -412,10 +412,10 @@ cris_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache,
 
 /* Forward declaration.  */
 
-static struct value *cris_frame_prev_register (struct frame_info *this_frame,
+static struct value *cris_frame_prev_register (frame_info_ptr this_frame,
 					       void **this_cache, int regnum);
 static struct value *
-cris_sigtramp_frame_prev_register (struct frame_info *this_frame,
+cris_sigtramp_frame_prev_register (frame_info_ptr this_frame,
 				   void **this_cache, int regnum)
 {
   /* Make sure we've initialized the cache.  */
@@ -425,7 +425,7 @@ cris_sigtramp_frame_prev_register (struct frame_info *this_frame,
 
 static int
 cris_sigtramp_frame_sniffer (const struct frame_unwind *self,
-			     struct frame_info *this_frame,
+			     frame_info_ptr this_frame,
 			     void **this_cache)
 {
   if (cris_sigtramp_start (this_frame) 
@@ -448,7 +448,7 @@ static const struct frame_unwind cris_sigtramp_frame_unwind =
 
 static int
 crisv32_single_step_through_delay (struct gdbarch *gdbarch,
-				   struct frame_info *this_frame)
+				   frame_info_ptr this_frame)
 {
   cris_gdbarch_tdep *tdep = gdbarch_tdep<cris_gdbarch_tdep> (gdbarch);
   ULONGEST erp;
@@ -645,11 +645,11 @@ static void set_cris_dwarf2_cfi (const char *ignore_args, int from_tty,
 				 struct cmd_list_element *c);
 
 static CORE_ADDR cris_scan_prologue (CORE_ADDR pc, 
-				     struct frame_info *this_frame,
+				     frame_info_ptr this_frame,
 				     struct cris_unwind_cache *info);
 
 static CORE_ADDR crisv32_scan_prologue (CORE_ADDR pc, 
-					struct frame_info *this_frame,
+					frame_info_ptr this_frame,
 					struct cris_unwind_cache *info);
 
 /* When arguments must be pushed onto the stack, they go on in reverse
@@ -692,7 +692,7 @@ pop_stack_item (struct cris_stack_item *si)
    for it IS the sp for the next frame.  */
 
 static struct cris_unwind_cache *
-cris_frame_unwind_cache (struct frame_info *this_frame,
+cris_frame_unwind_cache (frame_info_ptr this_frame,
 			 void **this_prologue_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -729,7 +729,7 @@ cris_frame_unwind_cache (struct frame_info *this_frame,
    frame.  This will be used to create a new GDB frame struct.  */
 
 static void
-cris_frame_this_id (struct frame_info *this_frame,
+cris_frame_this_id (frame_info_ptr this_frame,
 		    void **this_prologue_cache,
 		    struct frame_id *this_id)
 {
@@ -755,7 +755,7 @@ cris_frame_this_id (struct frame_info *this_frame,
 }
 
 static struct value *
-cris_frame_prev_register (struct frame_info *this_frame,
+cris_frame_prev_register (frame_info_ptr this_frame,
 			  void **this_prologue_cache, int regnum)
 {
   struct cris_unwind_cache *info
@@ -912,7 +912,7 @@ static const struct frame_unwind cris_frame_unwind =
 };
 
 static CORE_ADDR
-cris_frame_base_address (struct frame_info *this_frame, void **this_cache)
+cris_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct cris_unwind_cache *info
     = cris_frame_unwind_cache (this_frame, this_cache);
@@ -1004,7 +1004,7 @@ static const struct frame_base cris_frame_base =
    determine that it is a prologue (1).  */
 
 static CORE_ADDR 
-cris_scan_prologue (CORE_ADDR pc, struct frame_info *this_frame,
+cris_scan_prologue (CORE_ADDR pc, frame_info_ptr this_frame,
 		    struct cris_unwind_cache *info)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -1287,7 +1287,7 @@ cris_scan_prologue (CORE_ADDR pc, struct frame_info *this_frame,
 }
 
 static CORE_ADDR 
-crisv32_scan_prologue (CORE_ADDR pc, struct frame_info *this_frame,
+crisv32_scan_prologue (CORE_ADDR pc, frame_info_ptr this_frame,
 		    struct cris_unwind_cache *info)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
@@ -1756,7 +1756,7 @@ cris_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
 static void
 cris_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
 			    struct dwarf2_frame_state_reg *reg,
-			    struct frame_info *this_frame)
+			    frame_info_ptr this_frame)
 {
   /* The return address column.  */
   if (regnum == gdbarch_pc_regnum (gdbarch))
diff --git a/gdb/csky-linux-tdep.c b/gdb/csky-linux-tdep.c
index ea306cded09..8df3eaa2026 100644
--- a/gdb/csky-linux-tdep.c
+++ b/gdb/csky-linux-tdep.c
@@ -310,7 +310,7 @@ csky_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
 
 static void
 csky_linux_rt_sigreturn_init (const struct tramp_frame *self,
-			      struct frame_info *this_frame,
+			      frame_info_ptr this_frame,
 			      struct trad_frame_cache *this_cache,
 			      CORE_ADDR func)
 {
@@ -355,7 +355,7 @@ csky_linux_rt_sigreturn_tramp_frame = {
 
 static void
 csky_linux_rt_sigreturn_init_pt_regs (const struct tramp_frame *self,
-				      struct frame_info *this_frame,
+				      frame_info_ptr this_frame,
 				      struct trad_frame_cache *this_cache,
 				      CORE_ADDR func)
 {
diff --git a/gdb/csky-tdep.c b/gdb/csky-tdep.c
index cc8812003c8..e377e37b26e 100644
--- a/gdb/csky-tdep.c
+++ b/gdb/csky-tdep.c
@@ -941,7 +941,7 @@ csky_analyze_prologue (struct gdbarch *gdbarch,
 		       CORE_ADDR start_pc,
 		       CORE_ADDR limit_pc,
 		       CORE_ADDR end_pc,
-		       struct frame_info *this_frame,
+		       frame_info_ptr this_frame,
 		       struct csky_unwind_cache *this_cache,
 		       lr_type_t lr_type)
 {
@@ -2046,7 +2046,7 @@ csky_analyze_lr_type (struct gdbarch *gdbarch,
 /* Heuristic unwinder.  */
 
 static struct csky_unwind_cache *
-csky_frame_unwind_cache (struct frame_info *this_frame)
+csky_frame_unwind_cache (frame_info_ptr this_frame)
 {
   CORE_ADDR prologue_start, prologue_end, func_end, prev_pc, block_addr;
   struct csky_unwind_cache *cache;
@@ -2105,7 +2105,7 @@ csky_frame_unwind_cache (struct frame_info *this_frame)
 /* Implement the this_id function for the normal unwinder.  */
 
 static void
-csky_frame_this_id (struct frame_info *this_frame,
+csky_frame_this_id (frame_info_ptr this_frame,
 		    void **this_prologue_cache, struct frame_id *this_id)
 {
   struct csky_unwind_cache *cache;
@@ -2126,7 +2126,7 @@ csky_frame_this_id (struct frame_info *this_frame,
 /* Implement the prev_register function for the normal unwinder.  */
 
 static struct value *
-csky_frame_prev_register (struct frame_info *this_frame,
+csky_frame_prev_register (frame_info_ptr this_frame,
 			  void **this_prologue_cache, int regnum)
 {
   struct csky_unwind_cache *cache;
@@ -2155,7 +2155,7 @@ static const struct frame_unwind csky_unwind_cache = {
 };
 
 static CORE_ADDR
-csky_check_long_branch (struct frame_info *frame, CORE_ADDR pc)
+csky_check_long_branch (frame_info_ptr frame, CORE_ADDR pc)
 {
   gdb_byte buf[8];
   struct gdbarch *gdbarch = get_frame_arch (frame);
@@ -2192,7 +2192,7 @@ csky_check_long_branch (struct frame_info *frame, CORE_ADDR pc)
 
 static int
 csky_stub_unwind_sniffer (const struct frame_unwind *self,
-			  struct frame_info *this_frame,
+			  frame_info_ptr this_frame,
 			  void **this_prologue_cache)
 {
   CORE_ADDR addr_in_block, pc;
@@ -2223,7 +2223,7 @@ csky_stub_unwind_sniffer (const struct frame_unwind *self,
 }
 
 static struct csky_unwind_cache *
-csky_make_stub_cache (struct frame_info *this_frame)
+csky_make_stub_cache (frame_info_ptr this_frame)
 {
   struct csky_unwind_cache *cache;
 
@@ -2235,7 +2235,7 @@ csky_make_stub_cache (struct frame_info *this_frame)
 }
 
 static void
-csky_stub_this_id (struct frame_info *this_frame,
+csky_stub_this_id (frame_info_ptr this_frame,
 		  void **this_cache,
 		  struct frame_id *this_id)
 {
@@ -2250,7 +2250,7 @@ csky_stub_this_id (struct frame_info *this_frame,
 }
 
 static struct value *
-csky_stub_prev_register (struct frame_info *this_frame,
+csky_stub_prev_register (frame_info_ptr this_frame,
 			    void **this_cache,
 			    int prev_regnum)
 {
@@ -2290,7 +2290,7 @@ static frame_unwind csky_stub_unwind = {
    for the normal unwinder.  */
 
 static CORE_ADDR
-csky_frame_base_address (struct frame_info *this_frame, void **this_cache)
+csky_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 {
   struct csky_unwind_cache *cache;
 
@@ -2313,7 +2313,7 @@ static const struct frame_base csky_frame_base = {
 static void
 csky_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
 			    struct dwarf2_frame_state_reg *reg,
-			    struct frame_info *this_frame)
+			    frame_info_ptr this_frame)
 {
   if (regnum == gdbarch_pc_regnum (gdbarch))
     reg->how = DWARF2_FRAME_REG_RA;
diff --git a/gdb/defs.h b/gdb/defs.h
index e5b6c7878b1..0d9a39a59d0 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -284,7 +284,7 @@ enum return_value_convention
 
 struct symtab;
 struct breakpoint;
-struct frame_info;
+class frame_info_ptr;
 struct gdbarch;
 struct value;
 
diff --git a/gdb/dtrace-probe.c b/gdb/dtrace-probe.c
index b1f6ce5039c..44f3de22a01 100644
--- a/gdb/dtrace-probe.c
+++ b/gdb/dtrace-probe.c
@@ -129,7 +129,7 @@ public:
 
   /* See probe.h.  */
   struct value *evaluate_argument (unsigned n,
-				   struct frame_info *frame) override;
+				   frame_info_ptr frame) override;
 
   /* See probe.h.  */
   void compile_to_ax (struct agent_expr *aexpr,
@@ -709,7 +709,7 @@ dtrace_probe::can_evaluate_arguments () const
 
 struct value *
 dtrace_probe::evaluate_argument (unsigned n,
-				 struct frame_info *frame)
+				 frame_info_ptr frame)
 {
   struct gdbarch *gdbarch = this->get_gdbarch ();
   struct dtrace_probe_arg *arg;
diff --git a/gdb/dummy-frame.c b/gdb/dummy-frame.c
index 2fef6eae562..42c4bf23431 100644
--- a/gdb/dummy-frame.c
+++ b/gdb/dummy-frame.c
@@ -288,7 +288,7 @@ struct dummy_frame_cache
 
 static int
 dummy_frame_sniffer (const struct frame_unwind *self,
-		     struct frame_info *this_frame,
+		     frame_info_ptr this_frame,
 		     void **this_prologue_cache)
 {
   /* When unwinding a normal frame, the stack structure is determined
@@ -334,7 +334,7 @@ dummy_frame_sniffer (const struct frame_unwind *self,
    register value is taken from the local copy of the register buffer.  */
 
 static struct value *
-dummy_frame_prev_register (struct frame_info *this_frame,
+dummy_frame_prev_register (frame_info_ptr this_frame,
 			   void **this_prologue_cache,
 			   int regnum)
 {
@@ -364,7 +364,7 @@ dummy_frame_prev_register (struct frame_info *this_frame,
    dummy cache is located and saved in THIS_PROLOGUE_CACHE.  */
 
 static void
-dummy_frame_this_id (struct frame_info *this_frame,
+dummy_frame_this_id (frame_info_ptr this_frame,
 		     void **this_prologue_cache,
 		     struct frame_id *this_id)
 {
@@ -390,7 +390,7 @@ const struct frame_unwind dummy_frame_unwind =
 /* See dummy-frame.h.  */
 
 struct frame_id
-default_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
+default_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame)
 {
   CORE_ADDR sp, pc;
 
diff --git a/gdb/dummy-frame.h b/gdb/dummy-frame.h
index 80111f0a4db..213881e4eab 100644
--- a/gdb/dummy-frame.h
+++ b/gdb/dummy-frame.h
@@ -78,6 +78,6 @@ extern int find_dummy_frame_dtor (dummy_frame_dtor_ftype *dtor,
    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);
+					 frame_info_ptr this_frame);
 
 #endif /* !defined (DUMMY_FRAME_H)  */
diff --git a/gdb/dwarf2/expr.c b/gdb/dwarf2/expr.c
index d3e3e97ba07..2df069602a3 100644
--- a/gdb/dwarf2/expr.c
+++ b/gdb/dwarf2/expr.c
@@ -49,7 +49,7 @@ static const registry<gdbarch>::key<dwarf_gdbarch_types> dwarf_arch_cookie;
 /* Ensure that a FRAME is defined, throw an exception otherwise.  */
 
 static void
-ensure_have_frame (frame_info *frame, const char *op_name)
+ensure_have_frame (frame_info_ptr frame, const char *op_name)
 {
   if (frame == nullptr)
     throw_error (GENERIC_ERROR,
@@ -78,7 +78,7 @@ bits_to_bytes (ULONGEST start, ULONGEST n_bits)
 /* See expr.h.  */
 
 CORE_ADDR
-read_addr_from_reg (frame_info *frame, int reg)
+read_addr_from_reg (frame_info_ptr frame, int reg)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
   int regnum = dwarf_reg_to_regnum_or_error (gdbarch, reg);
@@ -112,7 +112,7 @@ static piece_closure *
 allocate_piece_closure (dwarf2_per_cu_data *per_cu,
 			dwarf2_per_objfile *per_objfile,
 			std::vector<dwarf_expr_piece> &&pieces,
-			frame_info *frame)
+			frame_info_ptr frame)
 {
   piece_closure *c = new piece_closure;
 
@@ -208,7 +208,7 @@ rw_pieced_value (value *v, value *from, bool check_optimized)
 	{
 	case DWARF_VALUE_REGISTER:
 	  {
-	    frame_info *frame = frame_find_by_id (c->frame_id);
+	    frame_info_ptr frame = frame_find_by_id (c->frame_id);
 	    gdbarch *arch = get_frame_arch (frame);
 	    int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, p->v.regno);
 	    ULONGEST reg_bits = 8 * register_size (arch, gdb_regnum);
@@ -550,7 +550,7 @@ indirect_pieced_value (value *value)
     }
 
   gdb_assert (piece != NULL && c->per_cu != nullptr);
-  frame_info *frame = get_selected_frame (_("No frame selected."));
+  frame_info_ptr frame = get_selected_frame (_("No frame selected."));
 
   /* This is an offset requested by GDB, such as value subscripts.
      However, due to how synthetic pointers are implemented, this is
@@ -585,7 +585,7 @@ coerce_pieced_ref (const value *value)
     {
       const piece_closure *closure
 	= (piece_closure *) value_computed_closure (value);
-      frame_info *frame
+      frame_info_ptr frame
 	= get_selected_frame (_("No frame selected."));
 
       /* gdb represents synthetic pointers as pieced values with a single
@@ -675,7 +675,7 @@ sect_variable_value (sect_offset sect_off,
     }
 
   struct type *type = lookup_pointer_type (die_type);
-  frame_info *frame = get_selected_frame (_("No frame selected."));
+  frame_info_ptr frame = get_selected_frame (_("No frame selected."));
   return indirect_synthetic_pointer (sect_off, 0, per_cu, per_objfile, frame,
 				     type, true);
 }
@@ -811,7 +811,7 @@ dwarf_expr_context::dwarf_call (cu_offset die_cu_off)
 {
   ensure_have_per_cu (this->m_per_cu, "DW_OP_call");
 
-  frame_info *frame = this->m_frame;
+  frame_info_ptr frame = this->m_frame;
 
   auto get_pc_from_frame = [frame] ()
     {
@@ -866,7 +866,7 @@ dwarf_expr_context::push_dwarf_reg_entry_value (call_site_parameter_kind kind,
 
   dwarf2_per_cu_data *caller_per_cu;
   dwarf2_per_objfile *caller_per_objfile;
-  frame_info *caller_frame = get_prev_frame (this->m_frame);
+  frame_info_ptr caller_frame = get_prev_frame (this->m_frame);
   call_site_parameter *parameter
     = dwarf_expr_reg_to_entry_parameter (this->m_frame, kind, kind_u,
 					 &caller_per_cu,
@@ -1070,7 +1070,7 @@ dwarf_expr_context::fetch_result (struct type *type, struct type *subobj_type,
 
 value *
 dwarf_expr_context::evaluate (const gdb_byte *addr, size_t len, bool as_lval,
-			      dwarf2_per_cu_data *per_cu, frame_info *frame,
+			      dwarf2_per_cu_data *per_cu, frame_info_ptr frame,
 			      const struct property_addr_info *addr_info,
 			      struct type *type, struct type *subobj_type,
 			      LONGEST subobj_offset)
diff --git a/gdb/dwarf2/expr.h b/gdb/dwarf2/expr.h
index 4ce9b734f77..6078dce0abc 100644
--- a/gdb/dwarf2/expr.h
+++ b/gdb/dwarf2/expr.h
@@ -137,7 +137,7 @@ struct dwarf_expr_context
      The ADDR_INFO property can be specified to override the range of
      memory addresses with the passed in buffer.  */
   value *evaluate (const gdb_byte *addr, size_t len, bool as_lval,
-		   dwarf2_per_cu_data *per_cu, frame_info *frame,
+		   dwarf2_per_cu_data *per_cu, frame_info_ptr frame,
 		   const struct property_addr_info *addr_info = nullptr,
 		   struct type *type = nullptr,
 		   struct type *subobj_type = nullptr,
@@ -196,7 +196,7 @@ private:
   dwarf2_per_objfile *m_per_objfile;
 
   /* Frame information used for the evaluation.  */
-  frame_info *m_frame = nullptr;
+  frame_info_ptr m_frame = nullptr;
 
   /* Compilation unit u[...]

[diff truncated at 100000 bytes]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-10-10 10:13 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-10 10:13 [binutils-gdb] Change GDB to use frame_info_ptr Bruno Larsen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).