build_section_table cannot fail
authorTom Tromey <tom@tromey.com>
Mon, 12 Oct 2020 21:53:16 +0000 (15:53 -0600)
committerTom Tromey <tom@tromey.com>
Tue, 13 Oct 2020 02:18:47 +0000 (20:18 -0600)
I noticed that build_section_table cannot fail.  This patch changes it
to return a target_section_table and then removes the dead code.

gdb/ChangeLog
2020-10-12  Tom Tromey  <tom@tromey.com>

* solib.c (solib_map_sections): Update.
* record-full.c (record_full_core_open_1): Update.
* exec.h (build_section_table): Return a target_section_table.
* exec.c (exec_file_attach): Update.
(build_section_table): Return a target_section_table.
* corelow.c (core_target::core_target): Update.
* bfd-target.c (target_bfd::target_bfd): Update.

gdb/ChangeLog
gdb/bfd-target.c
gdb/corelow.c
gdb/exec.c
gdb/exec.h
gdb/record-full.c
gdb/solib.c

index 4097647767db8d935238d262898b9e080d67a5a7..7a66a4ddeb827640bd193614d8158a02f7983205 100644 (file)
@@ -1,3 +1,13 @@
+2020-10-12  Tom Tromey  <tom@tromey.com>
+
+       * solib.c (solib_map_sections): Update.
+       * record-full.c (record_full_core_open_1): Update.
+       * exec.h (build_section_table): Return a target_section_table.
+       * exec.c (exec_file_attach): Update.
+       (build_section_table): Return a target_section_table.
+       * corelow.c (core_target::core_target): Update.
+       * bfd-target.c (target_bfd::target_bfd): Update.
+
 2020-10-12  Tom Tromey  <tom@tromey.com>
 
        * target.c (target_section_by_addr, memory_xfer_partial_1):
index 8a58e92eb1cc5ac05fa3c24e1099e2f4049dce8e..d5defab9a80dcf6189626a65c0a7bbaf6427c187 100644 (file)
@@ -89,9 +89,9 @@ target_bfd::get_section_table ()
 }
 
 target_bfd::target_bfd (struct bfd *abfd)
-  : m_bfd (gdb_bfd_ref_ptr::new_reference (abfd))
+  : m_bfd (gdb_bfd_ref_ptr::new_reference (abfd)),
+    m_table (build_section_table (abfd))
 {
-  build_section_table (abfd, &m_table);
 }
 
 target_ops *
index 554561dbb36273c1fdb99b6b62b8bf6aa23671ce..193dccbeeb51760a3db8578ccdd4d4d5be3723d3 100644 (file)
@@ -161,9 +161,7 @@ core_target::core_target ()
           bfd_get_filename (core_bfd));
 
   /* Find the data section */
-  if (build_section_table (core_bfd, &m_core_section_table))
-    error (_("\"%s\": Can't find sections: %s"),
-          bfd_get_filename (core_bfd), bfd_errmsg (bfd_get_error ()));
+  m_core_section_table = build_section_table (core_bfd);
 
   build_file_mappings ();
 }
index e3e515fedec526036fe13bac977772e663380fe8..d4b9b7bcf6576e49230598ebf48d4cb2cc07368f 100644 (file)
@@ -413,7 +413,6 @@ exec_file_attach (const char *filename, int from_tty)
       int load_via_target = 0;
       const char *scratch_pathname, *canonical_pathname;
       int scratch_chan;
-      target_section_table sections;
       char **matching;
 
       if (is_target_filename (filename))
@@ -503,15 +502,7 @@ exec_file_attach (const char *filename, int from_tty)
                 gdb_bfd_errmsg (bfd_get_error (), matching).c_str ());
        }
 
-      if (build_section_table (exec_bfd, &sections))
-       {
-         /* Make sure to close exec_bfd, or else "run" might try to use
-            it.  */
-         exec_close ();
-         error (_("\"%ps\": can't find the file sections: %s"),
-                styled_string (file_name_style.style (), scratch_pathname),
-                bfd_errmsg (bfd_get_error ()));
-       }
+      target_section_table sections = build_section_table (exec_bfd);
 
       exec_bfd_mtime = bfd_get_mtime (exec_bfd);
 
@@ -594,13 +585,13 @@ clear_section_table (struct target_section_table *table)
   table->sections.clear ();
 }
 
-/* Builds a section table, given args BFD, TABLE.
-   Returns 0 if OK, 1 on error.  */
+/* Builds a section table, given args BFD, TABLE.  */
 
-int
-build_section_table (struct bfd *some_bfd, target_section_table *table)
+target_section_table
+build_section_table (struct bfd *some_bfd)
 {
-  table->sections.clear ();
+  target_section_table table;
+
   for (asection *asect : gdb_bfd_sections (some_bfd))
     {
       flagword aflag;
@@ -615,16 +606,15 @@ build_section_table (struct bfd *some_bfd, target_section_table *table)
       if (!(aflag & SEC_ALLOC))
        continue;
 
-      table->sections.emplace_back ();
-      target_section &sect = table->sections.back ();
+      table.sections.emplace_back ();
+      target_section &sect = table.sections.back ();
       sect.owner = NULL;
       sect.the_bfd_section = asect;
       sect.addr = bfd_section_vma (asect);
       sect.endaddr = sect.addr + bfd_section_size (asect);
     }
 
-  /* We could realloc the table, but it probably loses for most files.  */
-  return 0;
+  return table;
 }
 
 /* Add the sections array defined by [SECTIONS..SECTIONS_END[ to the
index d26eba492367f2a8ebac7825c4679aa0f126ee53..75177dda96a6942d766c4e0ade152ca1dc7f9817 100644 (file)
@@ -34,10 +34,9 @@ struct objfile;
 #define exec_bfd_mtime current_program_space->ebfd_mtime
 #define exec_filename current_program_space->pspace_exec_filename
 
-/* Builds a section table, given args BFD, SECTABLE_PTR, SECEND_PTR.
-   Returns 0 if OK, 1 on error.  */
+/* Builds a section table, given args BFD.  */
 
-extern int build_section_table (struct bfd *, struct target_section_table *);
+extern target_section_table build_section_table (struct bfd *);
 
 /* Remove all entries from TABLE.  */
 
index 5dcb42d2f4e637b3a4a513090961020e3d8af323..40740f216cea9f7c6b19a0381d44d48ecd4f8f7e 100644 (file)
@@ -923,13 +923,7 @@ record_full_core_open_1 (const char *name, int from_tty)
   for (i = 0; i < regnum; i ++)
     record_full_core_regbuf->raw_supply (i, *regcache);
 
-  if (build_section_table (core_bfd, &record_full_core_sections))
-    {
-      delete record_full_core_regbuf;
-      record_full_core_regbuf = NULL;
-      error (_("\"%s\": Can't find sections: %s"),
-            bfd_get_filename (core_bfd), bfd_errmsg (bfd_get_error ()));
-    }
+  record_full_core_sections = build_section_table (core_bfd);
 
   push_target (&record_full_core_ops);
   record_full_restore ();
index 906e1788c49b02db261c17b5d39244dce8074dc8..bd6a27d89837dc9198d014ca285dc78c83566d6d 100644 (file)
@@ -554,11 +554,7 @@ solib_map_sections (struct so_list *so)
 
   if (so->sections == nullptr)
     so->sections = new target_section_table;
-  if (build_section_table (so->abfd, so->sections))
-    {
-      error (_("Can't find the file sections in `%s': %s"),
-            bfd_get_filename (so->abfd), bfd_errmsg (bfd_get_error ()));
-    }
+  *so->sections = build_section_table (so->abfd);
 
   for (target_section &p : so->sections->sections)
     {