[PATCH] RS6000 and PowerPC CPU types

Nick Duffek nsd@cygnus.com
Sun May 14 11:29:00 GMT 2000


On 12-May-2000, Geoff Keating wrote:

>It is only worthwhile if it doesn't cause problems.  The reason
>XCOFF64 chooses a 620 is that the 620 is a 64-bit PowerPC cpu.

Okay.  Here is an alternative patch that I think will have no ill
effects.  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 changes.

  (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

bfd/ChangeLog:

2000-05-14  Nicholas Duffek  <nsd@cygnus.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 630, A35, RS64II, RS64III.  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-05-14  Nick Duffek  <nsd@cygnus.com>

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

Index: bfd/archures.c
===================================================================
RCS file: /cvs/src/src/bfd/archures.c,v
retrieving revision 1.13
diff -u -r1.13 archures.c
--- bfd/archures.c	2000/04/21 20:22:21	1.13
+++ bfd/archures.c	2000/05/14 18:24:30
@@ -146,7 +146,26 @@
 .#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_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
 .  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
===================================================================
RCS file: /cvs/src/src/bfd/bfd-in2.h,v
retrieving revision 1.45
diff -u -r1.45 bfd-in2.h
--- bfd/bfd-in2.h	2000/05/05 18:12:53	1.45
+++ bfd/bfd-in2.h	2000/05/14 18:24:36
@@ -1382,7 +1382,26 @@
 #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_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
   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
===================================================================
RCS file: /cvs/src/src/bfd/coffcode.h,v
retrieving revision 1.41
diff -u -r1.41 coffcode.h
--- bfd/coffcode.h	2000/05/06 01:41:50	1.41
+++ bfd/coffcode.h	2000/05/14 18:24:41
@@ -1961,32 +1961,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;
 	  }
       }
@@ -2693,7 +2694,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
===================================================================
RCS file: /cvs/src/src/bfd/cpu-powerpc.c,v
retrieving revision 1.2
diff -u -r1.2 cpu-powerpc.c
--- bfd/cpu-powerpc.c	2000/04/26 15:09:43	1.2
+++ bfd/cpu-powerpc.c	2000/05/14 18:24:42
@@ -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,7 +68,7 @@
     32,	/* 32 bits in an address */
     8,	/* 8 bits in a byte */
     bfd_arch_powerpc,
-    604, /* for the mpc604 */
+    bfd_mach_ppc_604,
     "powerpc",
     "powerpc:604",
     3,
@@ -82,7 +82,7 @@
     32,	/* 32 bits in an address */
     8,	/* 8 bits in a byte */
     bfd_arch_powerpc,
-    403, /* for the 403 */
+    bfd_mach_ppc_403,
     "powerpc",
     "powerpc:403",
     3,
@@ -96,7 +96,7 @@
     32,	/* 32 bits in an address */
     8,	/* 8 bits in a byte */
     bfd_arch_powerpc,
-    601, /* for the mpc601 */
+    bfd_mach_ppc_601,
     "powerpc",
     "powerpc:601",
     3,
@@ -106,17 +106,73 @@
     &arch_info_struct[4]
   },
   { 
-    32,	/* 32 bits in a word */
+    64,	/* 32 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[5]
+  },
+  {
+    64,	/* 32 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[6]
+  },
+  {
+    64,	/* 32 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[7]
+  },
+  {
+    64,	/* 32 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[8]
+  },
+  {
+    64,	/* 32 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,
     0
   }
 };
@@ -127,7 +183,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
===================================================================
RCS file: /cvs/src/src/bfd/cpu-rs6000.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 cpu-rs6000.c
--- bfd/cpu-rs6000.c	1999/05/03 07:28:55	1.1.1.1
+++ bfd/cpu-rs6000.c	2000/05/14 18:24:42
@@ -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
===================================================================
RCS file: /cvs/src/src/opcodes/disassemble.c,v
retrieving revision 1.11
diff -u -r1.11 disassemble.c
--- opcodes/disassemble.c	2000/04/26 15:09:44	1.11
+++ opcodes/disassemble.c	2000/05/14 18:24:42
@@ -216,7 +216,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