153197fc4SJason Wessel /* 253197fc4SJason Wessel * Created by: Jason Wessel <jason.wessel@windriver.com> 353197fc4SJason Wessel * 453197fc4SJason Wessel * Copyright (c) 2009 Wind River Systems, Inc. All Rights Reserved. 553197fc4SJason Wessel * 653197fc4SJason Wessel * This file is licensed under the terms of the GNU General Public 753197fc4SJason Wessel * License version 2. This program is licensed "as is" without any 853197fc4SJason Wessel * warranty of any kind, whether express or implied. 953197fc4SJason Wessel */ 1053197fc4SJason Wessel 1153197fc4SJason Wessel #ifndef _DEBUG_CORE_H_ 1253197fc4SJason Wessel #define _DEBUG_CORE_H_ 1353197fc4SJason Wessel /* 1453197fc4SJason Wessel * These are the private implementation headers between the kernel 1553197fc4SJason Wessel * debugger core and the debugger front end code. 1653197fc4SJason Wessel */ 1753197fc4SJason Wessel 1853197fc4SJason Wessel /* kernel debug core data structures */ 1953197fc4SJason Wessel struct kgdb_state { 2053197fc4SJason Wessel int ex_vector; 2153197fc4SJason Wessel int signo; 2253197fc4SJason Wessel int err_code; 2353197fc4SJason Wessel int cpu; 2453197fc4SJason Wessel int pass_exception; 2553197fc4SJason Wessel unsigned long thr_query; 2653197fc4SJason Wessel unsigned long threadid; 2753197fc4SJason Wessel long kgdb_usethreadid; 2853197fc4SJason Wessel struct pt_regs *linux_regs; 298daaa5f8SMike Travis atomic_t *send_ready; 3053197fc4SJason Wessel }; 3153197fc4SJason Wessel 3253197fc4SJason Wessel /* Exception state values */ 3353197fc4SJason Wessel #define DCPU_WANT_MASTER 0x1 /* Waiting to become a master kgdb cpu */ 3453197fc4SJason Wessel #define DCPU_NEXT_MASTER 0x2 /* Transition from one master cpu to another */ 3553197fc4SJason Wessel #define DCPU_IS_SLAVE 0x4 /* Slave cpu enter exception */ 36*2277b492SDouglas Anderson #define DCPU_WANT_BT 0x8 /* Slave cpu should backtrace then clear flag */ 3753197fc4SJason Wessel 3853197fc4SJason Wessel struct debuggerinfo_struct { 3953197fc4SJason Wessel void *debuggerinfo; 4053197fc4SJason Wessel struct task_struct *task; 4153197fc4SJason Wessel int exception_state; 42dcc78711SJason Wessel int ret_state; 43dcc78711SJason Wessel int irq_depth; 44dfee3a7bSJason Wessel int enter_kgdb; 4587b09592SDouglas Anderson bool rounding_up; 4653197fc4SJason Wessel }; 4753197fc4SJason Wessel 4853197fc4SJason Wessel extern struct debuggerinfo_struct kgdb_info[]; 4953197fc4SJason Wessel 5053197fc4SJason Wessel /* kernel debug core break point routines */ 5153197fc4SJason Wessel extern int dbg_remove_all_break(void); 5253197fc4SJason Wessel extern int dbg_set_sw_break(unsigned long addr); 5353197fc4SJason Wessel extern int dbg_remove_sw_break(unsigned long addr); 5453197fc4SJason Wessel extern int dbg_activate_sw_breakpoints(void); 55dcc78711SJason Wessel extern int dbg_deactivate_sw_breakpoints(void); 56dcc78711SJason Wessel 57dcc78711SJason Wessel /* polled character access to i/o module */ 58dcc78711SJason Wessel extern int dbg_io_get_char(void); 59dcc78711SJason Wessel 60dcc78711SJason Wessel /* stub return value for switching between the gdbstub and kdb */ 61dcc78711SJason Wessel #define DBG_PASS_EVENT -12345 62dcc78711SJason Wessel /* Switch from one cpu to another */ 63dcc78711SJason Wessel #define DBG_SWITCH_CPU_EVENT -123456 64dcc78711SJason Wessel extern int dbg_switch_cpu; 6553197fc4SJason Wessel 6653197fc4SJason Wessel /* gdbstub interface functions */ 6753197fc4SJason Wessel extern int gdb_serial_stub(struct kgdb_state *ks); 6853197fc4SJason Wessel extern void gdbstub_msg_write(const char *s, int len); 6953197fc4SJason Wessel 70dcc78711SJason Wessel /* gdbstub functions used for kdb <-> gdbstub transition */ 71dcc78711SJason Wessel extern int gdbstub_state(struct kgdb_state *ks, char *cmd); 72a0de055cSJason Wessel extern int dbg_kdb_mode; 73dcc78711SJason Wessel 74dcc78711SJason Wessel #ifdef CONFIG_KGDB_KDB 75dcc78711SJason Wessel extern int kdb_stub(struct kgdb_state *ks); 76a0de055cSJason Wessel extern int kdb_parse(const char *cmdstr); 7700370b8fSMatt Klein extern int kdb_common_init_state(struct kgdb_state *ks); 7800370b8fSMatt Klein extern int kdb_common_deinit_state(void); 79*2277b492SDouglas Anderson extern void kdb_dump_stack_on_cpu(int cpu); 80dcc78711SJason Wessel #else /* ! CONFIG_KGDB_KDB */ kdb_stub(struct kgdb_state * ks)81dcc78711SJason Wesselstatic inline int kdb_stub(struct kgdb_state *ks) 82dcc78711SJason Wessel { 83dcc78711SJason Wessel return DBG_PASS_EVENT; 84dcc78711SJason Wessel } 85dcc78711SJason Wessel #endif /* CONFIG_KGDB_KDB */ 86dcc78711SJason Wessel 8753197fc4SJason Wessel #endif /* _DEBUG_CORE_H_ */ 88