This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Irix OSABI support


I've just committed the patch below.  I'll commit the configury changes
separately.

	* 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.

Index: osabi.h
===================================================================
RCS file: /cvs/src/src/gdb/osabi.h,v
retrieving revision 1.3
diff -u -p -r1.3 osabi.h
--- osabi.h	15 Jun 2002 12:26:31 -0000	1.3
+++ osabi.h	27 Jul 2002 01:24:44 -0000
@@ -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,
Index: osabi.c
===================================================================
RCS file: /cvs/src/src/gdb/osabi.c,v
retrieving revision 1.4
diff -u -p -r1.4 osabi.c
--- osabi.c	4 Jul 2002 15:36:51 -0000	1.4
+++ osabi.c	27 Jul 2002 01:24:44 -0000
@@ -42,6 +42,7 @@ static const char * const gdb_osabi_name
   "Windows CE",
   "DJGPP",
   "NetWare",
+  "Irix",
   "LynxOS",
 
   "ARM EABI v1",
Index: mips-irix-tdep.c
===================================================================
RCS file: mips-irix-tdep.c
diff -N mips-irix-tdep.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ mips-irix-tdep.c	27 Jul 2002 01:24:44 -0000
@@ -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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]