keys are documented in <file:Documentation/sysrq.txt>. Don't say Y
unless you really know what this hack does.
+config DEBUGGER
+ bool "Enable debugger hooks"
+ depends on DEBUG_KERNEL
+ help
+ Include in-kernel hooks for kernel debuggers. Unless you are
+ intending to debug the kernel, say N here.
+
config XMON
bool "Include xmon kernel debugger"
- depends on DEBUG_KERNEL
+ depends on DEBUGGER
help
Include in-kernel hooks for the xmon kernel monitor/debugger.
Unless you are intending to debug the kernel, say N here.
request_irq(openpic_vec_ipi+1, openpic_ipi_action, SA_INTERRUPT,
"IPI1 (reschedule)", 0);
request_irq(openpic_vec_ipi+2, openpic_ipi_action, SA_INTERRUPT,
- "IPI2 (invalidate tlb)", 0);
+ "IPI2 (unused)", 0);
request_irq(openpic_vec_ipi+3, openpic_ipi_action, SA_INTERRUPT,
- "IPI3 (xmon break)", 0);
+ "IPI3 (debugger break)", 0);
for ( i = 0; i < OPENPIC_NUM_IPI ; i++ )
openpic_enable_ipi(openpic_vec_ipi+i);
EXPORT_SYMBOL(irq_desc);
EXPORT_SYMBOL(get_wchan);
EXPORT_SYMBOL(console_drivers);
-#ifdef CONFIG_XMON
-EXPORT_SYMBOL(xmon);
-#endif
-
-#ifdef CONFIG_DEBUG_KERNEL
-extern void (*debugger)(struct pt_regs *regs);
-extern int (*debugger_bpt)(struct pt_regs *regs);
-extern int (*debugger_sstep)(struct pt_regs *regs);
-extern int (*debugger_iabr_match)(struct pt_regs *regs);
-extern int (*debugger_dabr_match)(struct pt_regs *regs);
-extern void (*debugger_fault_handler)(struct pt_regs *regs);
-
-EXPORT_SYMBOL(debugger);
-EXPORT_SYMBOL(debugger_bpt);
-EXPORT_SYMBOL(debugger_sstep);
-EXPORT_SYMBOL(debugger_iabr_match);
-EXPORT_SYMBOL(debugger_dabr_match);
-EXPORT_SYMBOL(debugger_fault_handler);
-#endif
EXPORT_SYMBOL(tb_ticks_per_usec);
EXPORT_SYMBOL(paca);
#include <asm/sections.h>
#include <asm/btext.h>
#include <asm/nvram.h>
+#include <asm/system.h>
extern unsigned long klimit;
/* extern void *stab; */
int powersave_nap;
-#ifdef CONFIG_XMON
-extern void xmon_map_scc(void);
-#endif
-
char saved_command_line[256];
unsigned char aux_device_present;
unsigned long r6, unsigned long r7)
{
#ifdef CONFIG_PPC_PSERIES
- unsigned int ret, i;
+ unsigned int ret, i;
#endif
#ifdef CONFIG_XMON_DEFAULT
- debugger = xmon;
- debugger_bpt = xmon_bpt;
- debugger_sstep = xmon_sstep;
- debugger_iabr_match = xmon_iabr_match;
- debugger_dabr_match = xmon_dabr_match;
+ xmon_init();
#endif
#ifdef CONFIG_PPC_ISERIES
calibrate_delay = ppc64_calibrate_delay;
ppc64_boot_msg(0x12, "Setup Arch");
+
#ifdef CONFIG_XMON
- xmon_map_scc();
- if (strstr(cmd_line, "xmon"))
- xmon(0);
+ if (strstr(cmd_line, "xmon")) {
+ /* ensure xmon is enabled */
+ xmon_init();
+ debugger(0);
+ }
#endif /* CONFIG_XMON */
-
/*
* Set cache line size based on type of cpu as a default.
* Systems with OF can look in the properties on the cpu node(s)
#include <asm/machdep.h>
#include <asm/xics.h>
#include <asm/cputable.h>
+#include <asm/system.h>
int smp_threads_ready;
unsigned long cache_decay_ticks;
void smp_message_recv(int msg, struct pt_regs *regs)
{
- switch( msg ) {
+ switch(msg) {
case PPC_MSG_CALL_FUNCTION:
smp_call_function_interrupt();
break;
/* spare */
break;
#endif
-#ifdef CONFIG_XMON
- case PPC_MSG_XMON_BREAK:
- xmon(regs);
+#ifdef CONFIG_DEBUGGER
+ case PPC_MSG_DEBUGGER_BREAK:
+ debugger(regs);
break;
-#endif /* CONFIG_XMON */
+#endif
default:
printk("SMP %d: smp_message_recv(): unknown msg %d\n",
smp_processor_id(), msg);
smp_message_pass(cpu, PPC_MSG_RESCHEDULE, 0, 0);
}
-#ifdef CONFIG_XMON
-void smp_send_xmon_break(int cpu)
+#ifdef CONFIG_DEBUGGER
+void smp_send_debugger_break(int cpu)
{
- smp_message_pass(cpu, PPC_MSG_XMON_BREAK, 0, 0);
+ smp_message_pass(cpu, PPC_MSG_DEBUGGER_BREAK, 0, 0);
}
-#endif /* CONFIG_XMON */
+#endif
static void stop_this_cpu(void *dummy)
{
printk("smp_call_function on cpu %d: other cpus not "
"responding (%d)\n", smp_processor_id(),
atomic_read(&data.started));
-#ifdef CONFIG_DEBUG_KERNEL
- if (debugger)
- debugger(0);
-#endif
+ debugger(0);
goto out;
}
}
smp_processor_id(),
atomic_read(&data.finished),
atomic_read(&data.started));
-#ifdef CONFIG_DEBUG_KERNEL
- if (debugger)
- debugger(0);
-#endif
+ debugger(0);
goto out;
}
}
extern int fwnmi_active;
#endif
-#ifdef CONFIG_DEBUG_KERNEL
-void (*debugger)(struct pt_regs *regs);
-int (*debugger_bpt)(struct pt_regs *regs);
-int (*debugger_sstep)(struct pt_regs *regs);
-int (*debugger_iabr_match)(struct pt_regs *regs);
-int (*debugger_dabr_match)(struct pt_regs *regs);
-void (*debugger_fault_handler)(struct pt_regs *regs);
+#ifdef CONFIG_DEBUGGER
+int (*__debugger)(struct pt_regs *regs);
+int (*__debugger_bpt)(struct pt_regs *regs);
+int (*__debugger_sstep)(struct pt_regs *regs);
+int (*__debugger_iabr_match)(struct pt_regs *regs);
+int (*__debugger_dabr_match)(struct pt_regs *regs);
+int (*__debugger_fault_handler)(struct pt_regs *regs);
+
+EXPORT_SYMBOL(__debugger);
+EXPORT_SYMBOL(__debugger_bpt);
+EXPORT_SYMBOL(__debugger_sstep);
+EXPORT_SYMBOL(__debugger_iabr_match);
+EXPORT_SYMBOL(__debugger_dabr_match);
+EXPORT_SYMBOL(__debugger_fault_handler);
#endif
/*
_exception(int signr, siginfo_t *info, struct pt_regs *regs)
{
if (!user_mode(regs)) {
-#ifdef CONFIG_DEBUG_KERNEL
- if (debugger)
- debugger(regs);
-#endif
- die("Exception in kernel mode", regs, signr);
+ if (debugger(regs))
+ return;
+ die("Exception in kernel mode\n", regs, signr);
}
force_sig_info(signr, info, current);
}
#endif
-#ifdef CONFIG_DEBUG_KERNEL
- if (debugger)
- debugger(regs);
- else
-#endif
- panic("System Reset");
+ if (!debugger(regs))
+ die("System Reset", regs, 0);
/* Must die if the interrupt is not recoverable */
if (!(regs->msr & MSR_RI))
}
#endif
-#ifdef CONFIG_DEBUG_KERNEL
- if (debugger_fault_handler) {
- debugger_fault_handler(regs);
+ if (debugger_fault_handler(regs))
return;
- }
- if (debugger)
- debugger(regs);
-#endif
- console_verbose();
- spin_lock_irq(&die_lock);
- bust_spinlocks(1);
- printk("Machine check in kernel mode.\n");
- printk("Caused by (from SRR1=%lx): ", regs->msr);
- show_regs(regs);
- bust_spinlocks(0);
- spin_unlock_irq(&die_lock);
- panic("Unrecoverable Machine Check");
+ if (debugger(regs))
+ return;
+
+ die("Machine check in kernel mode", regs, 0);
}
void
{
siginfo_t info;
-#ifdef CONFIG_DEBUG_KERNEL
- if (debugger_iabr_match && debugger_iabr_match(regs))
+ if (debugger_iabr_match(regs))
return;
-#endif
info.si_signo = SIGTRAP;
info.si_errno = 0;
info.si_code = TRAP_BRKPT;
{
siginfo_t info;
-#ifdef CONFIG_DEBUG_KERNEL
- if (debugger_fault_handler) {
- debugger_fault_handler(regs);
+ if (debugger_fault_handler(regs))
return;
- }
-#endif
if (regs->msr & 0x100000) {
/* IEEE FP exception */
} else if (regs->msr & 0x20000) {
/* trap exception */
-#ifdef CONFIG_DEBUG_KERNEL
- if (debugger_bpt && debugger_bpt(regs))
+ if (debugger_bpt(regs))
return;
-#endif
+
if (check_bug_trap(regs)) {
regs->nip += 4;
return;
void
KernelFPUnavailableException(struct pt_regs *regs)
{
- printk("Illegal floating point used in kernel (task=0x%p, "
- "pc=0x%016lx, trap=0x%lx)\n", current, regs->nip, regs->trap);
- panic("Unrecoverable FP Unavailable Exception in Kernel");
+ die("Unrecoverable FP Unavailable Exception in Kernel", regs, 0);
}
void
KernelAltivecUnavailableException(struct pt_regs *regs)
{
- printk("Illegal VMX/Altivec used in kernel (task=0x%p, "
- "pc=0x%016lx, trap=0x%lx)\n", current, regs->nip, regs->trap);
- panic("Unrecoverable VMX/Altivec Unavailable Exception in Kernel");
+ die("Unrecoverable VMX/Altivec Unavailable Exception in Kernel", regs, 0);
}
void
regs->msr &= ~MSR_SE; /* Turn off 'trace' bit */
-#ifdef CONFIG_DEBUG_KERNEL
- if (debugger_sstep && debugger_sstep(regs))
+ if (debugger_sstep(regs))
return;
-#endif
+
info.si_signo = SIGTRAP;
info.si_errno = 0;
info.si_code = TRAP_TRACE;
smp_message_recv(PPC_MSG_MIGRATE_TASK, regs);
}
#endif
-#ifdef CONFIG_XMON
- if (test_and_clear_bit(PPC_MSG_XMON_BREAK,
+#ifdef CONFIG_DEBUGGER
+ if (test_and_clear_bit(PPC_MSG_DEBUGGER_BREAK,
&xics_ipi_message[cpu].value)) {
mb();
- smp_message_recv(PPC_MSG_XMON_BREAK, regs);
+ smp_message_recv(PPC_MSG_DEBUGGER_BREAK, regs);
}
#endif
}
#include <asm/system.h>
#include <asm/uaccess.h>
-#include <asm/ppcdebug.h>
-
-#ifdef CONFIG_DEBUG_KERNEL
-int debugger_kernel_faults = 1;
-#endif
-
void bad_page_fault(struct pt_regs *, unsigned long, int);
/*
unsigned long code = SEGV_MAPERR;
unsigned long is_write = error_code & 0x02000000;
-#ifdef CONFIG_DEBUG_KERNEL
- if (debugger_fault_handler && (regs->trap == 0x300 ||
- regs->trap == 0x380)) {
- debugger_fault_handler(regs);
- return;
+ if (regs->trap == 0x300 || regs->trap == 0x380) {
+ if (debugger_fault_handler(regs))
+ return;
}
-#endif
/* On a kernel SLB miss we can only check for a valid exception entry */
if (!user_mode(regs) && (regs->trap == 0x380)) {
return;
}
-#ifdef CONFIG_DEBUG_KERNEL
if (error_code & 0x00400000) {
- /* DABR match */
if (debugger_dabr_match(regs))
return;
}
-#endif
if (in_atomic() || mm == NULL) {
bad_page_fault(regs, address, SIGSEGV);
info.si_errno = 0;
info.si_code = code;
info.si_addr = (void *) address;
-#ifdef CONFIG_XMON
- ifppcdebug(PPCDBG_SIGNALXMON)
- PPCDBG_ENTER_DEBUGGER_REGS(regs);
-#endif
-
force_sig_info(SIGSEGV, &info, current);
return;
}
}
/* kernel has accessed a bad area */
-#ifdef CONFIG_DEBUG_KERNEL
- if (debugger_kernel_faults && debugger)
- debugger(regs);
-#endif
+ if (debugger(regs))
+ return;
die("Kernel access of bad area", regs, sig);
}
#include <asm/cputable.h>
#include <asm/ppcdebug.h>
#include <asm/sections.h>
+#include <asm/system.h>
#ifdef CONFIG_PPC_ISERIES
#include <asm/iSeries/iSeries_dma.h>
bootmap_pages = bootmem_bootmap_pages(total_pages);
start = (unsigned long)__a2p(lmb_alloc(bootmap_pages<<PAGE_SHIFT, PAGE_SIZE));
- if (start == 0) {
- udbg_printf("do_init_bootmem: failed to allocate a bitmap.\n");
- udbg_printf("\tbootmap_pages = 0x%lx.\n", bootmap_pages);
- PPCDBG_ENTER_DEBUGGER();
- }
+ BUG_ON(!start);
boot_mapsize = init_bootmem(start >> PAGE_SHIFT, total_pages);
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/sysrq.h>
+#include <linux/init.h>
#include <asm/machdep.h>
#include <asm/io.h>
#include <asm/page.h>
#include <asm/prom.h>
#include <asm/processor.h>
#include <asm/udbg.h>
-
-extern void xmon_printf(const char *fmt, ...);
-
-#define TB_SPEED 25000000
-
-static inline unsigned int readtb(void)
-{
- unsigned int ret;
-
- asm volatile("mftb %0" : "=r" (ret) :);
- return ret;
-}
+#include <asm/system.h>
#ifdef CONFIG_MAGIC_SYSRQ
static void sysrq_handle_xmon(int key, struct pt_regs *pt_regs,
struct tty_struct *tty)
{
- xmon(pt_regs);
+ /* ensure xmon is enabled */
+ xmon_init();
+ debugger(pt_regs);
}
static struct sysrq_key_op sysrq_xmon_op =
.action_msg = "Entering xmon\n",
};
-#endif /* CONFIG_MAGIC_SYSRQ */
-
-void
-xmon_map_scc(void)
+static int __init setup_xmon_sysrq(void)
{
-#ifdef CONFIG_MAGIC_SYSRQ
- /* This maybe isn't the best place to register sysrq 'x' */
__sysrq_put_key_op('x', &sysrq_xmon_op);
-#endif /* CONFIG_MAGIC_SYSRQ */
+ return 0;
}
+__initcall(setup_xmon_sysrq);
+#endif /* CONFIG_MAGIC_SYSRQ */
int
xmon_write(void *handle, void *ptr, int nb)
return udbg_write(ptr, nb);
}
-int xmon_wants_key;
-
int
xmon_read(void *handle, void *ptr, int nb)
{
void *xmon_stdout;
void *xmon_stderr;
-void
-xmon_init(void)
-{
-}
-
int
xmon_putc(int c, void *f)
{
static unsigned bpinstr = 0x7fe00008; /* trap */
/* Prototypes */
-extern void (*debugger_fault_handler)(struct pt_regs *);
static int cmds(struct pt_regs *);
static int mread(unsigned long, void *, int);
static int mwrite(unsigned long, void *, int);
-static void handle_fault(struct pt_regs *);
+static int handle_fault(struct pt_regs *);
static void byterev(unsigned char *, int);
static void memex(void);
static int bsesc(void);
#endif
}
-void
+int
xmon(struct pt_regs *excp)
{
struct pt_regs regs;
cpu_clear(smp_processor_id(), cpus_in_xmon);
#endif /* CONFIG_SMP */
set_msrd(msr); /* restore interrupt enable */
+
+ return 0;
}
int
printf("stopping all cpus\n");
/* interrupt other cpu(s) */
cpu = MSG_ALL_BUT_SELF;
- smp_send_xmon_break(cpu);
+ smp_send_debugger_break(cpu);
return;
}
termch = cmd;
nflush = 1;
scanhex(&nflush);
nflush = (nflush + L1_CACHE_BYTES - 1) / L1_CACHE_BYTES;
- if( setjmp(bus_error_jmp) == 0 ) {
- debugger_fault_handler = handle_fault;
+ if (setjmp(bus_error_jmp) == 0) {
+ __debugger_fault_handler = handle_fault;
sync();
if (cmd != 'i') {
/* wait a little while to see if we get a machine check */
__delay(200);
}
- debugger_fault_handler = 0;
+ __debugger_fault_handler = 0;
}
unsigned long
code = (unsigned long (*)(void)) opd;
if (setjmp(bus_error_jmp) == 0) {
- debugger_fault_handler = handle_fault;
+ __debugger_fault_handler = handle_fault;
sync();
ret = code();
printf("*** Error reading spr %x\n", n);
}
- debugger_fault_handler = 0;
+ __debugger_fault_handler = 0;
return ret;
}
code = (unsigned long (*)(unsigned long)) opd;
if (setjmp(bus_error_jmp) == 0) {
- debugger_fault_handler = handle_fault;
+ __debugger_fault_handler = handle_fault;
sync();
code(val);
printf("*** Error writing spr %x\n", n);
}
- debugger_fault_handler = 0;
+ __debugger_fault_handler = 0;
}
static unsigned long regno;
n = 0;
if (setjmp(bus_error_jmp) == 0) {
- debugger_fault_handler = handle_fault;
+ __debugger_fault_handler = handle_fault;
sync();
p = (char *)adrs;
q = (char *)buf;
__delay(200);
n = size;
}
- debugger_fault_handler = 0;
+ __debugger_fault_handler = 0;
return n;
}
n = 0;
if (setjmp(bus_error_jmp) == 0) {
- debugger_fault_handler = handle_fault;
+ __debugger_fault_handler = handle_fault;
sync();
p = (char *) adrs;
q = (char *) buf;
} else {
printf("*** Error writing address %x\n", adrs + n);
}
- debugger_fault_handler = 0;
+ __debugger_fault_handler = 0;
return n;
}
static int fault_type;
static char *fault_chars[] = { "--", "**", "##" };
-static void
+static int
handle_fault(struct pt_regs *regs)
{
switch (regs->trap) {
}
longjmp(bus_error_jmp, 1);
+
+ return 0;
}
#define SWAP(a, b, t) ((t) = (a), (a) = (b), (b) = (t))
char namebuf[128];
if (setjmp(bus_error_jmp) == 0) {
- debugger_fault_handler = handle_fault;
+ __debugger_fault_handler = handle_fault;
sync();
name = kallsyms_lookup(address, &size, &offset, &modname,
namebuf);
name = "symbol lookup failed";
}
- debugger_fault_handler = 0;
+ __debugger_fault_handler = 0;
if (!name) {
char addrstr[sizeof("0x%lx") + (BITS_PER_LONG*3/10)];
}
}
+void xmon_init(void)
+{
+ __debugger = xmon;
+ __debugger_bpt = xmon_bpt;
+ __debugger_sstep = xmon_sstep;
+ __debugger_iabr_match = xmon_iabr_match;
+ __debugger_dabr_match = xmon_dabr_match;
+}
+
void dump_segments(void)
{
if (cur_cpu_spec->cpu_features & CPU_FTR_SLB)
#define ppcdebugset(FLAGS) (udbg_ifdebug(FLAGS))
#define PPCDBG_BINFMT (test_thread_flag(TIF_32BIT) ? PPCDBG_BINFMT32 : PPCDBG_BINFMT64)
-#ifdef CONFIG_XMON
-#define PPCDBG_ENTER_DEBUGGER() xmon(0)
-#define PPCDBG_ENTER_DEBUGGER_REGS(X) xmon(X)
-#endif
-
#else
#define PPCDBG(...) do {;} while (0)
#define PPCDBGCALL(FLAGS,FUNCTION) do {;} while (0)
#define ppcdebugset(FLAGS) (0)
#endif /* CONFIG_PPCDBG */
-#ifndef PPCDBG_ENTER_DEBUGGER
-#define PPCDBG_ENTER_DEBUGGER() do {;} while(0)
-#endif
-
-#ifndef PPCDBG_ENTER_DEBUGGER_REGS
-#define PPCDBG_ENTER_DEBUGGER_REGS(A) do {;} while(0)
-#endif
-
#endif /*__PPCDEBUG_H */
#ifdef CONFIG_SMP
extern void smp_message_pass(int target, int msg, unsigned long data, int wait);
-extern void smp_send_tlb_invalidate(int);
-extern void smp_send_xmon_break(int cpu);
+extern void smp_send_debugger_break(int cpu);
struct pt_regs;
extern void smp_message_recv(int, struct pt_regs *);
* in /proc/interrupts will be wrong!!! --Troy */
#define PPC_MSG_CALL_FUNCTION 0
#define PPC_MSG_RESCHEDULE 1
+/* This is unused now */
+#if 0
#define PPC_MSG_MIGRATE_TASK 2
-#define PPC_MSG_XMON_BREAK 3
+#endif
+#define PPC_MSG_DEBUGGER_BREAK 3
void smp_init_iSeries(void);
void smp_init_pSeries(void);
#endif /* !(CONFIG_SMP) */
-#endif /* __ASSEMBLY__ */
#define get_hard_smp_processor_id(CPU) (paca[(CPU)].xHwProcNum)
-#define set_hard_smp_processor_id(CPU, VAL) do { (paca[(CPU)].xHwProcNum = VAL); } while (0)
+#define set_hard_smp_processor_id(CPU, VAL) \
+ do { (paca[(CPU)].xHwProcNum = VAL); } while (0)
+
+#endif /* __ASSEMBLY__ */
#endif /* !(_PPC64_SMP_H) */
#endif /* __KERNEL__ */
*/
#include <linux/config.h>
+#include <linux/compiler.h>
#include <asm/page.h>
#include <asm/processor.h>
#include <asm/hw_irq.h>
#define smp_read_barrier_depends() do { } while(0)
#endif /* CONFIG_SMP */
-#ifdef CONFIG_DEBUG_KERNEL
-extern void (*debugger)(struct pt_regs *regs);
-extern int (*debugger_bpt)(struct pt_regs *regs);
-extern int (*debugger_sstep)(struct pt_regs *regs);
-extern int (*debugger_iabr_match)(struct pt_regs *regs);
-extern int (*debugger_dabr_match)(struct pt_regs *regs);
-extern void (*debugger_fault_handler)(struct pt_regs *regs);
+#ifdef CONFIG_DEBUGGER
+
+extern int (*__debugger)(struct pt_regs *regs);
+extern int (*__debugger_bpt)(struct pt_regs *regs);
+extern int (*__debugger_sstep)(struct pt_regs *regs);
+extern int (*__debugger_iabr_match)(struct pt_regs *regs);
+extern int (*__debugger_dabr_match)(struct pt_regs *regs);
+extern int (*__debugger_fault_handler)(struct pt_regs *regs);
+
+#define DEBUGGER_BOILERPLATE(__NAME) \
+static inline int __NAME(struct pt_regs *regs) \
+{ \
+ if (unlikely(__ ## __NAME)) \
+ return __ ## __NAME(regs); \
+ return 0; \
+}
+
+DEBUGGER_BOILERPLATE(debugger)
+DEBUGGER_BOILERPLATE(debugger_bpt)
+DEBUGGER_BOILERPLATE(debugger_sstep)
+DEBUGGER_BOILERPLATE(debugger_iabr_match)
+DEBUGGER_BOILERPLATE(debugger_dabr_match)
+DEBUGGER_BOILERPLATE(debugger_fault_handler)
+
+#ifdef CONFIG_XMON
+extern void xmon_init(void);
+#endif
+
#else
-#define debugger(regs) do { } while (0)
+#define debugger(regs) 0
#define debugger_bpt(regs) 0
#define debugger_sstep(regs) 0
#define debugger_iabr_match(regs) 0
#define debugger_dabr_match(regs) 0
-#define debugger_fault_handler ((void (*)(struct pt_regs *))0)
-#endif
-
-#ifdef CONFIG_XMON
-extern void xmon_irq(int, void *, struct pt_regs *);
-
-extern void xmon(struct pt_regs *regs);
-extern int xmon_bpt(struct pt_regs *regs);
-extern int xmon_sstep(struct pt_regs *regs);
-extern int xmon_iabr_match(struct pt_regs *regs);
-extern int xmon_dabr_match(struct pt_regs *regs);
-extern void (*xmon_fault_handler)(struct pt_regs *regs);
+#define debugger_fault_handler(regs) 0
#endif
extern void show_regs(struct pt_regs * regs);
+++ /dev/null
-#ifndef __PPC_XMON_H
-#define __PPC_XMON_H
-#ifdef __KERNEL__
-
-struct pt_regs;
-
-extern void xmon(struct pt_regs *excp);
-extern void xmon_printf(const char *fmt, ...);
-extern void xmon_map_scc(void);
-extern int xmon_bpt(struct pt_regs *regs);
-extern int xmon_sstep(struct pt_regs *regs);
-extern int xmon_iabr_match(struct pt_regs *regs);
-extern int xmon_dabr_match(struct pt_regs *regs);
-extern void (*xmon_fault_handler)(struct pt_regs *regs);
-
-#endif
-#endif