debug.h revision ae3a197e3d0bfe3f4bf1693723e82dc018c096f3
1ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells/*
2ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells * Copyright (C) 1999 Cort Dougan <cort@cs.nmt.edu>
3ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells */
4ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells#ifndef _ASM_POWERPC_DEBUG_H
5ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells#define _ASM_POWERPC_DEBUG_H
6ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells
7ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsstruct pt_regs;
8ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells
9ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsextern struct dentry *powerpc_debugfs_root;
10ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells
11ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells#if defined(CONFIG_DEBUGGER) || defined(CONFIG_KEXEC)
12ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells
13ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsextern int (*__debugger)(struct pt_regs *regs);
14ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsextern int (*__debugger_ipi)(struct pt_regs *regs);
15ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsextern int (*__debugger_bpt)(struct pt_regs *regs);
16ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsextern int (*__debugger_sstep)(struct pt_regs *regs);
17ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsextern int (*__debugger_iabr_match)(struct pt_regs *regs);
18ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsextern int (*__debugger_dabr_match)(struct pt_regs *regs);
19ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsextern int (*__debugger_fault_handler)(struct pt_regs *regs);
20ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells
21ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells#define DEBUGGER_BOILERPLATE(__NAME) \
22ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsstatic inline int __NAME(struct pt_regs *regs) \
23ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells{ \
24ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells	if (unlikely(__ ## __NAME)) \
25ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells		return __ ## __NAME(regs); \
26ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells	return 0; \
27ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells}
28ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells
29ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David HowellsDEBUGGER_BOILERPLATE(debugger)
30ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David HowellsDEBUGGER_BOILERPLATE(debugger_ipi)
31ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David HowellsDEBUGGER_BOILERPLATE(debugger_bpt)
32ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David HowellsDEBUGGER_BOILERPLATE(debugger_sstep)
33ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David HowellsDEBUGGER_BOILERPLATE(debugger_iabr_match)
34ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David HowellsDEBUGGER_BOILERPLATE(debugger_dabr_match)
35ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David HowellsDEBUGGER_BOILERPLATE(debugger_fault_handler)
36ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells
37ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells#else
38ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsstatic inline int debugger(struct pt_regs *regs) { return 0; }
39ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsstatic inline int debugger_ipi(struct pt_regs *regs) { return 0; }
40ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsstatic inline int debugger_bpt(struct pt_regs *regs) { return 0; }
41ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsstatic inline int debugger_sstep(struct pt_regs *regs) { return 0; }
42ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsstatic inline int debugger_iabr_match(struct pt_regs *regs) { return 0; }
43ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsstatic inline int debugger_dabr_match(struct pt_regs *regs) { return 0; }
44ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsstatic inline int debugger_fault_handler(struct pt_regs *regs) { return 0; }
45ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells#endif
46ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells
47ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsextern int set_dabr(unsigned long dabr);
48ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells#ifdef CONFIG_PPC_ADV_DEBUG_REGS
49ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsextern void do_send_trap(struct pt_regs *regs, unsigned long address,
50ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells			 unsigned long error_code, int signal_code, int brkpt);
51ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells#else
52ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howellsextern void do_dabr(struct pt_regs *regs, unsigned long address,
53ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells		    unsigned long error_code);
54ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells#endif
55ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells
56ae3a197e3d0bfe3f4bf1693723e82dc018c096f3David Howells#endif /* _ASM_POWERPC_DEBUG_H */
57