Blame view

include/linux/kdb.h 5.25 KB
5d5314d67   Jason Wessel   kdb: core for kgd...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  #ifndef _KDB_H
  #define _KDB_H
  
  /*
   * Kernel Debugger Architecture Independent Global Headers
   *
   * This file is subject to the terms and conditions of the GNU General Public
   * License.  See the file "COPYING" in the main directory of this archive
   * for more details.
   *
   * Copyright (c) 2000-2007 Silicon Graphics, Inc.  All Rights Reserved.
   * Copyright (C) 2000 Stephane Eranian <eranian@hpl.hp.com>
   * Copyright (C) 2009 Jason Wessel <jason.wessel@windriver.com>
   */
  
  #ifdef	CONFIG_KGDB_KDB
  #include <linux/init.h>
  #include <linux/sched.h>
  #include <asm/atomic.h>
  
  #define KDB_POLL_FUNC_MAX	5
f5316b4ae   Jason Wessel   kgdb,8250,pl011: ...
22
  extern int kdb_poll_idx;
5d5314d67   Jason Wessel   kdb: core for kgd...
23
24
25
26
27
28
29
  
  /*
   * kdb_initial_cpu is initialized to -1, and is set to the cpu
   * number whenever the kernel debugger is entered.
   */
  extern int kdb_initial_cpu;
  extern atomic_t kdb_event;
f7030bbc4   Jason Wessel   kdb: Allow kernel...
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  /* Types and messages used for dynamically added kdb shell commands */
  
  #define KDB_MAXARGS    16 /* Maximum number of arguments to a function  */
  
  typedef enum {
  	KDB_REPEAT_NONE = 0,	/* Do not repeat this command */
  	KDB_REPEAT_NO_ARGS,	/* Repeat the command without arguments */
  	KDB_REPEAT_WITH_ARGS,	/* Repeat the command including its arguments */
  } kdb_repeat_t;
  
  typedef int (*kdb_func_t)(int, const char **);
  
  /* KDB return codes from a command or internal kdb function */
  #define KDB_NOTFOUND	(-1)
  #define KDB_ARGCOUNT	(-2)
  #define KDB_BADWIDTH	(-3)
  #define KDB_BADRADIX	(-4)
  #define KDB_NOTENV	(-5)
  #define KDB_NOENVVALUE	(-6)
  #define KDB_NOTIMP	(-7)
  #define KDB_ENVFULL	(-8)
  #define KDB_ENVBUFFULL	(-9)
  #define KDB_TOOMANYBPT	(-10)
  #define KDB_TOOMANYDBREGS (-11)
  #define KDB_DUPBPT	(-12)
  #define KDB_BPTNOTFOUND	(-13)
  #define KDB_BADMODE	(-14)
  #define KDB_BADINT	(-15)
  #define KDB_INVADDRFMT  (-16)
  #define KDB_BADREG      (-17)
  #define KDB_BADCPUNUM   (-18)
  #define KDB_BADLENGTH	(-19)
  #define KDB_NOBP	(-20)
  #define KDB_BADADDR	(-21)
5d5314d67   Jason Wessel   kdb: core for kgd...
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
  /*
   * kdb_diemsg
   *
   *	Contains a pointer to the last string supplied to the
   *	kernel 'die' panic function.
   */
  extern const char *kdb_diemsg;
  
  #define KDB_FLAG_EARLYKDB	(1 << 0) /* set from boot parameter kdb=early */
  #define KDB_FLAG_CATASTROPHIC	(1 << 1) /* A catastrophic event has occurred */
  #define KDB_FLAG_CMD_INTERRUPT	(1 << 2) /* Previous command was interrupted */
  #define KDB_FLAG_NOIPI		(1 << 3) /* Do not send IPIs */
  #define KDB_FLAG_ONLY_DO_DUMP	(1 << 4) /* Only do a dump, used when
  					  * kdb is off */
  #define KDB_FLAG_NO_CONSOLE	(1 << 5) /* No console is available,
  					  * kdb is disabled */
  #define KDB_FLAG_NO_VT_CONSOLE	(1 << 6) /* No VT console is available, do
  					  * not use keyboard */
  #define KDB_FLAG_NO_I8042	(1 << 7) /* No i8042 chip is available, do
  					  * not use keyboard */
  
  extern int kdb_flags;	/* Global flags, see kdb_state for per cpu state */
  
  extern void kdb_save_flags(void);
  extern void kdb_restore_flags(void);
  
  #define KDB_FLAG(flag)		(kdb_flags & KDB_FLAG_##flag)
  #define KDB_FLAG_SET(flag)	((void)(kdb_flags |= KDB_FLAG_##flag))
  #define KDB_FLAG_CLEAR(flag)	((void)(kdb_flags &= ~KDB_FLAG_##flag))
  
  /*
   * External entry point for the kernel debugger.  The pt_regs
   * at the time of entry are supplied along with the reason for
   * entry to the kernel debugger.
   */
  
  typedef enum {
  	KDB_REASON_ENTER = 1,	/* KDB_ENTER() trap/fault - regs valid */
  	KDB_REASON_ENTER_SLAVE,	/* KDB_ENTER_SLAVE() trap/fault - regs valid */
  	KDB_REASON_BREAK,	/* Breakpoint inst. - regs valid */
  	KDB_REASON_DEBUG,	/* Debug Fault - regs valid */
  	KDB_REASON_OOPS,	/* Kernel Oops - regs valid */
  	KDB_REASON_SWITCH,	/* CPU switch - regs valid*/
  	KDB_REASON_KEYBOARD,	/* Keyboard entry - regs valid */
  	KDB_REASON_NMI,		/* Non-maskable interrupt; regs valid */
  	KDB_REASON_RECURSE,	/* Recursive entry to kdb;
  				 * regs probably valid */
  	KDB_REASON_SSTEP,	/* Single Step trap. - regs valid */
  } kdb_reason_t;
d37d39ae3   Jason Wessel   printk,kdb: captu...
113
114
115
  extern int kdb_trap_printk;
  extern int vkdb_printf(const char *fmt, va_list args)
  	    __attribute__ ((format (printf, 1, 0)));
5d5314d67   Jason Wessel   kdb: core for kgd...
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
  extern int kdb_printf(const char *, ...)
  	    __attribute__ ((format (printf, 1, 2)));
  typedef int (*kdb_printf_t)(const char *, ...)
  	     __attribute__ ((format (printf, 1, 2)));
  
  extern void kdb_init(int level);
  
  /* Access to kdb specific polling devices */
  typedef int (*get_char_func)(void);
  extern get_char_func kdb_poll_funcs[];
  extern int kdb_get_kbd_char(void);
  
  static inline
  int kdb_process_cpu(const struct task_struct *p)
  {
  	unsigned int cpu = task_thread_info(p)->cpu;
  	if (cpu > num_possible_cpus())
  		cpu = 0;
  	return cpu;
  }
  
  /* kdb access to register set for stack dumping */
  extern struct pt_regs *kdb_current_regs;
91b152aa8   Jason Wessel   kdb,kgdb: fix spa...
139
140
141
142
143
144
145
146
  #ifdef CONFIG_KALLSYMS
  extern const char *kdb_walk_kallsyms(loff_t *pos);
  #else /* ! CONFIG_KALLSYMS */
  static inline const char *kdb_walk_kallsyms(loff_t *pos)
  {
  	return NULL;
  }
  #endif /* ! CONFIG_KALLSYMS */
5d5314d67   Jason Wessel   kdb: core for kgd...
147

f7030bbc4   Jason Wessel   kdb: Allow kernel...
148
149
150
151
152
  /* Dynamic kdb shell command registration */
  extern int kdb_register(char *, kdb_func_t, char *, char *, short);
  extern int kdb_register_repeat(char *, kdb_func_t, char *, char *,
  			       short, kdb_repeat_t);
  extern int kdb_unregister(char *);
5d5314d67   Jason Wessel   kdb: core for kgd...
153
154
155
  #else /* ! CONFIG_KGDB_KDB */
  #define kdb_printf(...)
  #define kdb_init(x)
f7030bbc4   Jason Wessel   kdb: Allow kernel...
156
157
158
  #define kdb_register(...)
  #define kdb_register_repeat(...)
  #define kdb_uregister(x)
5d5314d67   Jason Wessel   kdb: core for kgd...
159
160
161
162
163
164
  #endif	/* CONFIG_KGDB_KDB */
  enum {
  	KDB_NOT_INITIALIZED,
  	KDB_INIT_EARLY,
  	KDB_INIT_FULL,
  };
81d445073   Jason Wessel   vt,console,kdb: a...
165
166
167
  
  extern int kdbgetintenv(const char *, int *);
  extern int kdb_set(int, const char **);
5d5314d67   Jason Wessel   kdb: core for kgd...
168
  #endif	/* !_KDB_H */