[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: Michael Ellerman <michael@ellerman.id.au> Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
This commit is contained in:
committed by
Paul Mackerras
parent
af89fb8041
commit
e0426047cb
@@ -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 @@
|
|||||||
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
|
||||||
|
31
arch/powerpc/xmon/dis-asm.h
Normal file
31
arch/powerpc/xmon/dis-asm.h
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#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. *
|
|||||||
#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 @@
|
|||||||
#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 @@
|
|||||||
#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);
|
|||||||
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);
|
|||||||
|
|
||||||
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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user