diff options
author | Maciej W. Rozycki <macro@codesourcery.com> | 2014-09-09 23:41:28 +0100 |
---|---|---|
committer | Maciej W. Rozycki <macro@codesourcery.com> | 2014-09-10 00:02:02 +0100 |
commit | 6e46637421cc7318c3a1333e32725eaca5f7af4c (patch) | |
tree | 408913f7716a22a7e78ab72685596e07f00c25d9 /gdb/mips-irix-tdep.c | |
parent | a1ada89ac66ca4a3815e586396a09eb311cf9b77 (diff) | |
download | gdb-6e46637421cc7318c3a1333e32725eaca5f7af4c.zip gdb-6e46637421cc7318c3a1333e32725eaca5f7af4c.tar.gz gdb-6e46637421cc7318c3a1333e32725eaca5f7af4c.tar.bz2 |
MIPS: Don't infer IRIX OS ABI from generic section names
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.
Diffstat (limited to 'gdb/mips-irix-tdep.c')
-rw-r--r-- | gdb/mips-irix-tdep.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/gdb/mips-irix-tdep.c b/gdb/mips-irix-tdep.c index a017e3b..1232be8 100644 --- a/gdb/mips-irix-tdep.c +++ b/gdb/mips-irix-tdep.c @@ -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 |