This is the mail archive of the
binutils@sourceware.cygnus.com
mailing list for the binutils project.
[PATCH] RS6000 and PowerPC CPU types (revised)
- To: binutils at sourceware dot cygnus dot com
- Subject: [PATCH] RS6000 and PowerPC CPU types (revised)
- From: Nick Duffek <nsd at redhat dot com>
- Date: Thu, 8 Jun 2000 21:46:27 -0400
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;