debug_core.h (2589B)
1/* 2 * Created by: Jason Wessel <jason.wessel@windriver.com> 3 * 4 * Copyright (c) 2009 Wind River Systems, Inc. All Rights Reserved. 5 * 6 * This file is licensed under the terms of the GNU General Public 7 * License version 2. This program is licensed "as is" without any 8 * warranty of any kind, whether express or implied. 9 */ 10 11#ifndef _DEBUG_CORE_H_ 12#define _DEBUG_CORE_H_ 13/* 14 * These are the private implementation headers between the kernel 15 * debugger core and the debugger front end code. 16 */ 17 18/* kernel debug core data structures */ 19struct kgdb_state { 20 int ex_vector; 21 int signo; 22 int err_code; 23 int cpu; 24 int pass_exception; 25 unsigned long thr_query; 26 unsigned long threadid; 27 long kgdb_usethreadid; 28 struct pt_regs *linux_regs; 29 atomic_t *send_ready; 30}; 31 32/* Exception state values */ 33#define DCPU_WANT_MASTER 0x1 /* Waiting to become a master kgdb cpu */ 34#define DCPU_NEXT_MASTER 0x2 /* Transition from one master cpu to another */ 35#define DCPU_IS_SLAVE 0x4 /* Slave cpu enter exception */ 36#define DCPU_WANT_BT 0x8 /* Slave cpu should backtrace then clear flag */ 37 38struct debuggerinfo_struct { 39 void *debuggerinfo; 40 struct task_struct *task; 41 int exception_state; 42 int ret_state; 43 int irq_depth; 44 int enter_kgdb; 45 bool rounding_up; 46}; 47 48extern struct debuggerinfo_struct kgdb_info[]; 49 50/* kernel debug core break point routines */ 51extern int dbg_remove_all_break(void); 52extern int dbg_set_sw_break(unsigned long addr); 53extern int dbg_remove_sw_break(unsigned long addr); 54extern int dbg_activate_sw_breakpoints(void); 55extern int dbg_deactivate_sw_breakpoints(void); 56 57/* polled character access to i/o module */ 58extern int dbg_io_get_char(void); 59 60/* stub return value for switching between the gdbstub and kdb */ 61#define DBG_PASS_EVENT -12345 62/* Switch from one cpu to another */ 63#define DBG_SWITCH_CPU_EVENT -123456 64extern int dbg_switch_cpu; 65 66/* gdbstub interface functions */ 67extern int gdb_serial_stub(struct kgdb_state *ks); 68extern void gdbstub_msg_write(const char *s, int len); 69 70/* gdbstub functions used for kdb <-> gdbstub transition */ 71extern int gdbstub_state(struct kgdb_state *ks, char *cmd); 72extern int dbg_kdb_mode; 73 74#ifdef CONFIG_KGDB_KDB 75extern int kdb_stub(struct kgdb_state *ks); 76extern int kdb_parse(const char *cmdstr); 77extern int kdb_common_init_state(struct kgdb_state *ks); 78extern int kdb_common_deinit_state(void); 79extern void kdb_dump_stack_on_cpu(int cpu); 80#else /* ! CONFIG_KGDB_KDB */ 81static inline int kdb_stub(struct kgdb_state *ks) 82{ 83 return DBG_PASS_EVENT; 84} 85#endif /* CONFIG_KGDB_KDB */ 86 87#endif /* _DEBUG_CORE_H_ */