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] Add machine type to gdbarch_register_osbi


I discussed the guts of this patch somehwere in october or november
and got only a single positive reply.  I'm going to check this in next
weekend unless someone complains.

Mark

Index: ChangeLog
from  Mark Kettenis  <kettenis@gnu.org>

	* osabi.c: Include "gdb_assert.h" and "gdb_string.h".
	(struct gdb_osabi_handler): Remove member `arch'.  Add member
	`arch_info'.
	(gdbarch_register_osabi): Add new argument `machine'.  Use ot to
	construct a `struct bfd_arch_info' and store it in the `struct
	gdb_osabi_handler' that is created.
	(gdbarch_init_osabi): Check for compatibility based on machine
	type and architecture.
	* osabi.h (gdbarch_register_osabi): Adjust prototype and update
	comment.
	* alpha-linux-tdep.c (_initialize_alpha_linux_tdep): Add 0 as
	second argument in call to gdbarch_register_osabi.
	* alpha-osf1-tdep.c (_initialize_alpha_osf1_tdep): Likewise.
	* alphafbsd-tdep.c (_initialize_alphafbsd_tdep): Likewise.
	* alphanbsd-tdep.c (_initialize_alphanbsd_tdep): Likewise.
	* arm-linux-tdep.c (_initialize_arm_linux_tdep): Likewise.
	* arm-tdep.c (_initialize_arm_tdep): Likewise.
	* armnbsd-tdep.c (_initialize_armnbsd_tdep): Likewise.
	* i386-interix-tdep.c (_initialize_i386_interix_tdep): Likewise.
	* i386-linux-tdep.c (_initialize_i386_linux_tdep): Likewise.
	* i386-sol2-tdep.c (_initialize_i386_sol2_tdep): Likewise.
	* i386-tdep.c (_initialize_i386_tdep): Likewise.
	* i386bsd-tdep.c (_initialize_i386bsd_tdep): Likewise.
	* i386gnu-tdep.c (_initialize_i386gnu_tdep): Likewise.
	* i386ly-tdep.c (_initialize_i386lynx_tdep): Renamed from
	_initialize_i386bsd_tdep and updated likewise.
	* i386nbsd-tdep.c (_initialize_i386nbsd_tdep): Likewise.
	* i386obsd-tdep.c (_initialize_i386obsd_tdep): Likewise.
	* mips-irix-tdep.c (_initialize_mips_irix_tdep): Likewise.
	* mipsnbsd-tdep.c (_initialize_mipsnbsd__tdep): Likewise.
	* ns32knbsd-tdep.c (_initialize_ns32kmnsd_tdep): Likewise.
	* ppc-linux-tdep.c (_initialize_ppc_linux_tdep): Likewise.
	* ppcnbsd-tdep.c (_initialize_ppcnbsd_tdep): Likewise.
	* shnbsd-tdep.c (_initialize_shnbsd_tdep): Likewise.
	* sparcnbsd-tdep.c (_initialize_sparcnbsd_tdep): Likewise.

Index: alpha-linux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/alpha-linux-tdep.c,v
retrieving revision 1.6
diff -u -p -r1.6 alpha-linux-tdep.c
--- alpha-linux-tdep.c 21 May 2002 15:36:02 -0000 1.6
+++ alpha-linux-tdep.c 14 Dec 2002 14:31:31 -0000
@@ -116,6 +116,6 @@ alpha_linux_init_abi (struct gdbarch_inf
 void
 _initialize_alpha_linux_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_alpha, GDB_OSABI_LINUX,
+  gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_LINUX,
                           alpha_linux_init_abi);
 }
Index: alpha-osf1-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/alpha-osf1-tdep.c,v
retrieving revision 1.6
diff -u -p -r1.6 alpha-osf1-tdep.c
--- alpha-osf1-tdep.c 17 Aug 2002 06:12:51 -0000 1.6
+++ alpha-osf1-tdep.c 14 Dec 2002 14:31:31 -0000
@@ -73,5 +73,6 @@ alpha_osf1_init_abi (struct gdbarch_info
 void
 _initialize_alpha_osf1_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_alpha, GDB_OSABI_OSF1, alpha_osf1_init_abi);
+  gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_OSF1,
+			  alpha_osf1_init_abi);
 }
Index: alphafbsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/alphafbsd-tdep.c,v
retrieving revision 1.5
diff -u -p -r1.5 alphafbsd-tdep.c
--- alphafbsd-tdep.c 21 May 2002 15:36:02 -0000 1.5
+++ alphafbsd-tdep.c 14 Dec 2002 14:31:31 -0000
@@ -78,6 +78,6 @@ alphafbsd_init_abi (struct gdbarch_info 
 void
 _initialize_alphafbsd_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_alpha, GDB_OSABI_FREEBSD_ELF,
+  gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_FREEBSD_ELF,
                           alphafbsd_init_abi);
 }
Index: alphanbsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/alphanbsd-tdep.c,v
retrieving revision 1.10
diff -u -p -r1.10 alphanbsd-tdep.c
--- alphanbsd-tdep.c 31 Aug 2002 22:43:38 -0000 1.10
+++ alphanbsd-tdep.c 14 Dec 2002 14:31:31 -0000
@@ -232,7 +232,7 @@ alphanbsd_init_abi (struct gdbarch_info 
 void
 _initialize_alphanbsd_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_alpha, GDB_OSABI_NETBSD_ELF,
+  gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_NETBSD_ELF,
                           alphanbsd_init_abi);
 
   add_core_fns (&alphanbsd_core_fns);
Index: arm-linux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-linux-tdep.c,v
retrieving revision 1.23
diff -u -p -r1.23 arm-linux-tdep.c
--- arm-linux-tdep.c 14 Jun 2002 22:55:40 -0000 1.23
+++ arm-linux-tdep.c 14 Dec 2002 14:31:32 -0000
@@ -543,5 +543,6 @@ arm_linux_init_abi (struct gdbarch_info 
 void
 _initialize_arm_linux_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_arm, GDB_OSABI_LINUX, arm_linux_init_abi);
+  gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_LINUX,
+			  arm_linux_init_abi);
 }
Index: arm-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-tdep.c,v
retrieving revision 1.83
diff -u -p -r1.83 arm-tdep.c
--- arm-tdep.c 14 Dec 2002 10:42:05 -0000 1.83
+++ arm-tdep.c 14 Dec 2002 14:31:33 -0000
@@ -3110,11 +3110,11 @@ _initialize_arm_tdep (void)
 				  arm_elf_osabi_sniffer);
 
   /* Register some ABI variants for embedded systems.  */
-  gdbarch_register_osabi (bfd_arch_arm, GDB_OSABI_ARM_EABI_V1,
+  gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_ARM_EABI_V1,
                           arm_init_abi_eabi_v1);
-  gdbarch_register_osabi (bfd_arch_arm, GDB_OSABI_ARM_EABI_V2,
+  gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_ARM_EABI_V2,
                           arm_init_abi_eabi_v2);
-  gdbarch_register_osabi (bfd_arch_arm, GDB_OSABI_ARM_APCS,
+  gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_ARM_APCS,
                           arm_init_abi_apcs);
 
   tm_print_insn = gdb_print_insn_arm;
Index: armnbsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/armnbsd-tdep.c,v
retrieving revision 1.6
diff -u -p -r1.6 armnbsd-tdep.c
--- armnbsd-tdep.c 22 May 2002 03:59:53 -0000 1.6
+++ armnbsd-tdep.c 14 Dec 2002 14:31:34 -0000
@@ -97,8 +97,8 @@ _initialize_arm_netbsd_tdep (void)
   gdbarch_register_osabi_sniffer (bfd_arch_arm, bfd_target_aout_flavour,
 				  arm_netbsd_aout_osabi_sniffer);
 
-  gdbarch_register_osabi (bfd_arch_arm, GDB_OSABI_NETBSD_AOUT,
+  gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_NETBSD_AOUT,
                           arm_netbsd_aout_init_abi);
-  gdbarch_register_osabi (bfd_arch_arm, GDB_OSABI_NETBSD_ELF,
+  gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_NETBSD_ELF,
                           arm_netbsd_elf_init_abi);
 }
Index: i386-interix-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-interix-tdep.c,v
retrieving revision 1.4
diff -u -p -r1.4 i386-interix-tdep.c
--- i386-interix-tdep.c 11 Dec 2002 02:26:36 -0000 1.4
+++ i386-interix-tdep.c 14 Dec 2002 14:31:34 -0000
@@ -354,6 +354,6 @@ _initialize_i386_interix_tdep (void)
   gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
                                   i386_interix_osabi_sniffer);
 
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_INTERIX,
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_INTERIX,
                           i386_interix_init_abi);
 }
Index: i386-linux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-linux-tdep.c,v
retrieving revision 1.19
diff -u -p -r1.19 i386-linux-tdep.c
--- i386-linux-tdep.c 8 Nov 2002 23:59:58 -0000 1.19
+++ i386-linux-tdep.c 14 Dec 2002 14:31:34 -0000
@@ -482,6 +482,6 @@ extern void _initialize_i386_linux_tdep 
 void
 _initialize_i386_linux_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_LINUX,
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_LINUX,
 			  i386_linux_init_abi);
 }
Index: i386-sol2-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-sol2-tdep.c,v
retrieving revision 1.7
diff -u -p -r1.7 i386-sol2-tdep.c
--- i386-sol2-tdep.c 18 Aug 2002 14:47:59 -0000 1.7
+++ i386-sol2-tdep.c 14 Dec 2002 14:31:34 -0000
@@ -75,6 +75,6 @@ _initialize_i386_sol2_tdep (void)
   gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour,
 				  i386_sol2_osabi_sniffer);
 
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_SOLARIS,
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_SOLARIS,
 			  i386_sol2_init_abi);
 }
Index: i386-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-tdep.c,v
retrieving revision 1.103
diff -u -p -r1.103 i386-tdep.c
--- i386-tdep.c 11 Dec 2002 14:38:23 -0000 1.103
+++ i386-tdep.c 14 Dec 2002 14:31:35 -0000
@@ -1715,11 +1715,11 @@ are \"default\", \"pcc\" and \"reg\", an
   gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_nlm_flavour,
 				  i386_nlm_osabi_sniffer);
 
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_SVR4,
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_SVR4,
 			  i386_svr4_init_abi);
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_GO32,
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_GO32,
 			  i386_go32_init_abi);
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_NETWARE,
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_NETWARE,
 			  i386_nw_init_abi);
 
   /* Initialize the i386 specific register groups.  */
Index: i386bsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386bsd-tdep.c,v
retrieving revision 1.10
diff -u -p -r1.10 i386bsd-tdep.c
--- i386bsd-tdep.c 6 Sep 2002 20:44:22 -0000 1.10
+++ i386bsd-tdep.c 14 Dec 2002 14:31:35 -0000
@@ -195,8 +195,8 @@ _initialize_i386bsd_tdep (void)
   gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_aout_flavour,
 				  i386bsd_aout_osabi_sniffer);
 
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_FREEBSD_AOUT,
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_FREEBSD_AOUT,
 			  i386fbsdaout_init_abi);
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_FREEBSD_ELF,
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_FREEBSD_ELF,
 			  i386fbsd4_init_abi);
 }
Index: i386gnu-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386gnu-tdep.c,v
retrieving revision 1.1
diff -u -p -r1.1 i386gnu-tdep.c
--- i386gnu-tdep.c 15 Aug 2002 22:23:59 -0000 1.1
+++ i386gnu-tdep.c 14 Dec 2002 14:31:35 -0000
@@ -39,5 +39,5 @@ extern void _initialize_i386gnu_tdep (vo
 void
 _initialize_i386gnu_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_HURD, i386gnu_init_abi);
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_HURD, i386gnu_init_abi);
 }
Index: i386ly-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386ly-tdep.c,v
retrieving revision 1.5
diff -u -p -r1.5 i386ly-tdep.c
--- i386ly-tdep.c 16 Jun 2002 02:19:22 -0000 1.5
+++ i386ly-tdep.c 14 Dec 2002 14:31:35 -0000
@@ -70,11 +70,11 @@ i386lynx_coff_osabi_sniffer (bfd *abfd)
 void _initialize_i386lynx_tdep (void);
 
 void
-_initialize_i386bsd_tdep (void)
+_initialize_i386lynx_tdep (void)
 {
   gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
 				  i386lynx_coff_osabi_sniffer);
 
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_LYNXOS,
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_LYNXOS,
 			  i386lynx_init_abi);
 }
Index: i386nbsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386nbsd-tdep.c,v
retrieving revision 1.11
diff -u -p -r1.11 i386nbsd-tdep.c
--- i386nbsd-tdep.c 6 Sep 2002 20:44:22 -0000 1.11
+++ i386nbsd-tdep.c 14 Dec 2002 14:31:35 -0000
@@ -299,8 +299,8 @@ _initialize_i386nbsd_tdep (void)
   add_core_fns (&i386nbsd_core_fns);
   add_core_fns (&i386nbsd_elfcore_fns);
 
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_NETBSD_AOUT,
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_NETBSD_AOUT,
 			  i386nbsd_init_abi);
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_NETBSD_ELF,
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_NETBSD_ELF,
 			  i386nbsdelf_init_abi);
 }
Index: i386obsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386obsd-tdep.c,v
retrieving revision 1.1
diff -u -p -r1.1 i386obsd-tdep.c
--- i386obsd-tdep.c 20 Oct 2002 11:54:40 -0000 1.1
+++ i386obsd-tdep.c 14 Dec 2002 14:31:35 -0000
@@ -117,6 +117,6 @@ _initialize_i386obsd_tdep (void)
      expected.  */
 #define GDB_OSABI_OPENBSD_AOUT GDB_OSABI_NETBSD_AOUT
 
-  gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_OPENBSD_AOUT,
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_OPENBSD_AOUT,
 			  i386obsd_init_abi);
 }
Index: mips-irix-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mips-irix-tdep.c,v
retrieving revision 1.1
diff -u -p -r1.1 mips-irix-tdep.c
--- mips-irix-tdep.c 27 Jul 2002 01:28:43 -0000 1.1
+++ mips-irix-tdep.c 14 Dec 2002 14:31:35 -0000
@@ -90,6 +90,6 @@ _initialize_mips_irix_tdep (void)
 				  bfd_target_elf_flavour,
 				  mips_irix_elf_osabi_sniffer);
 
-  gdbarch_register_osabi (bfd_arch_mips, GDB_OSABI_IRIX,
+  gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_IRIX,
 			  mips_irix_init_abi);
 }
Index: mipsnbsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/mipsnbsd-tdep.c,v
retrieving revision 1.3
diff -u -p -r1.3 mipsnbsd-tdep.c
--- mipsnbsd-tdep.c 17 Sep 2002 23:26:01 -0000 1.3
+++ mipsnbsd-tdep.c 14 Dec 2002 14:31:35 -0000
@@ -359,7 +359,7 @@ mipsnbsd_init_abi (struct gdbarch_info i
 void
 _initialize_mipsnbsd_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_mips, GDB_OSABI_NETBSD_ELF,
+  gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_NETBSD_ELF,
 			  mipsnbsd_init_abi);
 
   add_core_fns (&mipsnbsd_core_fns);
Index: ns32knbsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/ns32knbsd-tdep.c,v
retrieving revision 1.2
diff -u -p -r1.2 ns32knbsd-tdep.c
--- ns32knbsd-tdep.c 27 Sep 2002 19:33:48 -0000 1.2
+++ ns32knbsd-tdep.c 14 Dec 2002 14:31:35 -0000
@@ -66,6 +66,6 @@ _initialize_ns32knbsd_tdep (void)
   gdbarch_register_osabi_sniffer (bfd_arch_ns32k, bfd_target_aout_flavour,
 				  ns32knbsd_aout_osabi_sniffer);
 
-  gdbarch_register_osabi (bfd_arch_ns32k, GDB_OSABI_NETBSD_AOUT,
+  gdbarch_register_osabi (bfd_arch_ns32k, 0, GDB_OSABI_NETBSD_AOUT,
 			  ns32knbsd_init_abi_aout);
 }
Index: osabi.c
===================================================================
RCS file: /cvs/src/src/gdb/osabi.c,v
retrieving revision 1.9
diff -u -p -r1.9 osabi.c
--- osabi.c 2 Dec 2002 23:26:29 -0000 1.9
+++ osabi.c 14 Dec 2002 14:31:35 -0000
@@ -19,7 +19,10 @@
    Boston, MA 02111-1307, USA.  */
 
 #include "defs.h"
+
+#include "gdb_assert.h"
 #include "gdb_string.h"
+
 #include "osabi.h"
 
 #include "elf-bfd.h"
@@ -70,7 +73,7 @@ gdbarch_osabi_name (enum gdb_osabi osabi
 struct gdb_osabi_handler  
 {
   struct gdb_osabi_handler *next;
-  enum bfd_architecture arch;
+  const struct bfd_arch_info *arch_info;
   enum gdb_osabi osabi;
   void (*init_osabi)(struct gdbarch_info, struct gdbarch *);
 };
@@ -78,11 +81,13 @@ struct gdb_osabi_handler  
 static struct gdb_osabi_handler *gdb_osabi_handler_list;
 
 void
-gdbarch_register_osabi (enum bfd_architecture arch, enum gdb_osabi osabi,
+gdbarch_register_osabi (enum bfd_architecture arch, unsigned long machine,
+			enum gdb_osabi osabi,
                         void (*init_osabi)(struct gdbarch_info,
 					   struct gdbarch *))
 {
   struct gdb_osabi_handler **handler_p;
+  const struct bfd_arch_info *arch_info = bfd_lookup_arch (arch, machine);
 
   /* Registering an OS ABI handler for "unknown" is not allowed.  */
   if (osabi == GDB_OSABI_UNKNOWN)
@@ -93,14 +98,16 @@ gdbarch_register_osabi (enum bfd_archite
          "OS ABI \"%s\" for architecture %s was made.  The handler will "
 	 "not be registered",
 	 gdbarch_osabi_name (osabi),
-	 bfd_printable_arch_mach (arch, 0));
+	 bfd_printable_arch_mach (arch, machine));
       return;
     }
 
+  gdb_assert (arch_info);
+
   for (handler_p = &gdb_osabi_handler_list; *handler_p != NULL;
        handler_p = &(*handler_p)->next)
     {
-      if ((*handler_p)->arch == arch
+      if ((*handler_p)->arch_info == arch_info
 	  && (*handler_p)->osabi == osabi)
 	{
 	  internal_error
@@ -108,7 +115,7 @@ gdbarch_register_osabi (enum bfd_archite
 	     "gdbarch_register_osabi: A handler for OS ABI \"%s\" "
 	     "has already been registered for architecture %s",
 	     gdbarch_osabi_name (osabi),
-	     bfd_printable_arch_mach (arch, 0));
+	     arch_info->printable_name);
 	  /* If user wants to continue, override previous definition.  */
 	  (*handler_p)->init_osabi = init_osabi;
 	  return;
@@ -118,7 +125,7 @@ gdbarch_register_osabi (enum bfd_archite
   (*handler_p)
     = (struct gdb_osabi_handler *) xmalloc (sizeof (struct gdb_osabi_handler));
   (*handler_p)->next = NULL;
-  (*handler_p)->arch = arch;
+  (*handler_p)->arch_info = arch_info;
   (*handler_p)->osabi = osabi;
   (*handler_p)->init_osabi = init_osabi;
 }
@@ -230,9 +237,9 @@ void
 gdbarch_init_osabi (struct gdbarch_info info, struct gdbarch *gdbarch,
                     enum gdb_osabi osabi)
 {
-  struct gdb_osabi_handler *handler;
-  bfd *abfd = info.abfd;
   const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (gdbarch);
+  const struct bfd_arch_info *compatible;
+  struct gdb_osabi_handler *handler;
 
   if (osabi == GDB_OSABI_UNKNOWN)
     {
@@ -244,8 +251,19 @@ gdbarch_init_osabi (struct gdbarch_info 
   for (handler = gdb_osabi_handler_list; handler != NULL;
        handler = handler->next)
     {
-      if (handler->arch == bfd_get_arch (abfd)
-	  && handler->osabi == osabi)
+      if (handler->osabi != osabi)
+	continue;
+
+      /* Check whether the machine type and architecture of the
+         handler are compatible with the desired machine type and
+         architecture.
+
+	 NOTE: kettenis/20021027: There may be more than one machine
+	 type that is compatible with the desired machine type.  Right
+	 now we simply return the first match, which is fine for now.
+	 However, we might want to do something smarter in the future.  */
+      compatible = arch_info->compatible (arch_info, handler->arch_info);
+      if (compatible == handler->arch_info)
 	{
 	  (*handler->init_osabi) (info, gdbarch);
 	  return;
Index: osabi.h
===================================================================
RCS file: /cvs/src/src/gdb/osabi.h,v
retrieving revision 1.6
diff -u -p -r1.6 osabi.h
--- osabi.h 2 Dec 2002 23:26:30 -0000 1.6
+++ osabi.h 14 Dec 2002 14:31:35 -0000
@@ -61,9 +61,11 @@ void gdbarch_register_osabi_sniffer (enu
 				     enum bfd_flavour,
 				     enum gdb_osabi (*)(bfd *));
 
-/* Register a handler for an OS ABI variant for a given architecture.  There
-   should be only one handler for a given OS ABI each architecture family.  */
-void gdbarch_register_osabi (enum bfd_architecture, enum gdb_osabi,
+/* Register a handler for an OS ABI variant for a given architecture
+   and machine type.  There should be only one handler for a given OS
+   ABI for each architecture and machine type combination.  */
+void gdbarch_register_osabi (enum bfd_architecture, unsigned long,
+			     enum gdb_osabi,
                              void (*)(struct gdbarch_info,
 				      struct gdbarch *));
 
Index: ppc-linux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/ppc-linux-tdep.c,v
retrieving revision 1.20
diff -u -p -r1.20 ppc-linux-tdep.c
--- ppc-linux-tdep.c 18 Nov 2002 22:19:29 -0000 1.20
+++ ppc-linux-tdep.c 14 Dec 2002 14:31:36 -0000
@@ -726,7 +726,7 @@ ppc_linux_init_abi (struct gdbarch_info 
 void
 _initialize_ppc_linux_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_powerpc, GDB_OSABI_LINUX,
+  gdbarch_register_osabi (bfd_arch_powerpc, 0, GDB_OSABI_LINUX,
 			  ppc_linux_init_abi);
   add_core_fns (&ppc_linux_regset_core_fns);
 }
Index: ppcnbsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/ppcnbsd-tdep.c,v
retrieving revision 1.4
diff -u -p -r1.4 ppcnbsd-tdep.c
--- ppcnbsd-tdep.c 31 Aug 2002 20:28:37 -0000 1.4
+++ ppcnbsd-tdep.c 14 Dec 2002 14:31:36 -0000
@@ -219,7 +219,7 @@ ppcnbsd_init_abi (struct gdbarch_info in
 void
 _initialize_ppcnbsd_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_powerpc, GDB_OSABI_NETBSD_ELF,
+  gdbarch_register_osabi (bfd_arch_powerpc, 0, GDB_OSABI_NETBSD_ELF,
 			  ppcnbsd_init_abi);
 
   add_core_fns (&ppcnbsd_core_fns);
Index: shnbsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/shnbsd-tdep.c,v
retrieving revision 1.7
diff -u -p -r1.7 shnbsd-tdep.c
--- shnbsd-tdep.c 31 Aug 2002 20:28:37 -0000 1.7
+++ shnbsd-tdep.c 14 Dec 2002 14:31:36 -0000
@@ -188,5 +188,6 @@ _initialize_shnbsd_tdep (void)
   add_core_fns (&shnbsd_core_fns);
   add_core_fns (&shnbsd_elfcore_fns);
 
-  gdbarch_register_osabi (bfd_arch_sh, GDB_OSABI_NETBSD_ELF, shnbsd_init_abi);
+  gdbarch_register_osabi (bfd_arch_sh, 0, GDB_OSABI_NETBSD_ELF,
+			  shnbsd_init_abi);
 }
Index: sparcnbsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sparcnbsd-tdep.c,v
retrieving revision 1.2
diff -u -p -r1.2 sparcnbsd-tdep.c
--- sparcnbsd-tdep.c 31 Aug 2002 20:28:37 -0000 1.2
+++ sparcnbsd-tdep.c 14 Dec 2002 14:31:36 -0000
@@ -523,9 +523,9 @@ _initialize_sparnbsd_tdep (void)
   gdbarch_register_osabi_sniffer (bfd_arch_sparc, bfd_target_aout_flavour,
 				  sparcnbsd_aout_osabi_sniffer);
 
-  gdbarch_register_osabi (bfd_arch_sparc, GDB_OSABI_NETBSD_AOUT,
+  gdbarch_register_osabi (bfd_arch_sparc, 0, GDB_OSABI_NETBSD_AOUT,
 			  sparcnbsd_init_abi_aout);
-  gdbarch_register_osabi (bfd_arch_sparc, GDB_OSABI_NETBSD_ELF,
+  gdbarch_register_osabi (bfd_arch_sparc, 0, GDB_OSABI_NETBSD_ELF,
 			  sparcnbsd_init_abi_elf);
 
   add_core_fns (&sparcnbsd_core_fns);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]