[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