[PATCH 12/13] Use gdb_bfd_sections in build_section_table

Tom Tromey tom@tromey.com
Fri Aug 28 16:23:48 GMT 2020


This changes build_section_table to avoid bfd_map_over_sections, in
favor of iteration.  In this situation it seemed simple to just remove
the helper function entirely.

gdb/ChangeLog
2020-08-28  Tom Tromey  <tom@tromey.com>

	* exec.c (add_to_section_table): Remove.
	(build_section_table): Use foreach.
---
 gdb/ChangeLog |  5 +++++
 gdb/exec.c    | 50 ++++++++++++++++++++------------------------------
 2 files changed, 25 insertions(+), 30 deletions(-)

diff --git a/gdb/exec.c b/gdb/exec.c
index e50f38899d6..14cc6af7de0 100644
--- a/gdb/exec.c
+++ b/gdb/exec.c
@@ -587,35 +587,6 @@ file_command (const char *arg, int from_tty)
 }
 
 
-/* Locate all mappable sections of a BFD file.
-   table_pp_char is a char * to get it through bfd_map_over_sections;
-   we cast it back to its proper type.  */
-
-static void
-add_to_section_table (bfd *abfd, struct bfd_section *asect,
-		      void *table_pp_char)
-{
-  struct target_section **table_pp = (struct target_section **) table_pp_char;
-  flagword aflag;
-
-  gdb_assert (abfd == asect->owner);
-
-  /* Check the section flags, but do not discard zero-length sections, since
-     some symbols may still be attached to this section.  For instance, we
-     encountered on sparc-solaris 2.10 a shared library with an empty .bss
-     section to which a symbol named "_end" was attached.  The address
-     of this symbol still needs to be relocated.  */
-  aflag = bfd_section_flags (asect);
-  if (!(aflag & SEC_ALLOC))
-    return;
-
-  (*table_pp)->owner = NULL;
-  (*table_pp)->the_bfd_section = asect;
-  (*table_pp)->addr = bfd_section_vma (asect);
-  (*table_pp)->endaddr = (*table_pp)->addr + bfd_section_size (asect);
-  (*table_pp)++;
-}
-
 /* See exec.h.  */
 
 void
@@ -665,7 +636,26 @@ build_section_table (struct bfd *some_bfd, struct target_section **start,
   xfree (*start);
   *start = XNEWVEC (struct target_section, count);
   *end = *start;
-  bfd_map_over_sections (some_bfd, add_to_section_table, (char *) end);
+  for (asection *asect : gdb_bfd_sections (some_bfd))
+    {
+      flagword aflag;
+
+      /* Check the section flags, but do not discard zero-length
+	 sections, since some symbols may still be attached to this
+	 section.  For instance, we encountered on sparc-solaris 2.10
+	 a shared library with an empty .bss section to which a symbol
+	 named "_end" was attached.  The address of this symbol still
+	 needs to be relocated.  */
+      aflag = bfd_section_flags (asect);
+      if (!(aflag & SEC_ALLOC))
+	continue;
+
+      (*end)->owner = NULL;
+      (*end)->the_bfd_section = asect;
+      (*end)->addr = bfd_section_vma (asect);
+      (*end)->endaddr = (*end)->addr + bfd_section_size (asect);
+      (*end)++;
+    }
 
   gdb_assert (*end <= *start + count);
 
-- 
2.17.2



More information about the Gdb-patches mailing list