gdb/dwarf: make dwarf2_per_bfd::get_unit return a reference

Message ID 20260520181610.4066987-1-simon.marchi@polymtl.ca
State New
Headers
Series gdb/dwarf: make dwarf2_per_bfd::get_unit return a reference |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 success Build passed
linaro-tcwg-bot/tcwg_gdb_build--master-arm success Build passed
linaro-tcwg-bot/tcwg_gdb_check--master-arm success Test passed
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 success Test passed

Commit Message

Simon Marchi May 20, 2026, 6:15 p.m. UTC
  From: Simon Marchi <simon.marchi@polymtl.ca>

This method can't return nullptr, switch it to return a reference.
Change all_units_iterator::operator* too.

Change-Id: I15c945553abfebdcc8834438a3b45d9895d628f0
---
 gdb/dwarf2/read.c | 26 +++++++++++++-------------
 gdb/dwarf2/read.h |  6 +++---
 2 files changed, 16 insertions(+), 16 deletions(-)


base-commit: ba415df8ba3817ab6eb5c9ec441ed2d979abe3b1
  

Comments

Tom Tromey May 21, 2026, 2:14 p.m. UTC | #1
>>>>> "Simon" == simon marchi <simon.marchi@polymtl.ca> writes:

Simon> From: Simon Marchi <simon.marchi@polymtl.ca>
Simon> This method can't return nullptr, switch it to return a reference.
Simon> Change all_units_iterator::operator* too.

Ok.
Approved-By: Tom Tromey <tom@tromey.com>

Tom
  
Simon Marchi May 21, 2026, 5:48 p.m. UTC | #2
On 5/21/26 10:14 AM, Tom Tromey wrote:
>>>>>> "Simon" == simon marchi <simon.marchi@polymtl.ca> writes:
> 
> Simon> From: Simon Marchi <simon.marchi@polymtl.ca>
> Simon> This method can't return nullptr, switch it to return a reference.
> Simon> Change all_units_iterator::operator* too.
> 
> Ok.
> Approved-By: Tom Tromey <tom@tromey.com>
> 
> Tom

Thanks, pushed.

Simon
  

Patch

diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index f8ade564b0ba..911cabc07993 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -1727,9 +1727,9 @@  dwarf2_base_index_functions::print_stats (struct objfile *objfile,
 
   for (int i = 0; i < total; ++i)
     {
-      dwarf2_per_cu *per_cu = per_objfile->per_bfd->get_unit (i);
+      dwarf2_per_cu &per_cu = per_objfile->per_bfd->get_unit (i);
 
-      if (!per_objfile->compunit_symtab_set_p (per_cu))
+      if (!per_objfile->compunit_symtab_set_p (&per_cu))
 	++count;
     }
   gdb_printf (_("  Number of read units: %d\n"), total - count);
@@ -1743,7 +1743,7 @@  dwarf2_base_index_functions::expand_all_symtabs (struct objfile *objfile)
 {
   dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
 
-  for (dwarf2_per_cu *per_cu : all_units_range (per_objfile->per_bfd))
+  for (dwarf2_per_cu &per_cu : all_units_range (per_objfile->per_bfd))
     {
       /* If a .debug_names index contains a foreign TU but no index entry
 	 references it, the TU won't have a hint CU.  This is a problem, because
@@ -1753,7 +1753,7 @@  dwarf2_base_index_functions::expand_all_symtabs (struct objfile *objfile)
 	    are unlikely to contain anything interesting, symbol-wise.
 	  - They are likely to be referred to by some other unit (otherwise,
 	    why does it exist?), so will get expanded anyway.  */
-      if (signatured_type *sig_type = per_cu->as_signatured_type ();
+      if (signatured_type *sig_type = per_cu.as_signatured_type ();
 	  (sig_type != nullptr
 	   && sig_type->section () == nullptr
 	   && sig_type->hint_per_cu == nullptr))
@@ -1764,7 +1764,7 @@  dwarf2_base_index_functions::expand_all_symtabs (struct objfile *objfile)
 	 be triggered later on.  See PR symtab/23010.  So, tell
 	 dw2_instantiate_symtab to skip partial CUs -- any important
 	 partial CU will be read via DW_TAG_imported_unit anyway.  */
-      dw2_instantiate_symtab (per_cu, per_objfile, true);
+      dw2_instantiate_symtab (&per_cu, per_objfile, true);
     }
 }
 
@@ -1983,16 +1983,16 @@  dwarf2_base_index_functions::map_symbol_filenames (objfile *objfile,
 	}
     }
 
-  for (dwarf2_per_cu *per_cu : all_units_range (per_objfile->per_bfd))
+  for (dwarf2_per_cu &per_cu : all_units_range (per_objfile->per_bfd))
     {
       /* We only need to look at symtabs not already expanded.  */
-      if (per_cu->is_debug_types ()
-	  || per_objfile->compunit_symtab_set_p (per_cu))
+      if (per_cu.is_debug_types ()
+	  || per_objfile->compunit_symtab_set_p (&per_cu))
 	continue;
 
-      if (per_cu->fnd != nullptr)
+      if (per_cu.fnd != nullptr)
 	{
-	  file_and_directory *fnd = per_cu->fnd.get ();
+	  file_and_directory *fnd = per_cu.fnd.get ();
 
 	  const char *filename = fnd->get_name ();
 	  const char *key = filename;
@@ -2008,7 +2008,7 @@  dwarf2_base_index_functions::map_symbol_filenames (objfile *objfile,
 	    fun (filename, fullname);
 	}
 
-      quick_file_names *file_data = dw2_get_file_names (per_cu, per_objfile);
+      quick_file_names *file_data = dw2_get_file_names (&per_cu, per_objfile);
       if (file_data == nullptr
 	  || qfn_cache.find (file_data) != qfn_cache.end ())
 	continue;
@@ -13887,11 +13887,11 @@  cooked_index_functions::search
   gdb_assert (lookup_name != nullptr || symbol_matcher == nullptr);
   if (lookup_name == nullptr)
     {
-      for (dwarf2_per_cu *per_cu : all_units_range (per_objfile->per_bfd))
+      for (dwarf2_per_cu &per_cu : all_units_range (per_objfile->per_bfd))
 	{
 	  QUIT;
 
-	  if (search_one (per_cu, per_objfile, cus_to_skip, compunit_callback,
+	  if (search_one (&per_cu, per_objfile, cus_to_skip, compunit_callback,
 			  lang_matcher)
 	      == iteration_status::stop)
 	    return iteration_status::stop;
diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h
index 12dc6224d8c0..327b6eb421a1 100644
--- a/gdb/dwarf2/read.h
+++ b/gdb/dwarf2/read.h
@@ -591,9 +591,9 @@  struct dwarf2_per_bfd
   { return bfd_get_filename (this->obfd); }
 
   /* Return the unit given its index.  */
-  dwarf2_per_cu *get_unit (int index) const
+  dwarf2_per_cu &get_unit (int index) const
   {
-    return this->all_units[index].get ();
+    return *this->all_units[index];
   }
 
   /* Ensure that the all_units vector is in the expected order for
@@ -802,7 +802,7 @@  class all_units_iterator
     return *this;
   }
 
-  dwarf2_per_cu *operator* () const
+  dwarf2_per_cu &operator* () const
   {
     return m_per_bfd->get_unit (m_index);
   }