Commit e0426047 authored by Michael Ellerman's avatar Michael Ellerman Committed by Paul Mackerras

[POWERPC] Make xmon disassembly optional

While adding spu disassembly support it struck me that we're actually
carrying quite a lot of code around, just to do disassembly in the case
of a crash.

While on large systems it's not an issue, on smaller ones it might be
nice to have xmon - but without the weight of the disassembly support.
For a Cell build this saves ~230KB (!), and for pSeries ~195KB.

We still support the 'di' and 'sdi' commands, however they just dump
the instruction in hex.

Move the definitions into a header to clean xmon.c just a tiny bit.
Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
Signed-off-by: default avatarArnd Bergmann <arnd.bergmann@de.ibm.com>
parent af89fb80
...@@ -98,6 +98,15 @@ config XMON_DEFAULT ...@@ -98,6 +98,15 @@ config XMON_DEFAULT
xmon is normally disabled unless booted with 'xmon=on'. xmon is normally disabled unless booted with 'xmon=on'.
Use 'xmon=off' to disable xmon init during runtime. Use 'xmon=off' to disable xmon init during runtime.
config XMON_DISASSEMBLY
bool "Include disassembly support in xmon"
depends on XMON
default y
help
Include support for disassembling in xmon. You probably want
to say Y here, unless you're building for a memory-constrained
system.
config IRQSTACKS config IRQSTACKS
bool "Use separate kernel stacks when processing interrupts" bool "Use separate kernel stacks when processing interrupts"
depends on PPC64 depends on PPC64
......
...@@ -3,6 +3,10 @@ ...@@ -3,6 +3,10 @@
ifdef CONFIG_PPC64 ifdef CONFIG_PPC64
EXTRA_CFLAGS += -mno-minimal-toc EXTRA_CFLAGS += -mno-minimal-toc
endif endif
obj-y += xmon.o ppc-dis.o ppc-opc.o setjmp.o start.o \
nonstdio.o obj-y += xmon.o setjmp.o start.o nonstdio.o
ifdef CONFIG_XMON_DISASSEMBLY
obj-y += ppc-dis.o ppc-opc.o
obj-$(CONFIG_PPC_CELL) += spu-dis.o spu-opc.o obj-$(CONFIG_PPC_CELL) += spu-dis.o spu-opc.o
endif
#ifndef _POWERPC_XMON_DIS_ASM_H
#define _POWERPC_XMON_DIS_ASM_H
/*
* Copyright (C) 2006 Michael Ellerman, IBM Corporation.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
extern void print_address (unsigned long memaddr);
#ifdef CONFIG_XMON_DISASSEMBLY
extern int print_insn_powerpc(unsigned long insn, unsigned long memaddr);
extern int print_insn_spu(unsigned long insn, unsigned long memaddr);
#else
static inline int print_insn_powerpc(unsigned long insn, unsigned long memaddr)
{
printf("%.8x", insn);
return 0;
}
static inline int print_insn_spu(unsigned long insn, unsigned long memaddr)
{
printf("%.8x", insn);
return 0;
}
#endif
#endif /* _POWERPC_XMON_DIS_ASM_H */
...@@ -21,8 +21,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ...@@ -21,8 +21,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
#include "nonstdio.h" #include "nonstdio.h"
#include "ansidecl.h" #include "ansidecl.h"
#include "ppc.h" #include "ppc.h"
#include "dis-asm.h"
extern void print_address (unsigned long memaddr);
/* Print a PowerPC or POWER instruction. */ /* Print a PowerPC or POWER instruction. */
......
...@@ -22,8 +22,7 @@ ...@@ -22,8 +22,7 @@
#include "nonstdio.h" #include "nonstdio.h"
#include "ansidecl.h" #include "ansidecl.h"
#include "spu.h" #include "spu.h"
#include "dis-asm.h"
extern void print_address (unsigned long memaddr);
/* This file provides a disassembler function which uses /* This file provides a disassembler function which uses
the disassembler interface defined in dis-asm.h. */ the disassembler interface defined in dis-asm.h. */
......
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#endif #endif
#include "nonstdio.h" #include "nonstdio.h"
#include "dis-asm.h"
#define scanhex xmon_scanhex #define scanhex xmon_scanhex
#define skipbl xmon_skipbl #define skipbl xmon_skipbl
...@@ -110,7 +111,6 @@ static int bsesc(void); ...@@ -110,7 +111,6 @@ static int bsesc(void);
static void dump(void); static void dump(void);
static void prdump(unsigned long, long); static void prdump(unsigned long, long);
static int ppc_inst_dump(unsigned long, long, int); static int ppc_inst_dump(unsigned long, long, int);
void print_address(unsigned long);
static void backtrace(struct pt_regs *); static void backtrace(struct pt_regs *);
static void excprint(struct pt_regs *); static void excprint(struct pt_regs *);
static void prregs(struct pt_regs *); static void prregs(struct pt_regs *);
...@@ -154,9 +154,6 @@ static int do_spu_cmd(void); ...@@ -154,9 +154,6 @@ static int do_spu_cmd(void);
int xmon_no_auto_backtrace; int xmon_no_auto_backtrace;
extern int print_insn_powerpc(unsigned long insn, unsigned long memaddr);
extern int print_insn_spu(unsigned long insn, unsigned long memaddr);
extern void xmon_enter(void); extern void xmon_enter(void);
extern void xmon_leave(void); extern void xmon_leave(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment