Add Irix osabi support.
authorKevin Buettner <kevinb@redhat.com>
Sat, 27 Jul 2002 01:28:43 +0000 (01:28 +0000)
committerKevin Buettner <kevinb@redhat.com>
Sat, 27 Jul 2002 01:28:43 +0000 (01:28 +0000)
gdb/ChangeLog
gdb/mips-irix-tdep.c [new file with mode: 0644]
gdb/osabi.c
gdb/osabi.h

index 10bb83b..3b38e6f 100644 (file)
@@ -4,6 +4,10 @@
        * solib-irix.c: ...to here.  Revised substantially to work with
        generic solib framework.
 
+       * osabi.h (gdb_osabi): Add new enum constant GDB_OSABI_IRIX.
+       * osabi.c (gdb_osabi_names): Add corresponding string for Irix.
+       * mips-irix-tdep.c: New file.
+
 2002-07-26  Kevin Buettner  <kevinb@redhat.com>
 
        * aix-thread.c (coff/internal.h, bfd/libcoff.h, pthread.h): Remove
diff --git a/gdb/mips-irix-tdep.c b/gdb/mips-irix-tdep.c
new file mode 100644 (file)
index 0000000..73183ca
--- /dev/null
@@ -0,0 +1,95 @@
+/* Target-dependent code for the MIPS architecture running on IRIX,
+   for GDB, the GNU Debugger.
+
+   Copyright 2002 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include "defs.h"
+#include "osabi.h"
+
+#include "elf-bfd.h"
+
+static void
+mips_irix_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect,
+                                            void *obj)
+{
+  enum gdb_osabi *os_ident_ptr = obj;
+  const char *name;
+  unsigned int sectsize;
+
+  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;
+    }
+}
+
+static enum gdb_osabi
+mips_irix_elf_osabi_sniffer (bfd *abfd)
+{
+  unsigned int elfosabi;
+  enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
+
+  /* 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);
+  if (osabi != GDB_OSABI_UNKNOWN)
+    return GDB_OSABI_UNKNOWN;
+
+  elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
+
+  if (elfosabi == ELFOSABI_NONE)
+    {
+      /* When elfosabi is ELFOSABI_NONE (0), then the ELF structures in the
+        file are conforming to the base specification for that machine 
+        (there are no OS-specific extensions).  In order to determine the 
+        real OS in use we must look for OS notes that have been added.  
+        
+        For IRIX, we simply look for sections named with .MIPS. as
+        prefixes.  */
+      bfd_map_over_sections (abfd,
+                            mips_irix_elf_osabi_sniff_abi_tag_sections, 
+                            &osabi);
+    }
+  return osabi;
+}
+
+static void
+mips_irix_init_abi (struct gdbarch_info info,
+                    struct gdbarch *gdbarch)
+{
+}
+
+void
+_initialize_mips_irix_tdep (void)
+{
+  /* Register an ELF OS ABI sniffer for IRIX binaries.  */
+  gdbarch_register_osabi_sniffer (bfd_arch_mips,
+                                 bfd_target_elf_flavour,
+                                 mips_irix_elf_osabi_sniffer);
+
+  gdbarch_register_osabi (bfd_arch_mips, GDB_OSABI_IRIX,
+                         mips_irix_init_abi);
+}
index c152cb4..580c7e1 100644 (file)
@@ -42,6 +42,7 @@ static const char * const gdb_osabi_names[] =
   "Windows CE",
   "DJGPP",
   "NetWare",
+  "Irix",
   "LynxOS",
 
   "ARM EABI v1",
index 1654f9d..f62bde7 100644 (file)
@@ -39,6 +39,7 @@ enum gdb_osabi
   GDB_OSABI_WINCE,
   GDB_OSABI_GO32,
   GDB_OSABI_NETWARE,
+  GDB_OSABI_IRIX,
   GDB_OSABI_LYNXOS,
 
   GDB_OSABI_ARM_EABI_V1,