]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb: make store_integer take an array_view
authorSimon Marchi <simon.marchi@efficios.com>
Fri, 1 Dec 2023 16:27:16 +0000 (11:27 -0500)
committerSimon Marchi <simon.marchi@efficios.com>
Thu, 14 Dec 2023 16:04:49 +0000 (16:04 +0000)
Change store_integer, store_signed_integer and store_unsigned_integer to
accept an array_view.  Add some backwards compatibility overloads to
avoid changing all callers at once.

Change-Id: Ibb1381228ab1cb65fc7e2e4b92cf9ab1047cdc03
Reviewed-By: John Baldwin <jhb@FreeBSD.org>
gdb/defs.h
gdb/findvar.c

index bcce4f4c3e43e79bc2b47aa96244f653cc5ff4a5..e20143b8146a61851e4fbd9f4885fa0c17da9a94 100644 (file)
@@ -495,21 +495,44 @@ extern CORE_ADDR extract_typed_address (const gdb_byte *buf,
    target-format integer at ADDR which is LEN bytes long.  */
 
 template<typename T, typename = RequireLongest<T>>
-extern void store_integer (gdb_byte *addr, int len, enum bfd_endian byte_order,
-                          T val);
+extern void store_integer (gdb::array_view<gdb_byte> dst,
+                          bfd_endian byte_order, T val);
+
+template<typename T>
+static inline void
+store_integer (gdb_byte *addr, int len, bfd_endian byte_order, T val)
+{
+  return store_integer (gdb::make_array_view (addr, len), byte_order, val);
+}
+
+static inline void
+store_signed_integer (gdb::array_view<gdb_byte> dst, bfd_endian byte_order,
+                     LONGEST val)
+{
+  return store_integer (dst, byte_order, val);
+}
+
+static inline void
+store_signed_integer (gdb_byte *addr, int len, bfd_endian byte_order,
+                     LONGEST val)
+{
+  return store_signed_integer (gdb::make_array_view (addr, len), byte_order,
+                              val);
+}
 
 static inline void
-store_signed_integer (gdb_byte *addr, int len,
-                     enum bfd_endian byte_order, LONGEST val)
+store_unsigned_integer (gdb::array_view<gdb_byte> dst, bfd_endian byte_order,
+                       ULONGEST val)
 {
-  return store_integer (addr, len, byte_order, val);
+  return store_integer (dst, byte_order, val);
 }
 
 static inline void
-store_unsigned_integer (gdb_byte *addr, int len,
-                       enum bfd_endian byte_order, ULONGEST val)
+store_unsigned_integer (gdb_byte *addr, int len, bfd_endian byte_order,
+                       ULONGEST val)
 {
-  return store_integer (addr, len, byte_order, val);
+  return store_unsigned_integer (gdb::make_array_view (addr, len), byte_order,
+                                val);
 }
 
 extern void store_typed_address (gdb_byte *buf, struct type *type,
index 02b4a12970b3d3176655051b702418d62b6714f6..8f016f5756bd88e32ebb68ca460c00aac7caf737 100644 (file)
@@ -159,12 +159,12 @@ extract_typed_address (const gdb_byte *buf, struct type *type)
    target-format integer at ADDR which is LEN bytes long.  */
 template<typename T, typename>
 void
-store_integer (gdb_byte *addr, int len, enum bfd_endian byte_order,
+store_integer (gdb::array_view<gdb_byte> dst, enum bfd_endian byte_order,
               T val)
 {
   gdb_byte *p;
-  gdb_byte *startaddr = addr;
-  gdb_byte *endaddr = startaddr + len;
+  gdb_byte *startaddr = dst.data ();
+  gdb_byte *endaddr = startaddr + dst.size ();
 
   /* Start at the least significant end of the integer, and work towards
      the most significant.  */
@@ -187,13 +187,11 @@ store_integer (gdb_byte *addr, int len, enum bfd_endian byte_order,
 }
 
 /* Explicit instantiations.  */
-template void store_integer (gdb_byte *addr, int len,
-                            enum bfd_endian byte_order,
-                            LONGEST val);
+template void store_integer (gdb::array_view<gdb_byte> dst,
+                            bfd_endian byte_order, LONGEST val);
 
-template void store_integer (gdb_byte *addr, int len,
-                            enum bfd_endian byte_order,
-                            ULONGEST val);
+template void store_integer (gdb::array_view<gdb_byte> dst,
+                            bfd_endian byte_order, ULONGEST val);
 
 /* Store the address ADDR as a pointer of type TYPE at BUF, in target
    form.  */