linux/kernel/debug/debug_core.h
<<
>>
Prefs
   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_SSTEP       0x8 /* CPU is single stepping */
  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};
  46
  47extern struct debuggerinfo_struct kgdb_info[];
  48
  49/* kernel debug core break point routines */
  50extern int dbg_remove_all_break(void);
  51extern int dbg_set_sw_break(unsigned long addr);
  52extern int dbg_remove_sw_break(unsigned long addr);
  53extern int dbg_activate_sw_breakpoints(void);
  54extern int dbg_deactivate_sw_breakpoints(void);
  55
  56/* polled character access to i/o module */
  57extern int dbg_io_get_char(void);
  58
  59/* stub return value for switching between the gdbstub and kdb */
  60#define DBG_PASS_EVENT -12345
  61/* Switch from one cpu to another */
  62#define DBG_SWITCH_CPU_EVENT -123456
  63extern int dbg_switch_cpu;
  64
  65/* gdbstub interface functions */
  66extern int gdb_serial_stub(struct kgdb_state *ks);
  67extern void gdbstub_msg_write(const char *s, int len);
  68
  69/* gdbstub functions used for kdb <-> gdbstub transition */
  70extern int gdbstub_state(struct kgdb_state *ks, char *cmd);
  71extern int dbg_kdb_mode;
  72
  73#ifdef CONFIG_KGDB_KDB
  74extern int kdb_stub(struct kgdb_state *ks);
  75extern int kdb_parse(const char *cmdstr);
  76extern int kdb_common_init_state(struct kgdb_state *ks);
  77extern int kdb_common_deinit_state(void);
  78#else /* ! CONFIG_KGDB_KDB */
  79static inline int kdb_stub(struct kgdb_state *ks)
  80{
  81        return DBG_PASS_EVENT;
  82}
  83#endif /* CONFIG_KGDB_KDB */
  84
  85#endif /* _DEBUG_CORE_H_ */
  86