[gdb/build] Return const reference in target_read_auxv
authorTom de Vries <tdevries@suse.de>
Thu, 17 Aug 2023 08:41:34 +0000 (10:41 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 17 Aug 2023 08:41:34 +0000 (10:41 +0200)
In target_read_auxv we return a copy of an object:
...
gdb::optional<gdb::byte_vector>
target_read_auxv ()
{
  ...
  return info->data;
}
...

Return a const reference instead, saving a copy.

This is exposed by using std::pmr::polymorphic_allocator instead of
std::allocator in default_init_allocator.

Tested on x86_64-linux.

gdb/arm-fbsd-tdep.c
gdb/auxv.c
gdb/auxv.h

index acafc4a8bcd417f9d2e58e5d99bd827fa3793718..b46fa91d0a0be0d5e0183043b258b96622aa11ed 100644 (file)
@@ -244,7 +244,7 @@ arm_fbsd_read_description_auxv (const gdb::optional<gdb::byte_vector> &auxv,
 const struct target_desc *
 arm_fbsd_read_description_auxv (bool tls)
 {
-  gdb::optional<gdb::byte_vector> auxv = target_read_auxv ();
+  const gdb::optional<gdb::byte_vector> &auxv = target_read_auxv ();
   return arm_fbsd_read_description_auxv (auxv,
                                         current_inferior ()->top_target (),
                                         current_inferior ()->gdbarch,
index 812b28075548d35b7db6b8e3da077d9ddb8acaed..3c27c1f1ffe343075a342f8244d8bf103d89d396 100644 (file)
@@ -354,7 +354,7 @@ invalidate_auxv_cache (void)
 
 /* See auxv.h.  */
 
-gdb::optional<gdb::byte_vector>
+const gdb::optional<gdb::byte_vector> &
 target_read_auxv ()
 {
   inferior *inf = current_inferior ();
@@ -410,7 +410,7 @@ target_auxv_search (const gdb::byte_vector &auxv, target_ops *ops,
 int
 target_auxv_search (CORE_ADDR match, CORE_ADDR *valp)
 {
-  gdb::optional<gdb::byte_vector> auxv = target_read_auxv ();
+  const gdb::optional<gdb::byte_vector> &auxv = target_read_auxv ();
 
   if (!auxv.has_value ())
     return -1;
@@ -564,7 +564,7 @@ fprint_target_auxv (struct ui_file *file)
   struct gdbarch *gdbarch = target_gdbarch ();
   CORE_ADDR type, val;
   int ents = 0;
-  gdb::optional<gdb::byte_vector> auxv = target_read_auxv ();
+  const gdb::optional<gdb::byte_vector> &auxv = target_read_auxv ();
 
   if (!auxv.has_value ())
     return -1;
index 2441b6c02ab87014e716904e390b562152d3c11e..a920f7a5da8a22ceb5b82547b36b91ce32b42491 100644 (file)
@@ -48,7 +48,7 @@ extern int svr4_auxv_parse (struct gdbarch *gdbarch, const gdb_byte **readptr,
 
 /* Read auxv data from the current inferior's target stack.  */
 
-extern gdb::optional<gdb::byte_vector> target_read_auxv ();
+extern const gdb::optional<gdb::byte_vector> &target_read_auxv ();
 
 /* Read auxv data from OPS.  */