diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2006-11-22 18:46:42 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-12-04 04:40:27 -0500 |
commit | 4c4c8723684b1b2cd0dfdf5e0685f35642bde253 (patch) | |
tree | 0382ef4108380469d5cbf0b525ef3d3b8abc6753 | |
parent | 24a24c85d3c35790a355138d7cd34c074cb1b3ac (diff) |
[POWERPC] Prepare for spu disassembly in xmon
In order to do disassembly of spu binaries in xmon, we need to abstract
the disassembly function from ppc_inst_dump.
We do this by making the actual disassembly function a function pointer
that we pass to ppc_inst_dump(). To save updating all the callers, we
turn ppc_inst_dump() into generic_inst_dump() and make ppc_inst_dump()
a wrapper which always uses print_insn_powerpc().
Currently we pass the dialect into print_insn_powerpc(), but we always
pass 0 - so just make it a local.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
-rw-r--r-- | arch/powerpc/xmon/ppc-dis.c | 6 | ||||
-rw-r--r-- | arch/powerpc/xmon/xmon.c | 15 |
2 files changed, 15 insertions, 6 deletions
diff --git a/arch/powerpc/xmon/ppc-dis.c b/arch/powerpc/xmon/ppc-dis.c index ac0a9d2427e0..3b67bee4830b 100644 --- a/arch/powerpc/xmon/ppc-dis.c +++ b/arch/powerpc/xmon/ppc-dis.c | |||
@@ -27,14 +27,14 @@ extern void print_address (unsigned long memaddr); | |||
27 | /* Print a PowerPC or POWER instruction. */ | 27 | /* Print a PowerPC or POWER instruction. */ |
28 | 28 | ||
29 | int | 29 | int |
30 | print_insn_powerpc (unsigned long insn, unsigned long memaddr, int dialect) | 30 | print_insn_powerpc (unsigned long insn, unsigned long memaddr) |
31 | { | 31 | { |
32 | const struct powerpc_opcode *opcode; | 32 | const struct powerpc_opcode *opcode; |
33 | const struct powerpc_opcode *opcode_end; | 33 | const struct powerpc_opcode *opcode_end; |
34 | unsigned long op; | 34 | unsigned long op; |
35 | int dialect; | ||
35 | 36 | ||
36 | if (dialect == 0) | 37 | dialect = PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_COMMON |
37 | dialect = PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_COMMON | ||
38 | | PPC_OPCODE_64 | PPC_OPCODE_POWER4 | PPC_OPCODE_ALTIVEC; | 38 | | PPC_OPCODE_64 | PPC_OPCODE_POWER4 | PPC_OPCODE_ALTIVEC; |
39 | 39 | ||
40 | /* Get the major opcode of the instruction. */ | 40 | /* Get the major opcode of the instruction. */ |
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c index be2c12d68785..a39b17638b7b 100644 --- a/arch/powerpc/xmon/xmon.c +++ b/arch/powerpc/xmon/xmon.c | |||
@@ -154,7 +154,7 @@ static int do_spu_cmd(void); | |||
154 | 154 | ||
155 | int xmon_no_auto_backtrace; | 155 | int xmon_no_auto_backtrace; |
156 | 156 | ||
157 | extern int print_insn_powerpc(unsigned long, unsigned long, int); | 157 | extern int print_insn_powerpc(unsigned long insn, unsigned long memaddr); |
158 | 158 | ||
159 | extern void xmon_enter(void); | 159 | extern void xmon_enter(void); |
160 | extern void xmon_leave(void); | 160 | extern void xmon_leave(void); |
@@ -2068,8 +2068,11 @@ prdump(unsigned long adrs, long ndump) | |||
2068 | } | 2068 | } |
2069 | } | 2069 | } |
2070 | 2070 | ||
2071 | typedef int (*instruction_dump_func)(unsigned long inst, unsigned long addr); | ||
2072 | |||
2071 | int | 2073 | int |
2072 | ppc_inst_dump(unsigned long adr, long count, int praddr) | 2074 | generic_inst_dump(unsigned long adr, long count, int praddr, |
2075 | instruction_dump_func dump_func) | ||
2073 | { | 2076 | { |
2074 | int nr, dotted; | 2077 | int nr, dotted; |
2075 | unsigned long first_adr; | 2078 | unsigned long first_adr; |
@@ -2099,12 +2102,18 @@ ppc_inst_dump(unsigned long adr, long count, int praddr) | |||
2099 | if (praddr) | 2102 | if (praddr) |
2100 | printf(REG" %.8x", adr, inst); | 2103 | printf(REG" %.8x", adr, inst); |
2101 | printf("\t"); | 2104 | printf("\t"); |
2102 | print_insn_powerpc(inst, adr, 0); /* always returns 4 */ | 2105 | dump_func(inst, adr); |
2103 | printf("\n"); | 2106 | printf("\n"); |
2104 | } | 2107 | } |
2105 | return adr - first_adr; | 2108 | return adr - first_adr; |
2106 | } | 2109 | } |
2107 | 2110 | ||
2111 | int | ||
2112 | ppc_inst_dump(unsigned long adr, long count, int praddr) | ||
2113 | { | ||
2114 | return generic_inst_dump(adr, count, praddr, print_insn_powerpc); | ||
2115 | } | ||
2116 | |||
2108 | void | 2117 | void |
2109 | print_address(unsigned long addr) | 2118 | print_address(unsigned long addr) |
2110 | { | 2119 | { |