1*c86d39d6STim Bird /* SPDX-License-Identifier: GPL-2.0 */ 253197fc4SJason Wessel /* 353197fc4SJason Wessel * Created by: Jason Wessel <jason.wessel@windriver.com> 453197fc4SJason Wessel * 553197fc4SJason Wessel * Copyright (c) 2009 Wind River Systems, Inc. All Rights Reserved. 653197fc4SJason Wessel */ 753197fc4SJason Wessel 853197fc4SJason Wessel #ifndef _DEBUG_CORE_H_ 953197fc4SJason Wessel #define _DEBUG_CORE_H_ 1053197fc4SJason Wessel /* 1153197fc4SJason Wessel * These are the private implementation headers between the kernel 1253197fc4SJason Wessel * debugger core and the debugger front end code. 1353197fc4SJason Wessel */ 1453197fc4SJason Wessel 1553197fc4SJason Wessel /* kernel debug core data structures */ 1653197fc4SJason Wessel struct kgdb_state { 1753197fc4SJason Wessel int ex_vector; 1853197fc4SJason Wessel int signo; 1953197fc4SJason Wessel int err_code; 2053197fc4SJason Wessel int cpu; 2153197fc4SJason Wessel int pass_exception; 2253197fc4SJason Wessel unsigned long thr_query; 2353197fc4SJason Wessel unsigned long threadid; 2453197fc4SJason Wessel long kgdb_usethreadid; 2553197fc4SJason Wessel struct pt_regs *linux_regs; 268daaa5f8SMike Travis atomic_t *send_ready; 2753197fc4SJason Wessel }; 2853197fc4SJason Wessel 2953197fc4SJason Wessel /* Exception state values */ 3053197fc4SJason Wessel #define DCPU_WANT_MASTER 0x1 /* Waiting to become a master kgdb cpu */ 3153197fc4SJason Wessel #define DCPU_NEXT_MASTER 0x2 /* Transition from one master cpu to another */ 3253197fc4SJason Wessel #define DCPU_IS_SLAVE 0x4 /* Slave cpu enter exception */ 332277b492SDouglas Anderson #define DCPU_WANT_BT 0x8 /* Slave cpu should backtrace then clear flag */ 3453197fc4SJason Wessel 3553197fc4SJason Wessel struct debuggerinfo_struct { 3653197fc4SJason Wessel void *debuggerinfo; 3753197fc4SJason Wessel struct task_struct *task; 3853197fc4SJason Wessel int exception_state; 39dcc78711SJason Wessel int ret_state; 40dcc78711SJason Wessel int irq_depth; 41dfee3a7bSJason Wessel int enter_kgdb; 4287b09592SDouglas Anderson bool rounding_up; 4353197fc4SJason Wessel }; 4453197fc4SJason Wessel 4553197fc4SJason Wessel extern struct debuggerinfo_struct kgdb_info[]; 4653197fc4SJason Wessel 4753197fc4SJason Wessel /* kernel debug core break point routines */ 4853197fc4SJason Wessel extern int dbg_remove_all_break(void); 4953197fc4SJason Wessel extern int dbg_set_sw_break(unsigned long addr); 5053197fc4SJason Wessel extern int dbg_remove_sw_break(unsigned long addr); 5153197fc4SJason Wessel extern int dbg_activate_sw_breakpoints(void); 52dcc78711SJason Wessel extern int dbg_deactivate_sw_breakpoints(void); 53dcc78711SJason Wessel 54dcc78711SJason Wessel /* polled character access to i/o module */ 55dcc78711SJason Wessel extern int dbg_io_get_char(void); 56dcc78711SJason Wessel 57dcc78711SJason Wessel /* stub return value for switching between the gdbstub and kdb */ 58dcc78711SJason Wessel #define DBG_PASS_EVENT -12345 59dcc78711SJason Wessel /* Switch from one cpu to another */ 60dcc78711SJason Wessel #define DBG_SWITCH_CPU_EVENT -123456 61dcc78711SJason Wessel extern int dbg_switch_cpu; 6253197fc4SJason Wessel 6353197fc4SJason Wessel /* gdbstub interface functions */ 6453197fc4SJason Wessel extern int gdb_serial_stub(struct kgdb_state *ks); 6553197fc4SJason Wessel extern void gdbstub_msg_write(const char *s, int len); 6653197fc4SJason Wessel 67dcc78711SJason Wessel /* gdbstub functions used for kdb <-> gdbstub transition */ 68dcc78711SJason Wessel extern int gdbstub_state(struct kgdb_state *ks, char *cmd); 69a0de055cSJason Wessel extern int dbg_kdb_mode; 70dcc78711SJason Wessel 71dcc78711SJason Wessel #ifdef CONFIG_KGDB_KDB 72dcc78711SJason Wessel extern int kdb_stub(struct kgdb_state *ks); 73a0de055cSJason Wessel extern int kdb_parse(const char *cmdstr); 7400370b8fSMatt Klein extern int kdb_common_init_state(struct kgdb_state *ks); 7500370b8fSMatt Klein extern int kdb_common_deinit_state(void); 762277b492SDouglas Anderson extern void kdb_dump_stack_on_cpu(int cpu); 77dcc78711SJason Wessel #else /* ! CONFIG_KGDB_KDB */ kdb_stub(struct kgdb_state * ks)78dcc78711SJason Wesselstatic inline int kdb_stub(struct kgdb_state *ks) 79dcc78711SJason Wessel { 80dcc78711SJason Wessel return DBG_PASS_EVENT; 81dcc78711SJason Wessel } 82dcc78711SJason Wessel #endif /* CONFIG_KGDB_KDB */ 83dcc78711SJason Wessel 8453197fc4SJason Wessel #endif /* _DEBUG_CORE_H_ */ 85