MIPS: Don't infer IRIX OS ABI from generic section names
authorMaciej W. Rozycki <macro@codesourcery.com>
Tue, 9 Sep 2014 22:41:28 +0000 (23:41 +0100)
committerMaciej W. Rozycki <macro@codesourcery.com>
Tue, 9 Sep 2014 23:02:02 +0000 (00:02 +0100)
There are `.MIPS.abiflags', `.MIPS.options' and `.MIPS.stubs' sections
also present in Linux executables, so we can't infer IRIX OS ABI solely
from the existence of these sections.  This is not going to be a problem
as there are bound to be other sections whose names start with `.MIPS.'
in IRIX executables and this selection only matters for a non-default OS
ABI in a multiple-target GDB executable.  As a last resort the automatic
selection can be overridden with `set osabi'.

* mips-irix-tdep.c (mips_irix_elf_osabi_sniff_abi_tag_sections):
Exclude `.MIPS.abiflags', `.MIPS.options' and `.MIPS.stubs' from
the list of sections determining GDB_OSABI_IRIX.

gdb/ChangeLog
gdb/mips-irix-tdep.c

index 5ce1ec1..afb1f92 100644 (file)
@@ -1,3 +1,9 @@
+2014-09-09  Maciej W. Rozycki  <macro@codesourcery.com>
+
+       * mips-irix-tdep.c (mips_irix_elf_osabi_sniff_abi_tag_sections):
+       Exclude `.MIPS.abiflags', `.MIPS.options' and `.MIPS.stubs' from
+       the list of sections determining GDB_OSABI_IRIX.
+
 2014-09-09  James Hogan  <james.hogan@imgtec.com>
 
        * MAINTAINERS (Write After Approval): Add "James Hogan".
index a017e3b..1232be8 100644 (file)
@@ -38,12 +38,16 @@ mips_irix_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect,
   name = bfd_get_section_name (abfd, sect);
   sectsize = bfd_section_size (abfd, sect);
 
-  if (strncmp (name, ".MIPS.", 6) == 0 && sectsize > 0)
-    {
-      /* The presence of a section named with a ".MIPS." prefix is
-         indicative of an IRIX binary.  */
-      *os_ident_ptr = GDB_OSABI_IRIX;
-    }
+  /* The presence of a section named with a ".MIPS." prefix is usually
+     indicative of an IRIX binary, however there are exceptions that
+     are present universally, so check for those names and avoid
+     switching away from the default OS ABI in the case of a match.  */
+  if (strncmp (name, ".MIPS.", 6) == 0
+      && strcmp (name, ".MIPS.abiflags") != 0
+      && strcmp (name, ".MIPS.options") != 0
+      && strcmp (name, ".MIPS.stubs") != 0
+      && sectsize > 0)
+    *os_ident_ptr = GDB_OSABI_IRIX;
 }
 
 static enum gdb_osabi