[PATCH] RS6000 and PowerPC CPU types (revised)

Nick Duffek nsd@redhat.com
Thu Jun 8 18:42:00 GMT 2000


I posted this revised patch for approval last month after some on-list
discussion.

Here it is again, with the addition of entries for the 7400 and EC603e
processors per Mike Meissner's request.

It does the following:

  (1) Adds a bunch of architectures to cpu-powerpc.c and cpu-rs6000.c.
      This should have no effect on current code, but it's useful for
      my GDB patches.

  (2) Changes the 620's bits_per_word field to 64 from 32.  I can't find
      anywhere that this matters, but it seems more correct.

  (3) Changes the default rs6000 machine number to 0 from 6000.  I can't
      find anywhere that this matters, but it seems more consistent with
      existing practice to have the default number be 0.

  (4) Refers to machine numbers using e.g. bfd_mach_ppc_620 instead of
      620.  This should have no effect on current code, but it's
      consistent with existing practice, and it means that I can refer to
      machines I added in (1) using e.g. bfd_mach_rs6k_rs1 instead of the
      more arbitrary 6001.

  (5) Fixes an XCOFF64 bug in coff_set_arch_mach_hook() where arch/machine
      were set to nonexistent combination bfd_arch_rs6000/620, which
      caused bfd_default_set_arch_mach() to settle on bfd_arch_unknown.

Okay to apply?

Nick Duffek
nsd@redhat.com

bfd/ChangeLog:

2000-06-08  Nicholas Duffek  <nsd@redhat.com>

	* archures.c (enum bfd_architecture): #define constants for
	PowerPc and RS6000 machine numbers.
	* bfd-in2.h: Regenerate.
	* coffcode.h (coff_set_arch_mach_hook): #ifdef XCOFF64, set arch
	to bfd_arch_powerpc instead of bfd_arch_rs6000.  Refer to PowerPc
	and RS6000 machine numbers using #defined constants from
	archures.c.
	* cpu-powerpc.c (arch_info_struct): Refer to PowerPc and RS6000
	machine numbers using #defined constants from archures.c.  Add
	entries for EC603e, 630, A35, RS64II, RS64III, 7400.  Specify
	64-bit words in 620 entry.
	* cpu-rs6000.c (arch_info_struct): Create with entries for RS1,
	RSC, and RS2.
	(bfd_rs6000_arch): Change default machine to 0 (bfd_mach_rs6k).

opcodes/ChangeLog:

2000-06-08  Nick Duffek  <nsd@redhat.com>

	* disassemble.c (disassembler): Refer to the PowerPC 620 using
	bfd_mach_ppc_620 instead of 620.

Index: bfd/archures.c
===================================================================
diff -u bfd/archures.c bfd/archures.c
--- bfd/archures.c	Thu Jun  8 14:55:57 2000
+++ bfd/archures.c	Thu Jun  8 13:07:41 2000
@@ -146,7 +146,28 @@
 .#define bfd_mach_h8300h  2
 .#define bfd_mach_h8300s  3
 .  bfd_arch_powerpc,   {* PowerPC *}
+.#define bfd_mach_ppc		0
+.#define bfd_mach_ppc_403	403
+.#define bfd_mach_ppc_403gc	4030
+.#define bfd_mach_ppc_505	505
+.#define bfd_mach_ppc_601	601
+.#define bfd_mach_ppc_602	602
+.#define bfd_mach_ppc_603	603
+.#define bfd_mach_ppc_ec603e	6031
+.#define bfd_mach_ppc_604	604
+.#define bfd_mach_ppc_620	620
+.#define bfd_mach_ppc_630	630
+.#define bfd_mach_ppc_750	750
+.#define bfd_mach_ppc_860	860
+.#define bfd_mach_ppc_a35	35
+.#define bfd_mach_ppc_rs64ii	642
+.#define bfd_mach_ppc_rs64iii	643
+.#define bfd_mach_ppc_7400	7400
 .  bfd_arch_rs6000,    {* IBM RS/6000 *}
+.#define bfd_mach_rs6k		0
+.#define bfd_mach_rs6k_rs1	6001
+.#define bfd_mach_rs6k_rsc	6003
+.#define bfd_mach_rs6k_rs2	6002
 .  bfd_arch_hppa,      {* HP PA RISC *}
 .  bfd_arch_d10v,      {* Mitsubishi D10V *}
 .#define bfd_mach_d10v		0
Index: bfd/bfd-in2.h
===================================================================
diff -u bfd/bfd-in2.h bfd/bfd-in2.h
--- bfd/bfd-in2.h	Thu Jun  8 14:55:58 2000
+++ bfd/bfd-in2.h	Thu Jun  8 13:07:41 2000
@@ -1385,7 +1385,28 @@
 #define bfd_mach_h8300h  2
 #define bfd_mach_h8300s  3
   bfd_arch_powerpc,    /* PowerPC */
+#define bfd_mach_ppc           0
+#define bfd_mach_ppc_403       403
+#define bfd_mach_ppc_403gc     4030
+#define bfd_mach_ppc_505       505
+#define bfd_mach_ppc_601       601
+#define bfd_mach_ppc_602       602
+#define bfd_mach_ppc_603       603
+#define bfd_mach_ppc_ec603e    6031
+#define bfd_mach_ppc_604       604
+#define bfd_mach_ppc_620       620
+#define bfd_mach_ppc_630       630
+#define bfd_mach_ppc_750       750
+#define bfd_mach_ppc_860       860
+#define bfd_mach_ppc_a35       35
+#define bfd_mach_ppc_rs64ii    642
+#define bfd_mach_ppc_rs64iii   643
+#define bfd_mach_ppc_7400      7400
   bfd_arch_rs6000,     /* IBM RS/6000 */
+#define bfd_mach_rs6k          0
+#define bfd_mach_rs6k_rs1      6001
+#define bfd_mach_rs6k_rsc      6003
+#define bfd_mach_rs6k_rs2      6002
   bfd_arch_hppa,       /* HP PA RISC */
   bfd_arch_d10v,       /* Mitsubishi D10V */
 #define bfd_mach_d10v          0
Index: bfd/coffcode.h
===================================================================
diff -u bfd/coffcode.h bfd/coffcode.h
--- bfd/coffcode.h	Thu Jun  8 14:56:00 2000
+++ bfd/coffcode.h	Thu Jun  8 13:07:40 2000
@@ -1966,32 +1966,33 @@
 	       (because that's how they were bootstrapped originally),
 	       but they are always PowerPC architecture.  */
 	    arch = bfd_arch_powerpc;
-	    machine = 0;
+	    machine = bfd_mach_ppc;
 #else
-	    arch = bfd_arch_rs6000;
 #ifdef XCOFF64
-	    machine = 620;
+	    arch = bfd_arch_powerpc;
+	    machine = bfd_mach_ppc_620;
 #else
-	    machine = 6000;
+	    arch = bfd_arch_rs6000;
+	    machine = bfd_mach_rs6k;
 #endif
 #endif /* POWERMAC */
 	    break;
 
 	  case 1:
 	    arch = bfd_arch_powerpc;
-	    machine = 601;
+	    machine = bfd_mach_ppc_601;
 	    break;
 	  case 2: /* 64 bit PowerPC */
 	    arch = bfd_arch_powerpc;
-	    machine = 620;
+	    machine = bfd_mach_ppc_620;
 	    break;
 	  case 3:
 	    arch = bfd_arch_powerpc;
-	    machine = 0;
+	    machine = bfd_mach_ppc;
 	    break;
 	  case 4:
 	    arch = bfd_arch_rs6000;
-	    machine = 6000;
+	    machine = bfd_mach_rs6k;
 	    break;
 	  }
       }
@@ -2698,7 +2699,8 @@
     case bfd_arch_powerpc:
 #endif
 #ifdef XCOFF64
-      if (bfd_get_mach (abfd) == 620 && !strncmp (abfd->xvec->name,"aix", 3))
+      if (bfd_get_mach (abfd) == bfd_mach_ppc_620
+	  && !strncmp (abfd->xvec->name,"aix", 3))
 	*magicp = U803XTOCMAGIC; 
       else
 #else
Index: bfd/cpu-powerpc.c
===================================================================
diff -u bfd/cpu-powerpc.c bfd/cpu-powerpc.c
--- bfd/cpu-powerpc.c	Thu Jun  8 14:56:00 2000
+++ bfd/cpu-powerpc.c	Thu Jun  8 13:07:41 2000
@@ -54,7 +54,7 @@
     32,	/* 32 bits in an address */
     8,	/* 8 bits in a byte */
     bfd_arch_powerpc,
-    603, /* for the mpc603 */
+    bfd_mach_ppc_603,
     "powerpc",
     "powerpc:603",
     3,
@@ -68,9 +68,9 @@
     32,	/* 32 bits in an address */
     8,	/* 8 bits in a byte */
     bfd_arch_powerpc,
-    604, /* for the mpc604 */
+    bfd_mach_ppc_ec603e,
     "powerpc",
-    "powerpc:604",
+    "powerpc:EC603e",
     3,
     false, /* not the default */
     powerpc_compatible, 
@@ -82,9 +82,9 @@
     32,	/* 32 bits in an address */
     8,	/* 8 bits in a byte */
     bfd_arch_powerpc,
-    403, /* for the 403 */
+    bfd_mach_ppc_604,
     "powerpc",
-    "powerpc:403",
+    "powerpc:604",
     3,
     false, /* not the default */
     powerpc_compatible, 
@@ -96,27 +96,111 @@
     32,	/* 32 bits in an address */
     8,	/* 8 bits in a byte */
     bfd_arch_powerpc,
-    601, /* for the mpc601 */
+    bfd_mach_ppc_403,
     "powerpc",
-    "powerpc:601",
+    "powerpc:403",
     3,
     false, /* not the default */
     powerpc_compatible, 
     bfd_default_scan,
     &arch_info_struct[4]
   },
-  { 
+  {
     32,	/* 32 bits in a word */
+    32,	/* 32 bits in an address */
+    8,	/* 8 bits in a byte */
+    bfd_arch_powerpc,
+    bfd_mach_ppc_601,
+    "powerpc",
+    "powerpc:601",
+    3,
+    false, /* not the default */
+    powerpc_compatible, 
+    bfd_default_scan,
+    &arch_info_struct[5]
+  },
+  { 
+    64,	/* 64 bits in a word */
     64,	/* 64 bits in an address */
     8,	/* 8 bits in a byte */
     bfd_arch_powerpc,
-    620, /* for the mpc620 */
+    bfd_mach_ppc_620,
     "powerpc",
     "powerpc:620",
     3,
     false, /* not the default */
     powerpc_compatible, 
     bfd_default_scan,
+    &arch_info_struct[6]
+  },
+  {
+    64,	/* 64 bits in a word */
+    64,	/* 64 bits in an address */
+    8,	/* 8 bits in a byte */
+    bfd_arch_powerpc,
+    bfd_mach_ppc_630,
+    "powerpc",
+    "powerpc:630",
+    3,
+    false, /* not the default */
+    powerpc_compatible,
+    bfd_default_scan,
+    &arch_info_struct[7]
+  },
+  {
+    64,	/* 64 bits in a word */
+    64,	/* 64 bits in an address */
+    8,	/* 8 bits in a byte */
+    bfd_arch_powerpc,
+    bfd_mach_ppc_a35,
+    "powerpc",
+    "powerpc:a35",
+    3,
+    false, /* not the default */
+    powerpc_compatible,
+    bfd_default_scan,
+    &arch_info_struct[8]
+  },
+  {
+    64,	/* 64 bits in a word */
+    64,	/* 64 bits in an address */
+    8,	/* 8 bits in a byte */
+    bfd_arch_powerpc,
+    bfd_mach_ppc_rs64ii,
+    "powerpc",
+    "powerpc:rs64ii",
+    3,
+    false, /* not the default */
+    powerpc_compatible,
+    bfd_default_scan,
+    &arch_info_struct[9]
+  },
+  {
+    64,	/* 64 bits in a word */
+    64,	/* 64 bits in an address */
+    8,	/* 8 bits in a byte */
+    bfd_arch_powerpc,
+    bfd_mach_ppc_rs64iii,
+    "powerpc",
+    "powerpc:rs64iii",
+    3,
+    false, /* not the default */
+    powerpc_compatible,
+    bfd_default_scan,
+    &arch_info_struct[10]
+  },
+  {
+    32,	/* 32 bits in a word */
+    32,	/* 32 bits in an address */
+    8,	/* 8 bits in a byte */
+    bfd_arch_powerpc,
+    bfd_mach_ppc_7400,
+    "powerpc",
+    "powerpc:7400",
+    3,
+    false, /* not the default */
+    powerpc_compatible,
+    bfd_default_scan,
     0
   }
 };
@@ -127,7 +211,7 @@
     32,	/* 32 bits in an address */
     8,	/* 8 bits in a byte */
     bfd_arch_powerpc,
-    0, /* for the POWER/PowerPC common architecture */
+    bfd_mach_ppc, /* for the POWER/PowerPC common architecture */
     "powerpc",
     "powerpc:common",
     3,
Index: bfd/cpu-rs6000.c
===================================================================
diff -u bfd/cpu-rs6000.c bfd/cpu-rs6000.c
--- bfd/cpu-rs6000.c	Thu Jun  8 14:56:01 2000
+++ bfd/cpu-rs6000.c	Thu Jun  8 13:07:41 2000
@@ -53,18 +53,64 @@
   /*NOTREACHED*/
 }
 
+static const bfd_arch_info_type arch_info_struct[] =
+{
+  {
+    32,	/* 32 bits in a word */
+    32,	/* 32 bits in an address */
+    8,	/* 8 bits in a byte */
+    bfd_arch_rs6000,
+    bfd_mach_rs6k_rs1,
+    "rs6000",
+    "rs6000:rs1",
+    3,
+    false, /* not the default */
+    rs6000_compatible,
+    bfd_default_scan,
+    &arch_info_struct[1]
+  },
+  {
+    32,	/* 32 bits in a word */
+    32,	/* 32 bits in an address */
+    8,	/* 8 bits in a byte */
+    bfd_arch_rs6000,
+    bfd_mach_rs6k_rsc,
+    "rs6000",
+    "rs6000:rsc",
+    3,
+    false, /* not the default */
+    rs6000_compatible,
+    bfd_default_scan,
+    &arch_info_struct[2]
+  },
+  {
+    32,	/* 32 bits in a word */
+    32,	/* 32 bits in an address */
+    8,	/* 8 bits in a byte */
+    bfd_arch_rs6000,
+    bfd_mach_rs6k_rs2,
+    "rs6000",
+    "rs6000:rs2",
+    3,
+    false, /* not the default */
+    rs6000_compatible,
+    bfd_default_scan,
+    0
+  }
+};
+
 const bfd_arch_info_type bfd_rs6000_arch =
   {
     32,	/* 32 bits in a word */
     32,	/* 32 bits in an address */
     8,	/* 8 bits in a byte */
     bfd_arch_rs6000,
-    6000,	/* only 1 machine */
+    bfd_mach_rs6k,	/* POWER common architecture */
     "rs6000",
     "rs6000:6000",
     3,
-    true, /* the one and only */
+    true, /* the default */
     rs6000_compatible,
     bfd_default_scan,
-    0,
+    &arch_info_struct[0]
   };
Index: opcodes/disassemble.c
===================================================================
diff -u opcodes/disassemble.c opcodes/disassemble.c
--- opcodes/disassemble.c	Thu Jun  8 14:56:02 2000
+++ opcodes/disassemble.c	Thu Jun  8 13:07:41 2000
@@ -217,7 +217,7 @@
 #endif
 #ifdef ARCH_rs6000
     case bfd_arch_rs6000:
-      if (bfd_get_mach (abfd) == 620)
+      if (bfd_get_mach (abfd) == bfd_mach_ppc_620)
 	disassemble = print_insn_big_powerpc;
       else
 	disassemble = print_insn_rs6000;


More information about the Binutils mailing list