Skip to content

Commit

Permalink
[POWERPC] Prepare for spu disassembly in xmon
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Michael Ellerman authored and Paul Mackerras committed Dec 4, 2006
1 parent 24a24c8 commit 4c4c872
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
6 changes: 3 additions & 3 deletions arch/powerpc/xmon/ppc-dis.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ extern void print_address (unsigned long memaddr);
/* Print a PowerPC or POWER instruction. */

int
print_insn_powerpc (unsigned long insn, unsigned long memaddr, int dialect)
print_insn_powerpc (unsigned long insn, unsigned long memaddr)
{
const struct powerpc_opcode *opcode;
const struct powerpc_opcode *opcode_end;
unsigned long op;
int dialect;

if (dialect == 0)
dialect = PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_COMMON
dialect = PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_COMMON
| PPC_OPCODE_64 | PPC_OPCODE_POWER4 | PPC_OPCODE_ALTIVEC;

/* Get the major opcode of the instruction. */
Expand Down
15 changes: 12 additions & 3 deletions arch/powerpc/xmon/xmon.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ static int do_spu_cmd(void);

int xmon_no_auto_backtrace;

extern int print_insn_powerpc(unsigned long, unsigned long, int);
extern int print_insn_powerpc(unsigned long insn, unsigned long memaddr);

extern void xmon_enter(void);
extern void xmon_leave(void);
Expand Down Expand Up @@ -2068,8 +2068,11 @@ prdump(unsigned long adrs, long ndump)
}
}

typedef int (*instruction_dump_func)(unsigned long inst, unsigned long addr);

int
ppc_inst_dump(unsigned long adr, long count, int praddr)
generic_inst_dump(unsigned long adr, long count, int praddr,
instruction_dump_func dump_func)
{
int nr, dotted;
unsigned long first_adr;
Expand Down Expand Up @@ -2099,12 +2102,18 @@ ppc_inst_dump(unsigned long adr, long count, int praddr)
if (praddr)
printf(REG" %.8x", adr, inst);
printf("\t");
print_insn_powerpc(inst, adr, 0); /* always returns 4 */
dump_func(inst, adr);
printf("\n");
}
return adr - first_adr;
}

int
ppc_inst_dump(unsigned long adr, long count, int praddr)
{
return generic_inst_dump(adr, count, praddr, print_insn_powerpc);
}

void
print_address(unsigned long addr)
{
Expand Down

0 comments on commit 4c4c872

Please sign in to comment.