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