]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* osabi.c: Include "gdb_assert.h" and "gdb_string.h".
authorMark Kettenis <kettenis@gnu.org>
Sat, 21 Dec 2002 19:58:07 +0000 (19:58 +0000)
committerMark Kettenis <kettenis@gnu.org>
Sat, 21 Dec 2002 19:58:07 +0000 (19:58 +0000)
(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.
* hppa-hpux-tdep.c (_initialize_hppa_hpux_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.
* mips-linux-tdep.c (_initialize_mips_linux_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.

28 files changed:
gdb/ChangeLog
gdb/alpha-linux-tdep.c
gdb/alpha-osf1-tdep.c
gdb/alphafbsd-tdep.c
gdb/alphanbsd-tdep.c
gdb/arm-linux-tdep.c
gdb/arm-tdep.c
gdb/armnbsd-tdep.c
gdb/hppa-hpux-tdep.c
gdb/i386-interix-tdep.c
gdb/i386-linux-tdep.c
gdb/i386-sol2-tdep.c
gdb/i386-tdep.c
gdb/i386bsd-tdep.c
gdb/i386gnu-tdep.c
gdb/i386ly-tdep.c
gdb/i386nbsd-tdep.c
gdb/i386obsd-tdep.c
gdb/mips-irix-tdep.c
gdb/mips-linux-tdep.c
gdb/mipsnbsd-tdep.c
gdb/ns32knbsd-tdep.c
gdb/osabi.c
gdb/osabi.h
gdb/ppc-linux-tdep.c
gdb/ppcnbsd-tdep.c
gdb/shnbsd-tdep.c
gdb/sparcnbsd-tdep.c

index c3ab1847a9208c11bc91523daa34aef5b8870de3..c7ab93c0457a13a2a2732537cff072714ebb761f 100644 (file)
@@ -1,3 +1,43 @@
+2002-12-14  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.
+       * hppa-hpux-tdep.c (_initialize_hppa_hpux_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.
+       * mips-linux-tdep.c (_initialize_mips_linux_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.
+
 2002-12-20  Kevin Buettner  <kevinb@redhat.com>
 
        * solib-svr4.c (elf_locate_base): Fix sizeof() related bug.  Add
index 4596d37e3279f64eba0b5a4d492e47c93ef59fc7..26f4db433f1738c77212fa296a92c69fa29db842 100644 (file)
@@ -116,6 +116,6 @@ alpha_linux_init_abi (struct gdbarch_info info,
 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 ece5e2694f24027694effe0422f6e03b6a8ea965..c170a37c6ea603b8b611196cc2fecc3d113bba79 100644 (file)
@@ -73,5 +73,6 @@ alpha_osf1_init_abi (struct gdbarch_info 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 f8f515d3cc8c8ae9e03c22f486311fa9173fe9a1..6af3b4df84f5893f54c19a16993360840744f7e4 100644 (file)
@@ -78,6 +78,6 @@ alphafbsd_init_abi (struct gdbarch_info 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 bc7b1a410dbf0b85b9913ca9d36618f56e7817c0..e09b945bd9714cf377b50ecf456e92042aeca586 100644 (file)
@@ -232,7 +232,7 @@ alphanbsd_init_abi (struct gdbarch_info 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 cb930b640688473e2560e04601c4b2eb2815d1a4..627ed8dda477cb02a1bbcfaa211d59710e9ffa24 100644 (file)
@@ -543,5 +543,6 @@ arm_linux_init_abi (struct gdbarch_info 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 6ec7b7ac28f4528f1534584194c3d98046f8f879..3543cc1f0cc4fd43c3f4c74e2bff618088f0adc2 100644 (file)
@@ -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 0e7ab5443653f5946cd251ece8622b8568b1ea03..80113f519c6d26329ee5c9e6895b857c90daff2c 100644 (file)
@@ -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 371cb00d5afd3861546897db7a0497bf7ed8775a..37e6ccb17b0cd609c247948dc309e72cf83e5848 100644 (file)
@@ -38,9 +38,8 @@ hppa_hpux_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 void
 _initialize_hppa_hpux_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_hppa, GDB_OSABI_HPUX_SOM,
+  gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_HPUX_SOM,
                           hppa_hpux_som_init_abi);
-  gdbarch_register_osabi (bfd_arch_hppa, GDB_OSABI_HPUX_ELF,
+  gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_HPUX_ELF,
                           hppa_hpux_elf_init_abi);
 }
-
index 62bc49637e67027c28d4f2b1e7a3907c380ae09c..f8252e21e6696cb169ec506a0c177ee72d2e95ae 100644 (file)
@@ -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 f35c4ff9f874f02ecb18248fe9aac9692819451f..1ef14fcb90037f7a8ac371b8573bf893a45d5da2 100644 (file)
@@ -482,6 +482,6 @@ extern void _initialize_i386_linux_tdep (void);
 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 c72a7ed1df8aa8c207a17b9aa8e683e6bd70c1bc..792923cd44e579a542a9e0c41fd47c243171d2ad 100644 (file)
@@ -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 501c15a96f2e461bcdb36ee71754d223913c32e2..9d508795e8b9c051f2f650dee5d12009c41c2202 100644 (file)
@@ -1715,11 +1715,11 @@ are \"default\", \"pcc\" and \"reg\", and the default value is \"default\".",
   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 a76012368cec1708bcaa0daccdffd7f478a01769..77a4eecd90649a8ffef68813b77ed83133b2527f 100644 (file)
@@ -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 fa56428ec55aef8accd3cc23e100948c1ba8bf68..143ddc0242002ee56fbeed410c47a01f26af944c 100644 (file)
@@ -39,5 +39,5 @@ extern void _initialize_i386gnu_tdep (void);
 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 69c37501d5954c9f14d55678756aac2a16d8fd51..22bab3a76e9886840dfe7e8edefe6bfd2fc964d3 100644 (file)
@@ -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 4558a35d2c815f85777123f981fa79f6fcf31bf4..69283f8e5f884dddca348dfde36af8dede0ffd56 100644 (file)
@@ -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 7f162379a54c0c9b2029b9abc01277e3d2a59081..8bbce84fb29f0f4fefabf96873eb62e7bd004cb3 100644 (file)
@@ -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 73183ca9e3bc3c5dd3a18a3e2d0784b346bc6a27..d5ff31efb2d85fe353fe4b1669305cfd06c69786 100644 (file)
@@ -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 3a40670d712609451653ad58e8b04137f59618a2..e5aecfffdace0094b15f69008c729a42cea14a83 100644 (file)
@@ -358,7 +358,7 @@ mips_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 void
 _initialize_mips_linux_tdep (void)
 {
-  gdbarch_register_osabi (bfd_arch_mips, GDB_OSABI_LINUX,
+  gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_LINUX,
                          mips_linux_init_abi);
   add_core_fns (&regset_core_fns);
 }
index 73ba3847ba4aa625504eba536f3118cac6ac1879..7776d465ad1cdaad41ae4e90ca941ef8ecc4f0aa 100644 (file)
@@ -359,7 +359,7 @@ mipsnbsd_init_abi (struct gdbarch_info info,
 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 d5ec8282453eb14ee7ff801d0d45241d28eb9cd1..ad360c8ee6b1e2bef0c0d3e8fca22cb6566132d5 100644 (file)
@@ -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 06d9c908bcbc84ee527d7098fc5a83305d035eeb..47d08a2ebce3e5ee192320f14c3157181d92cbb6 100644 (file)
    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_architecture arch, enum gdb_osabi osabi,
          "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_architecture arch, enum gdb_osabi osabi,
             "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_architecture arch, enum gdb_osabi osabi,
   (*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 info, struct gdbarch *gdbarch,
   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 ad2bea109f7cb33c4e10e5bb1adea425ba1dc7d9..ebff83195bff5fbbce871a5483b815dc26a04b2c 100644 (file)
@@ -61,9 +61,11 @@ void gdbarch_register_osabi_sniffer (enum bfd_architecture,
                                     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 de687029fa6c69a81e8cfd52dabf293500955b86..0f6699e5be9083a2ac9db69d5eb7fe40dac5d0f1 100644 (file)
@@ -726,7 +726,7 @@ ppc_linux_init_abi (struct gdbarch_info 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 3d052a83ff2b67a798a5ac4d53fdfc4419c9df4e..e58bb6a3c5f2a2a9b5014e94b1f4f3bac1233a07 100644 (file)
@@ -219,7 +219,7 @@ ppcnbsd_init_abi (struct gdbarch_info info,
 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 b67884d2cea9ea19a9e5720f4234bd18f455ade2..d2f042a16a7801d94299f9f7489c7f502b440820 100644 (file)
@@ -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 1103eaa62c120e9ede1557b66f50c2691720ee5d..ab984ff88ad437af2f0e3e379e703a63b5f4d517 100644 (file)
@@ -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);