Convert some frame functions to use gdb::array_view.
authorLuis Machado <luis.machado@linaro.org>
Fri, 15 Jan 2021 16:16:04 +0000 (13:16 -0300)
committerLuis Machado <luis.machado@linaro.org>
Tue, 19 Jan 2021 17:42:23 +0000 (14:42 -0300)
This patch converts the most obvious functions from gdb/frame.h to use
the gdb::array_view abstraction.  I've converted the ones that used buffer +
length.

There are others using only the buffer, with an implicit size. I did not
touch those for now. But it would be nice to pass the size for safety.

Tested with --enable-targets=all on Ubuntu 18.04/20.04 aarch64-linux.

gdb/ChangeLog

2021-01-19  Luis Machado  <luis.machado@linaro.org>

* frame.h (get_frame_register_bytes): Pass a gdb::array_view instead
of buffer + length.
(put_frame_register_bytes): Likewise.
Adjust documentation.
(get_frame_memory): Pass a gdb::array_view instead of buffer + length.
(safe_frame_unwind_memory): Likewise.
* frame.c (get_frame_register_bytes, put_frame_register_bytes)
(get_frame_memory, safe_frame_unwind_memory): Adjust to use
gdb::array_view.
* amd64-fbsd-tdep.c (amd64fbsd_sigtramp_p): Likewise.
* amd64-linux-tdep.c (amd64_linux_sigtramp_start): Likewise.
* amd64-obsd-tdep.c (amd64obsd_sigtramp_p): Likewise.
* arc-linux-tdep.c (arc_linux_is_sigtramp): Likewise.
* cris-tdep.c (cris_sigtramp_start, cris_rt_sigtramp_start): Likewise.
* dwarf2/loc.c (rw_pieced_value): Likewise.
* hppa-tdep.c (hppa_frame_cache): Likewise.
* i386-fbsd-tdep.c (i386fbsd_sigtramp_p): Likewise.
* i386-gnu-tdep.c (i386_gnu_sigtramp_start): Likewise.
* i386-linux-tdep.c (i386_linux_sigtramp_start)
(i386_linux_rt_sigtramp_start): Likewise.
* i386-obsd-tdep.c (i386obsd_sigtramp_p): Likewise.
* i386-tdep.c (i386_register_to_value): Likewise.
* i387-tdep.c (i387_register_to_value): Likewise.
* ia64-tdep.c (ia64_register_to_value): Likewise.
* m32r-linux-tdep.c (m32r_linux_sigtramp_start)
(m32r_linux_rt_sigtramp_start): Likewise.
* m68k-linux-tdep.c (m68k_linux_pc_in_sigtramp): Likewise.
* m68k-tdep.c (m68k_register_to_value): Likewise.
* mips-tdep.c (mips_register_to_value)
(mips_value_to_register): Likewise.
* ppc-fbsd-tdep.c (ppcfbsd_sigtramp_frame_sniffer)
(ppcfbsd_sigtramp_frame_cache): Likewise.
* ppc-obsd-tdep.c (ppcobsd_sigtramp_frame_sniffer)
(ppcobsd_sigtramp_frame_cache): Likewise.
* rs6000-tdep.c (rs6000_in_function_epilogue_frame_p)
(rs6000_register_to_value): Likewise.
* tilegx-tdep.c (tilegx_analyze_prologue): Likewise.
* tramp-frame.c (tramp_frame_start): Likewise.
* valops.c (value_assign): Likewise.

27 files changed:
gdb/ChangeLog
gdb/amd64-fbsd-tdep.c
gdb/amd64-linux-tdep.c
gdb/amd64-obsd-tdep.c
gdb/arc-linux-tdep.c
gdb/cris-tdep.c
gdb/dwarf2/loc.c
gdb/frame.c
gdb/frame.h
gdb/hppa-tdep.c
gdb/i386-fbsd-tdep.c
gdb/i386-gnu-tdep.c
gdb/i386-linux-tdep.c
gdb/i386-obsd-tdep.c
gdb/i386-tdep.c
gdb/i387-tdep.c
gdb/ia64-tdep.c
gdb/m32r-linux-tdep.c
gdb/m68k-linux-tdep.c
gdb/m68k-tdep.c
gdb/mips-tdep.c
gdb/ppc-fbsd-tdep.c
gdb/ppc-obsd-tdep.c
gdb/rs6000-tdep.c
gdb/tilegx-tdep.c
gdb/tramp-frame.c
gdb/valops.c

index e31ed4321872bcd2c04256ff2764c786139c53f9..aeb089498de6ce8416ebe5b1c1d07b458cca9ddd 100644 (file)
@@ -1,3 +1,45 @@
+2021-01-19  Luis Machado  <luis.machado@linaro.org>
+
+       * frame.h (get_frame_register_bytes): Pass a gdb::array_view instead
+       of buffer + length.
+       (put_frame_register_bytes): Likewise.
+       Adjust documentation.
+       (get_frame_memory): Pass a gdb::array_view instead of buffer + length.
+       (safe_frame_unwind_memory): Likewise.
+       * frame.c (get_frame_register_bytes, put_frame_register_bytes)
+       (get_frame_memory, safe_frame_unwind_memory): Adjust to use
+       gdb::array_view.
+       * amd64-fbsd-tdep.c (amd64fbsd_sigtramp_p): Likewise.
+       * amd64-linux-tdep.c (amd64_linux_sigtramp_start): Likewise.
+       * amd64-obsd-tdep.c (amd64obsd_sigtramp_p): Likewise.
+       * arc-linux-tdep.c (arc_linux_is_sigtramp): Likewise.
+       * cris-tdep.c (cris_sigtramp_start, cris_rt_sigtramp_start): Likewise.
+       * dwarf2/loc.c (rw_pieced_value): Likewise.
+       * hppa-tdep.c (hppa_frame_cache): Likewise.
+       * i386-fbsd-tdep.c (i386fbsd_sigtramp_p): Likewise.
+       * i386-gnu-tdep.c (i386_gnu_sigtramp_start): Likewise.
+       * i386-linux-tdep.c (i386_linux_sigtramp_start)
+       (i386_linux_rt_sigtramp_start): Likewise.
+       * i386-obsd-tdep.c (i386obsd_sigtramp_p): Likewise.
+       * i386-tdep.c (i386_register_to_value): Likewise.
+       * i387-tdep.c (i387_register_to_value): Likewise.
+       * ia64-tdep.c (ia64_register_to_value): Likewise.
+       * m32r-linux-tdep.c (m32r_linux_sigtramp_start)
+       (m32r_linux_rt_sigtramp_start): Likewise.
+       * m68k-linux-tdep.c (m68k_linux_pc_in_sigtramp): Likewise.
+       * m68k-tdep.c (m68k_register_to_value): Likewise.
+       * mips-tdep.c (mips_register_to_value)
+       (mips_value_to_register): Likewise.
+       * ppc-fbsd-tdep.c (ppcfbsd_sigtramp_frame_sniffer)
+       (ppcfbsd_sigtramp_frame_cache): Likewise.
+       * ppc-obsd-tdep.c (ppcobsd_sigtramp_frame_sniffer)
+       (ppcobsd_sigtramp_frame_cache): Likewise.
+       * rs6000-tdep.c (rs6000_in_function_epilogue_frame_p)
+       (rs6000_register_to_value): Likewise.
+       * tilegx-tdep.c (tilegx_analyze_prologue): Likewise.
+       * tramp-frame.c (tramp_frame_start): Likewise.
+       * valops.c (value_assign): Likewise.
+
 2021-01-19  Luis Machado  <luis.machado@linaro.org>
 
        * aarch64-linux-tdep.c (aarch64_linux_restore_vreg): Pass in an
index 6a7000e7530c788f7b5bba8a4fed86311b0088ba..289431306ab7661986dfb76582521be8440139d6 100644 (file)
@@ -52,7 +52,7 @@ amd64fbsd_sigtramp_p (struct frame_info *this_frame)
   CORE_ADDR pc = get_frame_pc (this_frame);
   gdb_byte buf[sizeof amd64fbsd_sigtramp_code];
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
+  if (!safe_frame_unwind_memory (this_frame, pc, buf))
     return 0;
   if (memcmp (buf, amd64fbsd_sigtramp_code, sizeof amd64fbsd_sigtramp_code)
       != 0)
index f65ac4e4357c77e9fea6933f31816e5b25e076c6..00d19be5ba06b19067d8681d0ccd60cbbf0fda20 100644 (file)
@@ -146,7 +146,7 @@ amd64_linux_sigtramp_start (struct frame_info *this_frame)
      PC is not at the start of the instruction sequence, there will be
      a few trailing readable bytes on the stack.  */
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
+  if (!safe_frame_unwind_memory (this_frame, pc, buf))
     return 0;
 
   if (buf[0] != LINUX_SIGTRAMP_INSN0)
@@ -155,7 +155,7 @@ amd64_linux_sigtramp_start (struct frame_info *this_frame)
        return 0;
 
       pc -= LINUX_SIGTRAMP_OFFSET1;
-      if (!safe_frame_unwind_memory (this_frame, pc, buf, sizeof buf))
+      if (!safe_frame_unwind_memory (this_frame, pc, buf))
        return 0;
     }
 
index 5a7e6aeabe72998e7dd7fb81fcccaa5de785c018..cdb09d0272bcae309b6baa5e04d76a99255b1ab0 100644 (file)
@@ -78,7 +78,7 @@ amd64obsd_sigtramp_p (struct frame_info *this_frame)
 
   /* If we can't read the instructions at START_PC, return zero.  */
   buf = (gdb_byte *) alloca ((sizeof sigreturn) + 1);
-  if (!safe_frame_unwind_memory (this_frame, start_pc + 6, buf, buflen))
+  if (!safe_frame_unwind_memory (this_frame, start_pc + 6, {buf, buflen}))
     return 0;
 
   /* Check for sigreturn(2).  Depending on how the assembler encoded
index f41cb203358ea1ec16a6e29f34f0e41dfde8f0d5..c9fbd7ddc28aa327673a9ed3e49472d404dd7728 100644 (file)
@@ -204,7 +204,7 @@ arc_linux_is_sigtramp (struct frame_info *this_frame)
 
   /* Read the memory at the PC.  Since we are stopped, any breakpoint must
      have been removed.  */
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, insns_sz))
+  if (!safe_frame_unwind_memory (this_frame, pc, {buf, insns_sz}))
     {
       /* Failed to unwind frame.  */
       return FALSE;
@@ -215,7 +215,7 @@ arc_linux_is_sigtramp (struct frame_info *this_frame)
     return TRUE;
 
   /* No - look one instruction earlier in the code...  */
-  if (!safe_frame_unwind_memory (this_frame, pc - 4, buf, insns_sz))
+  if (!safe_frame_unwind_memory (this_frame, pc - 4, {buf, insns_sz}))
     {
       /* Failed to unwind frame.  */
       return FALSE;
index 63ce803b0194f069e4447237216ffe5c882fa932..a33fdc1143e6eb899ceabc431354af54b94ca443 100644 (file)
@@ -198,7 +198,7 @@ cris_sigtramp_start (struct frame_info *this_frame)
   CORE_ADDR pc = get_frame_pc (this_frame);
   gdb_byte buf[SIGTRAMP_LEN];
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, SIGTRAMP_LEN))
+  if (!safe_frame_unwind_memory (this_frame, pc, buf))
     return 0;
 
   if (((buf[1] << 8) + buf[0]) != SIGTRAMP_INSN0)
@@ -207,7 +207,7 @@ cris_sigtramp_start (struct frame_info *this_frame)
        return 0;
 
       pc -= SIGTRAMP_OFFSET1;
-      if (!safe_frame_unwind_memory (this_frame, pc, buf, SIGTRAMP_LEN))
+      if (!safe_frame_unwind_memory (this_frame, pc, buf))
        return 0;
     }
 
@@ -226,7 +226,7 @@ cris_rt_sigtramp_start (struct frame_info *this_frame)
   CORE_ADDR pc = get_frame_pc (this_frame);
   gdb_byte buf[SIGTRAMP_LEN];
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, SIGTRAMP_LEN))
+  if (!safe_frame_unwind_memory (this_frame, pc, buf))
     return 0;
 
   if (((buf[1] << 8) + buf[0]) != SIGTRAMP_INSN0)
@@ -235,7 +235,7 @@ cris_rt_sigtramp_start (struct frame_info *this_frame)
        return 0;
 
       pc -= SIGTRAMP_OFFSET1;
-      if (!safe_frame_unwind_memory (this_frame, pc, buf, SIGTRAMP_LEN))
+      if (!safe_frame_unwind_memory (this_frame, pc, buf))
        return 0;
     }
 
index 33c4056ad50287fb3b0c4fab6ee55cc70fb622bc..580e5b0dedaac2c54e8e8660ab4747f62af3791d 100644 (file)
@@ -1748,7 +1748,7 @@ rw_pieced_value (struct value *v, struct value *from)
                /* Read mode.  */
                if (!get_frame_register_bytes (frame, gdb_regnum,
                                               bits_to_skip / 8,
-                                              this_size, buffer.data (),
+                                              buffer,
                                               &optim, &unavail))
                  {
                    if (optim)
@@ -1773,7 +1773,7 @@ rw_pieced_value (struct value *v, struct value *from)
                       Need some bits from original register value.  */
                    get_frame_register_bytes (frame, gdb_regnum,
                                              bits_to_skip / 8,
-                                             this_size, buffer.data (),
+                                             buffer,
                                              &optim, &unavail);
                    if (optim)
                      throw_error (OPTIMIZED_OUT_ERROR,
@@ -1792,7 +1792,7 @@ rw_pieced_value (struct value *v, struct value *from)
                              this_size_bits, bits_big_endian);
                put_frame_register_bytes (frame, gdb_regnum,
                                          bits_to_skip / 8,
-                                         this_size, buffer.data ());
+                                         buffer);
              }
          }
          break;
index fed58717c95d4dc7500917f6bbc4803eb00e1c78..4578b1acab3e21d4d10e6db6151d396d9bb1cf63 100644 (file)
@@ -1469,7 +1469,8 @@ deprecated_frame_register_read (frame_info *frame, int regnum,
 
 bool
 get_frame_register_bytes (frame_info *frame, int regnum,
-                         CORE_ADDR offset, int len, gdb_byte *myaddr,
+                         CORE_ADDR offset,
+                         gdb::array_view<gdb_byte> buffer,
                          int *optimizedp, int *unavailablep)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
@@ -1496,6 +1497,8 @@ get_frame_register_bytes (frame_info *frame, int regnum,
        break;  /* This register is not available on this architecture.  */
       maxsize += thissize;
     }
+
+  int len = buffer.size ();
   if (len > maxsize)
     error (_("Bad debug information detected: "
             "Attempt to read %d bytes from registers."), len);
@@ -1508,6 +1511,8 @@ get_frame_register_bytes (frame_info *frame, int regnum,
       if (curr_len > len)
        curr_len = len;
 
+      gdb_byte *myaddr = buffer.data ();
+
       if (curr_len == register_size (gdbarch, regnum))
        {
          enum lval_type lval;
@@ -1551,7 +1556,8 @@ get_frame_register_bytes (frame_info *frame, int regnum,
 
 void
 put_frame_register_bytes (struct frame_info *frame, int regnum,
-                         CORE_ADDR offset, int len, const gdb_byte *myaddr)
+                         CORE_ADDR offset,
+                         gdb::array_view<const gdb_byte> buffer)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
 
@@ -1562,6 +1568,7 @@ put_frame_register_bytes (struct frame_info *frame, int regnum,
       regnum++;
     }
 
+  int len = buffer.size ();
   /* Copy the data.  */
   while (len > 0)
     {
@@ -1570,6 +1577,7 @@ put_frame_register_bytes (struct frame_info *frame, int regnum,
       if (curr_len > len)
        curr_len = len;
 
+      const gdb_byte *myaddr = buffer.data ();
       if (curr_len == register_size (gdbarch, regnum))
        {
          put_frame_register (frame, regnum, myaddr);
@@ -2891,9 +2899,9 @@ get_frame_address_space (struct frame_info *frame)
 
 void
 get_frame_memory (struct frame_info *this_frame, CORE_ADDR addr,
-                 gdb_byte *buf, int len)
+                 gdb::array_view<gdb_byte> buffer)
 {
-  read_memory (addr, buf, len);
+  read_memory (addr, buffer.data (), buffer.size ());
 }
 
 LONGEST
@@ -2918,10 +2926,10 @@ get_frame_memory_unsigned (struct frame_info *this_frame, CORE_ADDR addr,
 
 bool
 safe_frame_unwind_memory (struct frame_info *this_frame,
-                         CORE_ADDR addr, gdb_byte *buf, int len)
+                         CORE_ADDR addr, gdb::array_view<gdb_byte> buffer)
 {
   /* NOTE: target_read_memory returns zero on success!  */
-  return target_read_memory (addr, buf, len) == 0;
+  return target_read_memory (addr, buffer.data (), buffer.size ()) == 0;
 }
 
 /* Architecture methods.  */
index 7028b2635ad2d481e1bc769ae4c0ddb04f9f9c0e..597a45967ed25198813cee4b04827ce4e6aab445 100644 (file)
@@ -653,15 +653,15 @@ extern void put_frame_register (struct frame_info *frame, int regnum,
    contents are optimized out or unavailable, set *OPTIMIZEDP,
    *UNAVAILABLEP accordingly.  */
 extern bool get_frame_register_bytes (frame_info *frame, int regnum,
-                                     CORE_ADDR offset, int len,
-                                     gdb_byte *myaddr,
+                                     CORE_ADDR offset,
+                                     gdb::array_view<gdb_byte> buffer,
                                      int *optimizedp, int *unavailablep);
 
-/* Write LEN bytes to one or multiple registers starting with REGNUM
-   in frame FRAME, starting at OFFSET, into BUF.  */
+/* Write bytes from BUFFER to one or multiple registers starting with REGNUM
+   in frame FRAME, starting at OFFSET.  */
 extern void put_frame_register_bytes (struct frame_info *frame, int regnum,
-                                     CORE_ADDR offset, int len,
-                                     const gdb_byte *myaddr);
+                                     CORE_ADDR offset,
+                                     gdb::array_view<const gdb_byte> buffer);
 
 /* Unwind the PC.  Strictly speaking return the resume address of the
    calling frame.  For GDB, `pc' is the resume address and not a
@@ -687,7 +687,7 @@ extern void frame_pop (struct frame_info *frame);
    adaptor frames this should be ok.  */
 
 extern void get_frame_memory (struct frame_info *this_frame, CORE_ADDR addr,
-                             gdb_byte *buf, int len);
+                             gdb::array_view<gdb_byte> buffer);
 extern LONGEST get_frame_memory_signed (struct frame_info *this_frame,
                                        CORE_ADDR memaddr, int len);
 extern ULONGEST get_frame_memory_unsigned (struct frame_info *this_frame,
@@ -696,7 +696,7 @@ extern ULONGEST get_frame_memory_unsigned (struct frame_info *this_frame,
 /* Same as above, but return true zero when the entire memory read
    succeeds, false otherwise.  */
 extern bool safe_frame_unwind_memory (frame_info *this_frame, CORE_ADDR addr,
-                                     gdb_byte *buf, int len);
+                                     gdb::array_view<gdb_byte> buffer);
 
 /* Return this frame's architecture.  */
 extern struct gdbarch *get_frame_arch (struct frame_info *this_frame);
index 4f7256500edb5628c8dcbbe7bf9e214364d17f10..786dda60fc83b8ad0efc8b4ce3a4a5055157dcf7 100644 (file)
@@ -1990,7 +1990,7 @@ hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
        gdb_byte buf4[4];
        long inst;
 
-       if (!safe_frame_unwind_memory (this_frame, pc, buf4, sizeof buf4)) 
+       if (!safe_frame_unwind_memory (this_frame, pc, buf4))
          {
            error (_("Cannot read instruction at %s."),
                   paddress (gdbarch, pc));
index bb0c622b1ff10705823091cdef45876195607d47..103972490c425223b7de7a47a72efa1de9eec901 100644 (file)
@@ -135,8 +135,8 @@ i386fbsd_sigtramp_p (struct frame_info *this_frame)
   const gdb_byte *middle, *end;
 
   /* Look for a matching start.  */
-  if (!safe_frame_unwind_memory (this_frame, pc, buf,
-                                sizeof i386fbsd_sigtramp_start))
+  if (!safe_frame_unwind_memory (this_frame, pc,
+                                {buf, sizeof i386fbsd_sigtramp_start}))
     return 0;
   if (memcmp (buf, i386fbsd_sigtramp_start, sizeof i386fbsd_sigtramp_start)
       == 0)
@@ -162,23 +162,23 @@ i386fbsd_sigtramp_p (struct frame_info *this_frame)
   /* Since the end is shorter than the middle, check for a matching end
      next.  */
   pc += sizeof i386fbsd_sigtramp_start;
-  if (!safe_frame_unwind_memory (this_frame, pc, buf,
-                                sizeof i386fbsd_sigtramp_end))
+  if (!safe_frame_unwind_memory (this_frame, pc,
+                                {buf, sizeof i386fbsd_sigtramp_end}))
     return 0;
   if (memcmp (buf, end, sizeof i386fbsd_sigtramp_end) == 0)
     return 1;
 
   /* If the end didn't match, check for a matching middle.  */
-  if (!safe_frame_unwind_memory (this_frame, pc, buf,
-                                sizeof i386fbsd_sigtramp_middle))
+  if (!safe_frame_unwind_memory (this_frame, pc,
+                                {buf, sizeof i386fbsd_sigtramp_middle}))
     return 0;
   if (memcmp (buf, middle, sizeof i386fbsd_sigtramp_middle) != 0)
     return 0;
 
   /* The middle matched, check for a matching end.  */
   pc += sizeof i386fbsd_sigtramp_middle;
-  if (!safe_frame_unwind_memory (this_frame, pc, buf,
-                                sizeof i386fbsd_sigtramp_end))
+  if (!safe_frame_unwind_memory (this_frame, pc,
+                                {buf, sizeof i386fbsd_sigtramp_end}))
     return 0;
   if (memcmp (buf, end, sizeof i386fbsd_sigtramp_end) != 0)
     return 0;
index 6033b986b6a3a1160df3d34edc431a9ebb1e948d..33ccd3b9ebec648ea066cc429ecb90500d7ec486 100644 (file)
@@ -63,7 +63,7 @@ i386_gnu_sigtramp_start (struct frame_info *this_frame)
 
   if (!safe_frame_unwind_memory (this_frame,
                                 pc + GNU_SIGTRAMP_TAIL - GNU_SIGTRAMP_LEN,
-                                buf, GNU_SIGTRAMP_LEN))
+                                buf))
     return 0;
 
   if (memcmp (buf, gnu_sigtramp_code, GNU_SIGTRAMP_LEN) != 0)
index 3ec29e35823298d64d1cd91a3ebee0b559c80f97..c0df916ce6dc374ff97efdf2d88914ce21df22a0 100644 (file)
@@ -134,7 +134,7 @@ i386_linux_sigtramp_start (struct frame_info *this_frame)
      PC is not at the start of the instruction sequence, there will be
      a few trailing readable bytes on the stack.  */
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, LINUX_SIGTRAMP_LEN))
+  if (!safe_frame_unwind_memory (this_frame, pc, buf))
     return 0;
 
   if (buf[0] != LINUX_SIGTRAMP_INSN0)
@@ -155,7 +155,7 @@ i386_linux_sigtramp_start (struct frame_info *this_frame)
 
       pc -= adjust;
 
-      if (!safe_frame_unwind_memory (this_frame, pc, buf, LINUX_SIGTRAMP_LEN))
+      if (!safe_frame_unwind_memory (this_frame, pc, buf))
        return 0;
     }
 
@@ -202,7 +202,7 @@ i386_linux_rt_sigtramp_start (struct frame_info *this_frame)
      PC is not at the start of the instruction sequence, there will be
      a few trailing readable bytes on the stack.  */
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, LINUX_RT_SIGTRAMP_LEN))
+  if (!safe_frame_unwind_memory (this_frame, pc, buf))
     return 0;
 
   if (buf[0] != LINUX_RT_SIGTRAMP_INSN0)
@@ -212,8 +212,8 @@ i386_linux_rt_sigtramp_start (struct frame_info *this_frame)
 
       pc -= LINUX_RT_SIGTRAMP_OFFSET1;
 
-      if (!safe_frame_unwind_memory (this_frame, pc, buf,
-                                    LINUX_RT_SIGTRAMP_LEN))
+      if (!safe_frame_unwind_memory (this_frame, pc,
+                                    buf))
        return 0;
     }
 
index d4d12ff29a8500be5f72aaf29c31b356b900dc68..387863f859a944f0919354cf159f263f02fe261a 100644 (file)
@@ -99,7 +99,7 @@ i386obsd_sigtramp_p (struct frame_info *this_frame)
     {
       /* If we can't read the instructions, return zero.  */
       if (!safe_frame_unwind_memory (this_frame, start_pc + *offset,
-                                    buf, buflen))
+                                    {buf, buflen}))
        return 0;
 
       /* Check for sigreturn(2).  */
index 1a3017224aefdb9357e483acdc44b2b4883485d8..991218de4c4a45917e3d3d12162290b145561a1a 100644 (file)
@@ -3781,8 +3781,10 @@ i386_register_to_value (struct frame_info *frame, int regnum,
       gdb_assert (register_size (gdbarch, regnum) == 4);
 
       if (!get_frame_register_bytes (frame, regnum, 0,
-                                    register_size (gdbarch, regnum),
-                                    to, optimizedp, unavailablep))
+                                    gdb::make_array_view (to,
+                                                       register_size (gdbarch,
+                                                                      regnum)),
+                                    optimizedp, unavailablep))
        return 0;
 
       regnum = i386_next_regnum (regnum);
index 118f983c144b9aac055346abab0ee649cc155349..c17c0f30b1e6ab0a26278b5834a158903f0845d8 100644 (file)
@@ -365,8 +365,10 @@ i387_register_to_value (struct frame_info *frame, int regnum,
 
   /* Convert to TYPE.  */
   if (!get_frame_register_bytes (frame, regnum, 0,
-                                register_size (gdbarch, regnum),
-                                from, optimizedp, unavailablep))
+                                gdb::make_array_view (from,
+                                                      register_size (gdbarch,
+                                                                     regnum)),
+                                optimizedp, unavailablep))
     return 0;
 
   target_float_convert (from, i387_ext_type (gdbarch), to, type);
index 71f15817453dfd08f47d5df43295f32ce784b9a0..35eeffe8434110fc93434c6a4970475b44714f19 100644 (file)
@@ -1226,8 +1226,10 @@ ia64_register_to_value (struct frame_info *frame, int regnum,
 
   /* Convert to TYPE.  */
   if (!get_frame_register_bytes (frame, regnum, 0,
-                                register_size (gdbarch, regnum),
-                                in, optimizedp, unavailablep))
+                                gdb::make_array_view (in,
+                                                      register_size (gdbarch,
+                                                                     regnum)),
+                                optimizedp, unavailablep))
     return 0;
 
   target_float_convert (in, ia64_ext_type (gdbarch), out, valtype);
index bed14edba3a4f8c09ad1dcb3233d902f1afa3b5a..1d42a0a43fdf19c5ab521cafab04e9ef0ef912bf 100644 (file)
@@ -99,7 +99,7 @@ m32r_linux_sigtramp_start (CORE_ADDR pc, struct frame_info *this_frame)
 
   if (pc % 2 != 0)
     {
-      if (!safe_frame_unwind_memory (this_frame, pc, buf, 2))
+      if (!safe_frame_unwind_memory (this_frame, pc, {buf, 2}))
        return 0;
 
       if (memcmp (buf, linux_sigtramp_code, 2) == 0)
@@ -108,7 +108,7 @@ m32r_linux_sigtramp_start (CORE_ADDR pc, struct frame_info *this_frame)
        return 0;
     }
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, 4))
+  if (!safe_frame_unwind_memory (this_frame, pc, {buf, 4}))
     return 0;
 
   if (memcmp (buf, linux_sigtramp_code, 4) != 0)
@@ -148,12 +148,12 @@ m32r_linux_rt_sigtramp_start (CORE_ADDR pc, struct frame_info *this_frame)
   if (pc % 2 != 0)
     return 0;
 
-  if (!safe_frame_unwind_memory (this_frame, pc, buf, 4))
+  if (!safe_frame_unwind_memory (this_frame, pc, {buf, 4}))
     return 0;
 
   if (memcmp (buf, linux_rt_sigtramp_code, 4) == 0)
     {
-      if (!safe_frame_unwind_memory (this_frame, pc + 4, buf, 4))
+      if (!safe_frame_unwind_memory (this_frame, pc + 4, {buf, 4}))
        return 0;
 
       if (memcmp (buf, linux_rt_sigtramp_code + 4, 4) == 0)
@@ -161,7 +161,7 @@ m32r_linux_rt_sigtramp_start (CORE_ADDR pc, struct frame_info *this_frame)
     }
   else if (memcmp (buf, linux_rt_sigtramp_code + 4, 4) == 0)
     {
-      if (!safe_frame_unwind_memory (this_frame, pc - 4, buf, 4))
+      if (!safe_frame_unwind_memory (this_frame, pc - 4, {buf, 4}))
        return 0;
 
       if (memcmp (buf, linux_rt_sigtramp_code, 4) == 0)
index b83636c2a116ef8e0264c6e6ef3d8c39193870bb..7b3cd5f2d9e194aedf11df5c03c04850a69ef84a 100644 (file)
@@ -69,7 +69,7 @@ m68k_linux_pc_in_sigtramp (struct frame_info *this_frame)
   unsigned long insn0, insn1, insn2;
   CORE_ADDR pc = get_frame_pc (this_frame);
 
-  if (!safe_frame_unwind_memory (this_frame, pc - 4, buf, sizeof (buf)))
+  if (!safe_frame_unwind_memory (this_frame, pc - 4, {buf, sizeof (buf)}))
     return 0;
   insn1 = extract_unsigned_integer (buf + 4, 4, byte_order);
   insn2 = extract_unsigned_integer (buf + 8, 4, byte_order);
index ae3be2b6e706d21ec93046de8f7f80973b8d7b53..76cc38bd6ff0dd6f17d3ccca54c37da2a8b50f11 100644 (file)
@@ -213,8 +213,10 @@ m68k_register_to_value (struct frame_info *frame, int regnum,
 
   /* Convert to TYPE.  */
   if (!get_frame_register_bytes (frame, regnum, 0,
-                                register_size (gdbarch, regnum),
-                                from, optimizedp, unavailablep))
+                                gdb::make_array_view (from,
+                                                      register_size (gdbarch,
+                                                                     regnum)),
+                                optimizedp, unavailablep))
     return 0;
 
   target_float_convert (from, fpreg_type, to, type);
index f0c343d1297623943ebac220d8bd2773938f7026..e12dffbdfcb0d8820bd591c03130b47a05a2c32e 100644 (file)
@@ -926,11 +926,11 @@ mips_register_to_value (struct frame_info *frame, int regnum,
       get_frame_register (frame, regnum + 0, to + 4);
       get_frame_register (frame, regnum + 1, to + 0);
 
-      if (!get_frame_register_bytes (frame, regnum + 0, 0, 4, to + 4,
+      if (!get_frame_register_bytes (frame, regnum + 0, 0, {to + 4, 4},
                                     optimizedp, unavailablep))
        return 0;
 
-      if (!get_frame_register_bytes (frame, regnum + 1, 0, 4, to + 0,
+      if (!get_frame_register_bytes (frame, regnum + 1, 0, {to + 0, 4},
                                     optimizedp, unavailablep))
        return 0;
       *optimizedp = *unavailablep = 0;
@@ -938,11 +938,11 @@ mips_register_to_value (struct frame_info *frame, int regnum,
     }
   else if (mips_convert_register_gpreg_case_p (gdbarch, regnum, type))
     {
-      int len = TYPE_LENGTH (type);
+      size_t len = TYPE_LENGTH (type);
       CORE_ADDR offset;
 
       offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 8 - len : 0;
-      if (!get_frame_register_bytes (frame, regnum, offset, len, to,
+      if (!get_frame_register_bytes (frame, regnum, offset, {to, len},
                                     optimizedp, unavailablep))
        return 0;
 
@@ -970,7 +970,7 @@ mips_value_to_register (struct frame_info *frame, int regnum,
   else if (mips_convert_register_gpreg_case_p (gdbarch, regnum, type))
     {
       gdb_byte fill[8];
-      int len = TYPE_LENGTH (type);
+      size_t len = TYPE_LENGTH (type);
       
       /* Sign extend values, irrespective of type, that are stored to 
         a 64-bit general purpose register.  (32-bit unsigned values
@@ -984,8 +984,8 @@ mips_value_to_register (struct frame_info *frame, int regnum,
            store_signed_integer (fill, 8, BFD_ENDIAN_BIG, -1);
          else
            store_signed_integer (fill, 8, BFD_ENDIAN_BIG, 0);
-         put_frame_register_bytes (frame, regnum, 0, 8 - len, fill);
-         put_frame_register_bytes (frame, regnum, 8 - len, len, from);
+         put_frame_register_bytes (frame, regnum, 0, {fill, 8 - len});
+         put_frame_register_bytes (frame, regnum, 8 - len, {from, len});
        }
       else
        {
@@ -993,8 +993,8 @@ mips_value_to_register (struct frame_info *frame, int regnum,
            store_signed_integer (fill, 8, BFD_ENDIAN_LITTLE, -1);
          else
            store_signed_integer (fill, 8, BFD_ENDIAN_LITTLE, 0);
-         put_frame_register_bytes (frame, regnum, 0, len, from);
-         put_frame_register_bytes (frame, regnum, len, 8 - len, fill);
+         put_frame_register_bytes (frame, regnum, 0, {from, len});
+         put_frame_register_bytes (frame, regnum, len, {fill, 8 - len});
        }
     }
   else
index e59ef4b828c5a39d49a69d9c61ac08c1134dfc16..d03df9666fc4a0bd711aad11b2fdb7606ad63225 100644 (file)
@@ -176,7 +176,7 @@ ppcfbsd_sigtramp_frame_sniffer (const struct frame_unwind *self,
       unsigned long insn;
 
       if (!safe_frame_unwind_memory (this_frame, start_pc + *offset,
-                                    buf, sizeof buf))
+                                    {buf, sizeof buf}))
        continue;
 
       /* Check for "li r0,SYS_sigreturn".  */
@@ -214,7 +214,7 @@ ppcfbsd_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
 
   func = get_frame_pc (this_frame);
   func &= ~(ppcfbsd_page_size - 1);
-  if (!safe_frame_unwind_memory (this_frame, func, buf, sizeof buf))
+  if (!safe_frame_unwind_memory (this_frame, func, {buf, sizeof buf}))
     return cache;
 
   base = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
index f1c609426371f90a60fc8a721b3987bcd17fb4d5..b92f11c67ec1da08e66420696a5e6f6eacf780e5 100644 (file)
@@ -137,7 +137,7 @@ ppcobsd_sigtramp_frame_sniffer (const struct frame_unwind *self,
       unsigned long insn;
 
       if (!safe_frame_unwind_memory (this_frame, start_pc + *offset,
-                                    buf, sizeof buf))
+                                    {buf, sizeof buf}))
        continue;
 
       /* Check for "li r0,SYS_sigreturn".  */
@@ -177,7 +177,7 @@ ppcobsd_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
 
   func = get_frame_pc (this_frame);
   func &= ~(ppcobsd_page_size - 1);
-  if (!safe_frame_unwind_memory (this_frame, func, buf, sizeof buf))
+  if (!safe_frame_unwind_memory (this_frame, func, {buf, sizeof buf}))
     return cache;
 
   /* Calculate the offset where we can find `struct sigcontext'.  We
index 2dbc2a23a9eaa8b53a8269ea765f6649e5bc938c..62848a0af9c18f7b3e715b3bd1f5c689d7602235 100644 (file)
@@ -777,7 +777,8 @@ rs6000_in_function_epilogue_frame_p (struct frame_info *curfrm,
 
   for (scan_pc = pc; scan_pc < epilogue_end; scan_pc += PPC_INSN_SIZE)
     {
-      if (!safe_frame_unwind_memory (curfrm, scan_pc, insn_buf, PPC_INSN_SIZE))
+      if (!safe_frame_unwind_memory (curfrm, scan_pc,
+                                    {insn_buf, PPC_INSN_SIZE}))
        return 0;
       insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE, byte_order);
       if (insn == 0x4e800020)
@@ -803,7 +804,8 @@ rs6000_in_function_epilogue_frame_p (struct frame_info *curfrm,
        scan_pc >= epilogue_start;
        scan_pc -= PPC_INSN_SIZE)
     {
-      if (!safe_frame_unwind_memory (curfrm, scan_pc, insn_buf, PPC_INSN_SIZE))
+      if (!safe_frame_unwind_memory (curfrm, scan_pc,
+                                    {insn_buf, PPC_INSN_SIZE}))
        return 0;
       insn = extract_unsigned_integer (insn_buf, PPC_INSN_SIZE, byte_order);
       if (insn_changes_sp_or_jumps (insn))
@@ -2607,8 +2609,10 @@ rs6000_register_to_value (struct frame_info *frame,
   gdb_assert (type->code () == TYPE_CODE_FLT);
 
   if (!get_frame_register_bytes (frame, regnum, 0,
-                                register_size (gdbarch, regnum),
-                                from, optimizedp, unavailablep))
+                                gdb::make_array_view (from,
+                                                      register_size (gdbarch,
+                                                                     regnum)),
+                                optimizedp, unavailablep))
     return 0;
 
   target_float_convert (from, builtin_type (gdbarch)->builtin_double,
index 0030fed028e8bffb1826de68f8a692c23719b7b9..7ff879476f33010c99d5dea666e0123b35f49c4d 100644 (file)
@@ -429,7 +429,7 @@ tilegx_analyze_prologue (struct gdbarch* gdbarch,
          instbuf_start = next_addr;
 
          status = safe_frame_unwind_memory (next_frame, instbuf_start,
-                                            instbuf, instbuf_size);
+                                            {instbuf, instbuf_size});
          if (status == 0)
            memory_error (TARGET_XFER_E_IO, next_addr);
        }
index 5f5d1b48aac6fba31941ba65eaa241fe59676754..b13ca51482221760bfa840abe097bca8b910d57e 100644 (file)
@@ -102,14 +102,15 @@ tramp_frame_start (const struct tramp_frame *tramp,
        {
          gdb_byte buf[sizeof (tramp->insn[0])];
          ULONGEST insn;
+         size_t insn_size = tramp->insn_size;
 
          if (tramp->insn[i].bytes == TRAMP_SENTINEL_INSN)
            return func;
          if (!safe_frame_unwind_memory (this_frame,
-                                        func + i * tramp->insn_size,
-                                        buf, tramp->insn_size))
+                                        func + i * insn_size,
+                                        {buf, insn_size}))
            break;
-         insn = extract_unsigned_integer (buf, tramp->insn_size, byte_order);
+         insn = extract_unsigned_integer (buf, insn_size, byte_order);
          if (tramp->insn[i].bytes != (insn & tramp->insn[i].mask))
            break;
        }
index 6a9cbdce710d591475c8faad6428d6e64eff1e83..882f6e7f0c266e5badbef4e3b04998df66daeb9c 100644 (file)
@@ -1200,7 +1200,7 @@ value_assign (struct value *toval, struct value *fromval)
          {
            struct value *parent = value_parent (toval);
            LONGEST offset = value_offset (parent) + value_offset (toval);
-           int changed_len;
+           size_t changed_len;
            gdb_byte buffer[sizeof (LONGEST)];
            int optim, unavail;
 
@@ -1209,13 +1209,13 @@ value_assign (struct value *toval, struct value *fromval)
                           + HOST_CHAR_BIT - 1)
                          / HOST_CHAR_BIT;
 
-           if (changed_len > (int) sizeof (LONGEST))
+           if (changed_len > sizeof (LONGEST))
              error (_("Can't handle bitfields which "
                       "don't fit in a %d bit word."),
                     (int) sizeof (LONGEST) * HOST_CHAR_BIT);
 
            if (!get_frame_register_bytes (frame, value_reg, offset,
-                                          changed_len, buffer,
+                                          {buffer, changed_len},
                                           &optim, &unavail))
              {
                if (optim)
@@ -1230,7 +1230,7 @@ value_assign (struct value *toval, struct value *fromval)
                          value_bitpos (toval), value_bitsize (toval));
 
            put_frame_register_bytes (frame, value_reg, offset,
-                                     changed_len, buffer);
+                                     {buffer, changed_len});
          }
        else
          {
@@ -1248,8 +1248,8 @@ value_assign (struct value *toval, struct value *fromval)
              {
                put_frame_register_bytes (frame, value_reg,
                                          value_offset (toval),
-                                         TYPE_LENGTH (type),
-                                         value_contents (fromval));
+                                         {value_contents (fromval),
+                                          TYPE_LENGTH (type)});
              }
          }