* Makefile.am (libbfd.h): Add "Extracted from.." comment.
[deliverable/binutils-gdb.git] / bfd / archures.c
index d5600c0e40980e68f7921583403f721da4b5950d..36fc56873d5233a7b48dd77ce398fe38e00f122b 100644 (file)
@@ -1,6 +1,6 @@
 /* BFD library support routines for architectures.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001
+   2000, 2001, 2002
    Free Software Foundation, Inc.
    Hacked by John Gilmore and Steve Chamberlain of Cygnus Support.
 
@@ -103,6 +103,8 @@ DESCRIPTION
 .#define bfd_mach_i960_jx       7
 .#define bfd_mach_i960_hx        8
 .
+.  bfd_arch_or32,      {* OpenRISC 32 *}
+.
 .  bfd_arch_a29k,      {* AMD 29000 *}
 .  bfd_arch_sparc,     {* SPARC *}
 .#define bfd_mach_sparc                        1
@@ -163,6 +165,7 @@ DESCRIPTION
 .  bfd_arch_pdp11,     {* DEC PDP-11 *}
 .  bfd_arch_powerpc,   {* PowerPC *}
 .#define bfd_mach_ppc          0
+.#define bfd_mach_ppc64                1
 .#define bfd_mach_ppc_403      403
 .#define bfd_mach_ppc_403gc    4030
 .#define bfd_mach_ppc_505      505
@@ -190,6 +193,7 @@ DESCRIPTION
 .#define bfd_mach_d10v_ts2     2
 .#define bfd_mach_d10v_ts3     3
 .  bfd_arch_d30v,      {* Mitsubishi D30V *}
+.  bfd_arch_dlx,       {* DLX *}
 .  bfd_arch_m68hc11,   {* Motorola 68HC11 *}
 .  bfd_arch_m68hc12,   {* Motorola 68HC12 *}
 .  bfd_arch_z8k,       {* Zilog Z8000 *}
@@ -204,6 +208,7 @@ DESCRIPTION
 .#define bfd_mach_sh3_dsp    0x3d
 .#define bfd_mach_sh3e       0x3e
 .#define bfd_mach_sh4        0x40
+.#define bfd_mach_sh5        0x50
 .  bfd_arch_alpha,     {* Dec Alpha *}
 .#define bfd_mach_alpha_ev4  0x10
 .#define bfd_mach_alpha_ev5  0x20
@@ -255,8 +260,8 @@ DESCRIPTION
 .#define bfd_mach_avr5         5
 .  bfd_arch_cris,      {* Axis CRIS *}
 .  bfd_arch_s390,      {* IBM s390 *}
-.#define bfd_mach_s390_esa      0
-.#define bfd_mach_s390_esame    1
+.#define bfd_mach_s390_31       0
+.#define bfd_mach_s390_64       1
 .  bfd_arch_openrisc,  {* OpenRISC *}
 .  bfd_arch_mmix,      {* Donald Knuth's educational processor.  *}
 .  bfd_arch_xstormy16,
@@ -284,7 +289,9 @@ DESCRIPTION
 .  const char *arch_name;
 .  const char *printable_name;
 .  unsigned int section_align_power;
-.  {* True if this is the default machine for the architecture.  *}
+.  {* True if this is the default machine for the architecture.
+.     The default arch should be the first entry for an arch so that
+.     all the entries for that arch can be accessed via <<next>>.  *}
 .  boolean the_default;
 .  const struct bfd_arch_info * (*compatible)
 .      PARAMS ((const struct bfd_arch_info *a,
@@ -293,16 +300,21 @@ DESCRIPTION
 .  boolean (*scan) PARAMS ((const struct bfd_arch_info *, const char *));
 .
 .  const struct bfd_arch_info *next;
-.} bfd_arch_info_type;
+.}
+.bfd_arch_info_type;
+.
 */
 
 extern const bfd_arch_info_type bfd_a29k_arch;
 extern const bfd_arch_info_type bfd_alpha_arch;
 extern const bfd_arch_info_type bfd_arc_arch;
 extern const bfd_arch_info_type bfd_arm_arch;
+extern const bfd_arch_info_type bfd_avr_arch;
 extern const bfd_arch_info_type bfd_cris_arch;
 extern const bfd_arch_info_type bfd_d10v_arch;
 extern const bfd_arch_info_type bfd_d30v_arch;
+extern const bfd_arch_info_type bfd_dlx_arch;
+extern const bfd_arch_info_type bfd_fr30_arch;
 extern const bfd_arch_info_type bfd_h8300_arch;
 extern const bfd_arch_info_type bfd_h8500_arch;
 extern const bfd_arch_info_type bfd_hppa_arch;
@@ -310,86 +322,89 @@ extern const bfd_arch_info_type bfd_i370_arch;
 extern const bfd_arch_info_type bfd_i386_arch;
 extern const bfd_arch_info_type bfd_i860_arch;
 extern const bfd_arch_info_type bfd_i960_arch;
+extern const bfd_arch_info_type bfd_ia64_arch;
 extern const bfd_arch_info_type bfd_m32r_arch;
 extern const bfd_arch_info_type bfd_m68hc11_arch;
 extern const bfd_arch_info_type bfd_m68hc12_arch;
 extern const bfd_arch_info_type bfd_m68k_arch;
 extern const bfd_arch_info_type bfd_m88k_arch;
+extern const bfd_arch_info_type bfd_mcore_arch;
 extern const bfd_arch_info_type bfd_mips_arch;
+extern const bfd_arch_info_type bfd_mmix_arch;
 extern const bfd_arch_info_type bfd_mn10200_arch;
 extern const bfd_arch_info_type bfd_mn10300_arch;
+extern const bfd_arch_info_type bfd_ns32k_arch;
+extern const bfd_arch_info_type bfd_openrisc_arch;
+extern const bfd_arch_info_type bfd_or32_arch;
 extern const bfd_arch_info_type bfd_pdp11_arch;
-extern const bfd_arch_info_type bfd_powerpc_arch;
-extern const bfd_arch_info_type bfd_rs6000_arch;
 extern const bfd_arch_info_type bfd_pj_arch;
+extern const bfd_arch_info_type bfd_powerpc_archs[];
+#define bfd_powerpc_arch bfd_powerpc_archs[0]
+extern const bfd_arch_info_type bfd_rs6000_arch;
+extern const bfd_arch_info_type bfd_s390_arch;
 extern const bfd_arch_info_type bfd_sh_arch;
 extern const bfd_arch_info_type bfd_sparc_arch;
 extern const bfd_arch_info_type bfd_tic30_arch;
 extern const bfd_arch_info_type bfd_tic54x_arch;
 extern const bfd_arch_info_type bfd_tic80_arch;
+extern const bfd_arch_info_type bfd_v850_arch;
 extern const bfd_arch_info_type bfd_vax_arch;
 extern const bfd_arch_info_type bfd_we32k_arch;
-extern const bfd_arch_info_type bfd_z8k_arch;
-extern const bfd_arch_info_type bfd_ns32k_arch;
 extern const bfd_arch_info_type bfd_w65_arch;
-extern const bfd_arch_info_type bfd_v850_arch;
-extern const bfd_arch_info_type bfd_fr30_arch;
-extern const bfd_arch_info_type bfd_mcore_arch;
-extern const bfd_arch_info_type bfd_avr_arch;
-extern const bfd_arch_info_type bfd_ia64_arch;
-extern const bfd_arch_info_type bfd_s390_arch;
-extern const bfd_arch_info_type bfd_openrisc_arch;
-extern const bfd_arch_info_type bfd_mmix_arch;
 extern const bfd_arch_info_type bfd_xstormy16_arch;
+extern const bfd_arch_info_type bfd_z8k_arch;
 
-static const bfd_arch_info_type * const bfd_archures_list[] = {
+static const bfd_arch_info_type * const bfd_archures_list[] =
+  {
 #ifdef SELECT_ARCHITECTURES
-  SELECT_ARCHITECTURES,
+    SELECT_ARCHITECTURES,
 #else
-  &bfd_a29k_arch,
-  &bfd_alpha_arch,
-  &bfd_arc_arch,
-  &bfd_arm_arch,
-  &bfd_cris_arch,
-  &bfd_d10v_arch,
-  &bfd_d30v_arch,
-  &bfd_h8300_arch,
-  &bfd_h8500_arch,
-  &bfd_hppa_arch,
-  &bfd_i370_arch,
-  &bfd_i386_arch,
-  &bfd_i860_arch,
-  &bfd_i960_arch,
-  &bfd_m32r_arch,
-  &bfd_m68hc11_arch,
-  &bfd_m68hc12_arch,
-  &bfd_m68k_arch,
-  &bfd_m88k_arch,
-  &bfd_mips_arch,
-  &bfd_mn10200_arch,
-  &bfd_mn10300_arch,
-  &bfd_pdp11_arch,
-  &bfd_powerpc_arch,
-  &bfd_rs6000_arch,
-  &bfd_sh_arch,
-  &bfd_sparc_arch,
-  &bfd_tic30_arch,
-  &bfd_tic54x_arch,
-  &bfd_tic80_arch,
-  &bfd_vax_arch,
-  &bfd_we32k_arch,
-  &bfd_z8k_arch,
-  &bfd_ns32k_arch,
-  &bfd_w65_arch,
-  &bfd_v850_arch,
-  &bfd_fr30_arch,
-  &bfd_mcore_arch,
-  &bfd_avr_arch,
-  &bfd_ia64_arch,
-  &bfd_s390_arch,
-  &bfd_openrisc_arch,
-  &bfd_mmix_arch,
-  &bfd_xstormy16_arch,
+    &bfd_a29k_arch,
+    &bfd_alpha_arch,
+    &bfd_arc_arch,
+    &bfd_arm_arch,
+    &bfd_avr_arch,
+    &bfd_cris_arch,
+    &bfd_d10v_arch,
+    &bfd_d30v_arch,
+    &bfd_dlx_arch,
+    &bfd_fr30_arch,
+    &bfd_h8300_arch,
+    &bfd_h8500_arch,
+    &bfd_hppa_arch,
+    &bfd_i370_arch,
+    &bfd_i386_arch,
+    &bfd_i860_arch,
+    &bfd_i960_arch,
+    &bfd_ia64_arch,
+    &bfd_m32r_arch,
+    &bfd_m68hc11_arch,
+    &bfd_m68hc12_arch,
+    &bfd_m68k_arch,
+    &bfd_m88k_arch,
+    &bfd_mcore_arch,
+    &bfd_mips_arch,
+    &bfd_mmix_arch,
+    &bfd_mn10200_arch,
+    &bfd_mn10300_arch,
+    &bfd_ns32k_arch,
+    &bfd_openrisc_arch,
+    &bfd_or32_arch,
+    &bfd_pdp11_arch,
+    &bfd_powerpc_arch,
+    &bfd_rs6000_arch,
+    &bfd_s390_arch,
+    &bfd_sh_arch,
+    &bfd_sparc_arch,
+    &bfd_tic30_arch,
+    &bfd_tic54x_arch,
+    &bfd_tic80_arch,
+    &bfd_v850_arch,
+    &bfd_vax_arch,
+    &bfd_w65_arch,
+    &bfd_we32k_arch,
+    &bfd_xstormy16_arch,
+    &bfd_z8k_arch,
 #endif
   0
 };
@@ -594,21 +609,9 @@ bfd_default_set_arch_mach (abfd, arch, mach)
      enum bfd_architecture arch;
      unsigned long mach;
 {
-  const bfd_arch_info_type * const *app, *ap;
-
-  for (app = bfd_archures_list; *app != NULL; app++)
-    {
-      for (ap = *app; ap != NULL; ap = ap->next)
-       {
-         if (ap->arch == arch
-             && (ap->mach == mach
-                 || (mach == 0 && ap->the_default)))
-           {
-             abfd->arch_info = ap;
-             return true;
-           }
-       }
-    }
+  abfd->arch_info = bfd_lookup_arch (arch, mach);
+  if (abfd->arch_info != NULL)
+    return true;
 
   abfd->arch_info = &bfd_default_arch_struct;
   bfd_set_error (bfd_error_bad_value);
@@ -712,6 +715,9 @@ bfd_default_compatible (a, b)
   if (a->arch != b->arch)
     return NULL;
 
+  if (a->bits_per_word != b->bits_per_word)
+    return NULL;
+
   if (a->mach > b->mach)
     return a;
 
This page took 0.02669 seconds and 4 git commands to generate.