Use gdb_bfd_sections in ELF osabi tag sniffing
authorTom Tromey <tom@tromey.com>
Sat, 19 Sep 2020 17:54:49 +0000 (11:54 -0600)
committerTom Tromey <tom@tromey.com>
Sat, 19 Sep 2020 17:54:52 +0000 (11:54 -0600)
This changes some ELF osabi tag-sniffing functions to avoid
bfd_map_over_sections, in favor of iteration.  I could only readily
test the generic one.

gdb/ChangeLog
2020-09-19  Tom Tromey  <tom@tromey.com>

* osabi.h (generic_elf_osabi_sniff_abi_tag_sections): Update.
* osabi.c (generic_elf_osabi_sniff_abi_tag_sections): Change
parameters.
(generic_elf_osabi_sniffer): Use foreach.
* mips-sde-tdep.c (mips_sde_elf_osabi_sniffer): Use foreach.
* arm-tdep.c (arm_elf_osabi_sniffer): Use foreach.

gdb/ChangeLog
gdb/arm-tdep.c
gdb/mips-sde-tdep.c
gdb/osabi.c
gdb/osabi.h

index dab34bf492175d94ebc7b93529b993c3b076903b..1fb3c8834a1a992ae595ed6db7a07e663f6e9466 100644 (file)
@@ -1,3 +1,12 @@
+2020-09-19  Tom Tromey  <tom@tromey.com>
+
+       * osabi.h (generic_elf_osabi_sniff_abi_tag_sections): Update.
+       * osabi.c (generic_elf_osabi_sniff_abi_tag_sections): Change
+       parameters.
+       (generic_elf_osabi_sniffer): Use foreach.
+       * mips-sde-tdep.c (mips_sde_elf_osabi_sniffer): Use foreach.
+       * arm-tdep.c (arm_elf_osabi_sniffer): Use foreach.
+
 2020-09-19  Tom Tromey  <tom@tromey.com>
 
        * dwarf2/read.c (locate_dwz_sections): Change parameters.
index 23da42f934cf1ea446e61c3c63caade3ac2c1990..91ab4410842dd04ae0ae1b654e1ac6fdb997ec9e 100644 (file)
@@ -8863,9 +8863,10 @@ arm_elf_osabi_sniffer (bfd *abfd)
   if (elfosabi == ELFOSABI_ARM)
     /* GNU tools use this value.  Check note sections in this case,
        as well.  */
-    bfd_map_over_sections (abfd,
-                          generic_elf_osabi_sniff_abi_tag_sections, 
-                          &osabi);
+    {
+      for (asection *sect : gdb_bfd_sections (abfd))
+       generic_elf_osabi_sniff_abi_tag_sections (abfd, sect, &osabi);
+    }
 
   /* Anything else will be handled by the generic ELF sniffer.  */
   return osabi;
index 685c3c7263c0c5c8e12c2d02e243219ea3daf432..1d282c219e56a5d9b82bd01cc3e9ff07f2ba55e9 100644 (file)
@@ -226,9 +226,8 @@ mips_sde_elf_osabi_sniffer (bfd *abfd)
 
   /* If the generic sniffer gets a hit, return and let other sniffers
      get a crack at it.  */
-  bfd_map_over_sections (abfd,
-                        generic_elf_osabi_sniff_abi_tag_sections,
-                        &osabi);
+  for (asection *sect : gdb_bfd_sections (abfd))
+    generic_elf_osabi_sniff_abi_tag_sections (abfd, sect, &osabi);
   if (osabi != GDB_OSABI_UNKNOWN)
     return GDB_OSABI_UNKNOWN;
 
index 627b9d98151513d1af0126ae8474139c3a515350..e8a813b62f268417edf5f0ad164c9c942bd43b1e 100644 (file)
@@ -23,6 +23,7 @@
 #include "arch-utils.h"
 #include "gdbcmd.h"
 #include "command.h"
+#include "gdb_bfd.h"
 
 #include "elf-bfd.h"
 
@@ -439,9 +440,9 @@ check_note (bfd *abfd, asection *sect, char *note, unsigned int *sectsize,
 /* Generic sniffer for ELF flavoured files.  */
 
 void
-generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, void *obj)
+generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect,
+                                         enum gdb_osabi *osabi)
 {
-  enum gdb_osabi *osabi = (enum gdb_osabi *) obj;
   const char *name;
   unsigned int sectsize;
   char *note;
@@ -561,9 +562,8 @@ generic_elf_osabi_sniffer (bfd *abfd)
       /* And likewise ELFOSABI_HPUX.  For some reason the default
         value for the EI_OSABI field is ELFOSABI_HPUX for all PA-RISC
         targets (with the exception of GNU/Linux).  */
-      bfd_map_over_sections (abfd,
-                            generic_elf_osabi_sniff_abi_tag_sections,
-                            &osabi);
+      for (asection *sect : gdb_bfd_sections (abfd))
+       generic_elf_osabi_sniff_abi_tag_sections (abfd, sect, &osabi);
       break;
 
     case ELFOSABI_FREEBSD:
index a7e6a10d01983c66d16420e557b53705b92a830b..9b7ab1818c0a19411bd80b18c9286751b1cc3725 100644 (file)
@@ -86,8 +86,8 @@ const char *gdbarch_osabi_name (enum gdb_osabi);
 const char *osabi_triplet_regexp (enum gdb_osabi osabi);
 
 /* Helper routine for ELF file sniffers.  This looks at ABI tag note
-   sections to determine the OS ABI from the note.  It should be called
-   via bfd_map_over_sections.  */
-void generic_elf_osabi_sniff_abi_tag_sections (bfd *, asection *, void *);
+   sections to determine the OS ABI from the note.  */
+void generic_elf_osabi_sniff_abi_tag_sections (bfd *, asection *,
+                                              enum gdb_osabi *);
 
 #endif /* OSABI_H */