Line data Source code
1 : /*
2 : * This provides the callbacks and functions that KGDB needs to share between
3 : * the core, I/O and arch-specific portions.
4 : *
5 : * Author: Amit Kale <amitkale@linsyssoft.com> and
6 : * Tom Rini <trini@kernel.crashing.org>
7 : *
8 : * 2001-2004 (c) Amit S. Kale and 2003-2005 (c) MontaVista Software, Inc.
9 : * This file is licensed under the terms of the GNU General Public License
10 : * version 2. This program is licensed "as is" without any warranty of any
11 : * kind, whether express or implied.
12 : */
13 : #ifndef _KGDB_H_
14 : #define _KGDB_H_
15 :
16 : #include <linux/linkage.h>
17 : #include <linux/init.h>
18 : #include <linux/atomic.h>
19 : #include <linux/kprobes.h>
20 : #ifdef CONFIG_HAVE_ARCH_KGDB
21 : #include <asm/kgdb.h>
22 : #endif
23 :
24 : #ifdef CONFIG_KGDB
25 : struct pt_regs;
26 :
27 : /**
28 : * kgdb_skipexception - (optional) exit kgdb_handle_exception early
29 : * @exception: Exception vector number
30 : * @regs: Current &struct pt_regs.
31 : *
32 : * On some architectures it is required to skip a breakpoint
33 : * exception when it occurs after a breakpoint has been removed.
34 : * This can be implemented in the architecture specific portion of kgdb.
35 : */
36 : extern int kgdb_skipexception(int exception, struct pt_regs *regs);
37 :
38 : struct tasklet_struct;
39 : struct task_struct;
40 : struct uart_port;
41 :
42 : /**
43 : * kgdb_breakpoint - compiled in breakpoint
44 : *
45 : * This will be implemented as a static inline per architecture. This
46 : * function is called by the kgdb core to execute an architecture
47 : * specific trap to cause kgdb to enter the exception processing.
48 : *
49 : */
50 : void kgdb_breakpoint(void);
51 :
52 : extern int kgdb_connected;
53 : extern int kgdb_io_module_registered;
54 :
55 : extern atomic_t kgdb_setting_breakpoint;
56 : extern atomic_t kgdb_cpu_doing_single_step;
57 :
58 : extern struct task_struct *kgdb_usethread;
59 : extern struct task_struct *kgdb_contthread;
60 :
61 : enum kgdb_bptype {
62 : BP_BREAKPOINT = 0,
63 : BP_HARDWARE_BREAKPOINT,
64 : BP_WRITE_WATCHPOINT,
65 : BP_READ_WATCHPOINT,
66 : BP_ACCESS_WATCHPOINT,
67 : BP_POKE_BREAKPOINT,
68 : };
69 :
70 : enum kgdb_bpstate {
71 : BP_UNDEFINED = 0,
72 : BP_REMOVED,
73 : BP_SET,
74 : BP_ACTIVE
75 : };
76 :
77 : struct kgdb_bkpt {
78 : unsigned long bpt_addr;
79 : unsigned char saved_instr[BREAK_INSTR_SIZE];
80 : enum kgdb_bptype type;
81 : enum kgdb_bpstate state;
82 : };
83 :
84 : struct dbg_reg_def_t {
85 : char *name;
86 : int size;
87 : int offset;
88 : };
89 :
90 : #ifndef DBG_MAX_REG_NUM
91 : #define DBG_MAX_REG_NUM 0
92 : #else
93 : extern struct dbg_reg_def_t dbg_reg_def[];
94 : extern char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs);
95 : extern int dbg_set_reg(int regno, void *mem, struct pt_regs *regs);
96 : #endif
97 : #ifndef KGDB_MAX_BREAKPOINTS
98 : # define KGDB_MAX_BREAKPOINTS 1000
99 : #endif
100 :
101 : #define KGDB_HW_BREAKPOINT 1
102 :
103 : /*
104 : * Functions each KGDB-supporting architecture must provide:
105 : */
106 :
107 : /**
108 : * kgdb_arch_init - Perform any architecture specific initalization.
109 : *
110 : * This function will handle the initalization of any architecture
111 : * specific callbacks.
112 : */
113 : extern int kgdb_arch_init(void);
114 :
115 : /**
116 : * kgdb_arch_exit - Perform any architecture specific uninitalization.
117 : *
118 : * This function will handle the uninitalization of any architecture
119 : * specific callbacks, for dynamic registration and unregistration.
120 : */
121 : extern void kgdb_arch_exit(void);
122 :
123 : /**
124 : * pt_regs_to_gdb_regs - Convert ptrace regs to GDB regs
125 : * @gdb_regs: A pointer to hold the registers in the order GDB wants.
126 : * @regs: The &struct pt_regs of the current process.
127 : *
128 : * Convert the pt_regs in @regs into the format for registers that
129 : * GDB expects, stored in @gdb_regs.
130 : */
131 : extern void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs);
132 :
133 : /**
134 : * sleeping_thread_to_gdb_regs - Convert ptrace regs to GDB regs
135 : * @gdb_regs: A pointer to hold the registers in the order GDB wants.
136 : * @p: The &struct task_struct of the desired process.
137 : *
138 : * Convert the register values of the sleeping process in @p to
139 : * the format that GDB expects.
140 : * This function is called when kgdb does not have access to the
141 : * &struct pt_regs and therefore it should fill the gdb registers
142 : * @gdb_regs with what has been saved in &struct thread_struct
143 : * thread field during switch_to.
144 : */
145 : extern void
146 : sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p);
147 :
148 : /**
149 : * gdb_regs_to_pt_regs - Convert GDB regs to ptrace regs.
150 : * @gdb_regs: A pointer to hold the registers we've received from GDB.
151 : * @regs: A pointer to a &struct pt_regs to hold these values in.
152 : *
153 : * Convert the GDB regs in @gdb_regs into the pt_regs, and store them
154 : * in @regs.
155 : */
156 : extern void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs);
157 :
158 : /**
159 : * kgdb_arch_handle_exception - Handle architecture specific GDB packets.
160 : * @vector: The error vector of the exception that happened.
161 : * @signo: The signal number of the exception that happened.
162 : * @err_code: The error code of the exception that happened.
163 : * @remcom_in_buffer: The buffer of the packet we have read.
164 : * @remcom_out_buffer: The buffer of %BUFMAX bytes to write a packet into.
165 : * @regs: The &struct pt_regs of the current process.
166 : *
167 : * This function MUST handle the 'c' and 's' command packets,
168 : * as well packets to set / remove a hardware breakpoint, if used.
169 : * If there are additional packets which the hardware needs to handle,
170 : * they are handled here. The code should return -1 if it wants to
171 : * process more packets, and a %0 or %1 if it wants to exit from the
172 : * kgdb callback.
173 : */
174 : extern int
175 : kgdb_arch_handle_exception(int vector, int signo, int err_code,
176 : char *remcom_in_buffer,
177 : char *remcom_out_buffer,
178 : struct pt_regs *regs);
179 :
180 : /**
181 : * kgdb_arch_handle_qxfer_pkt - Handle architecture specific GDB XML
182 : * packets.
183 : * @remcom_in_buffer: The buffer of the packet we have read.
184 : * @remcom_out_buffer: The buffer of %BUFMAX bytes to write a packet into.
185 : */
186 :
187 : extern void
188 : kgdb_arch_handle_qxfer_pkt(char *remcom_in_buffer,
189 : char *remcom_out_buffer);
190 :
191 : /**
192 : * kgdb_call_nmi_hook - Call kgdb_nmicallback() on the current CPU
193 : * @ignored: This parameter is only here to match the prototype.
194 : *
195 : * If you're using the default implementation of kgdb_roundup_cpus()
196 : * this function will be called per CPU. If you don't implement
197 : * kgdb_call_nmi_hook() a default will be used.
198 : */
199 :
200 : extern void kgdb_call_nmi_hook(void *ignored);
201 :
202 : /**
203 : * kgdb_roundup_cpus - Get other CPUs into a holding pattern
204 : *
205 : * On SMP systems, we need to get the attention of the other CPUs
206 : * and get them into a known state. This should do what is needed
207 : * to get the other CPUs to call kgdb_wait(). Note that on some arches,
208 : * the NMI approach is not used for rounding up all the CPUs. Normally
209 : * those architectures can just not implement this and get the default.
210 : *
211 : * On non-SMP systems, this is not called.
212 : */
213 : extern void kgdb_roundup_cpus(void);
214 :
215 : /**
216 : * kgdb_arch_set_pc - Generic call back to the program counter
217 : * @regs: Current &struct pt_regs.
218 : * @pc: The new value for the program counter
219 : *
220 : * This function handles updating the program counter and requires an
221 : * architecture specific implementation.
222 : */
223 : extern void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc);
224 :
225 :
226 : /* Optional functions. */
227 : extern int kgdb_validate_break_address(unsigned long addr);
228 : extern int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt);
229 : extern int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt);
230 :
231 : /**
232 : * kgdb_arch_late - Perform any architecture specific initalization.
233 : *
234 : * This function will handle the late initalization of any
235 : * architecture specific callbacks. This is an optional function for
236 : * handling things like late initialization of hw breakpoints. The
237 : * default implementation does nothing.
238 : */
239 : extern void kgdb_arch_late(void);
240 :
241 :
242 : /**
243 : * struct kgdb_arch - Describe architecture specific values.
244 : * @gdb_bpt_instr: The instruction to trigger a breakpoint.
245 : * @flags: Flags for the breakpoint, currently just %KGDB_HW_BREAKPOINT.
246 : * @set_breakpoint: Allow an architecture to specify how to set a software
247 : * breakpoint.
248 : * @remove_breakpoint: Allow an architecture to specify how to remove a
249 : * software breakpoint.
250 : * @set_hw_breakpoint: Allow an architecture to specify how to set a hardware
251 : * breakpoint.
252 : * @remove_hw_breakpoint: Allow an architecture to specify how to remove a
253 : * hardware breakpoint.
254 : * @disable_hw_break: Allow an architecture to specify how to disable
255 : * hardware breakpoints for a single cpu.
256 : * @remove_all_hw_break: Allow an architecture to specify how to remove all
257 : * hardware breakpoints.
258 : * @correct_hw_break: Allow an architecture to specify how to correct the
259 : * hardware debug registers.
260 : * @enable_nmi: Manage NMI-triggered entry to KGDB
261 : */
262 : struct kgdb_arch {
263 : unsigned char gdb_bpt_instr[BREAK_INSTR_SIZE];
264 : unsigned long flags;
265 :
266 : int (*set_breakpoint)(unsigned long, char *);
267 : int (*remove_breakpoint)(unsigned long, char *);
268 : int (*set_hw_breakpoint)(unsigned long, int, enum kgdb_bptype);
269 : int (*remove_hw_breakpoint)(unsigned long, int, enum kgdb_bptype);
270 : void (*disable_hw_break)(struct pt_regs *regs);
271 : void (*remove_all_hw_break)(void);
272 : void (*correct_hw_break)(void);
273 :
274 : void (*enable_nmi)(bool on);
275 : };
276 :
277 : /**
278 : * struct kgdb_io - Describe the interface for an I/O driver to talk with KGDB.
279 : * @name: Name of the I/O driver.
280 : * @read_char: Pointer to a function that will return one char.
281 : * @write_char: Pointer to a function that will write one char.
282 : * @flush: Pointer to a function that will flush any pending writes.
283 : * @init: Pointer to a function that will initialize the device.
284 : * @deinit: Pointer to a function that will deinit the device. Implies that
285 : * this I/O driver is temporary and expects to be replaced. Called when
286 : * an I/O driver is replaced or explicitly unregistered.
287 : * @pre_exception: Pointer to a function that will do any prep work for
288 : * the I/O driver.
289 : * @post_exception: Pointer to a function that will do any cleanup work
290 : * for the I/O driver.
291 : * @cons: valid if the I/O device is a console; else NULL.
292 : */
293 : struct kgdb_io {
294 : const char *name;
295 : int (*read_char) (void);
296 : void (*write_char) (u8);
297 : void (*flush) (void);
298 : int (*init) (void);
299 : void (*deinit) (void);
300 : void (*pre_exception) (void);
301 : void (*post_exception) (void);
302 : struct console *cons;
303 : };
304 :
305 : extern const struct kgdb_arch arch_kgdb_ops;
306 :
307 : extern unsigned long kgdb_arch_pc(int exception, struct pt_regs *regs);
308 :
309 : #ifdef CONFIG_SERIAL_KGDB_NMI
310 : extern int kgdb_register_nmi_console(void);
311 : extern int kgdb_unregister_nmi_console(void);
312 : extern bool kgdb_nmi_poll_knock(void);
313 : #else
314 : static inline int kgdb_register_nmi_console(void) { return 0; }
315 : static inline int kgdb_unregister_nmi_console(void) { return 0; }
316 : static inline bool kgdb_nmi_poll_knock(void) { return true; }
317 : #endif
318 :
319 : extern int kgdb_register_io_module(struct kgdb_io *local_kgdb_io_ops);
320 : extern void kgdb_unregister_io_module(struct kgdb_io *local_kgdb_io_ops);
321 : extern struct kgdb_io *dbg_io_ops;
322 :
323 : extern int kgdb_hex2long(char **ptr, unsigned long *long_val);
324 : extern char *kgdb_mem2hex(char *mem, char *buf, int count);
325 : extern int kgdb_hex2mem(char *buf, char *mem, int count);
326 :
327 : extern int kgdb_isremovedbreak(unsigned long addr);
328 : extern int kgdb_has_hit_break(unsigned long addr);
329 :
330 : extern int
331 : kgdb_handle_exception(int ex_vector, int signo, int err_code,
332 : struct pt_regs *regs);
333 : extern int kgdb_nmicallback(int cpu, void *regs);
334 : extern int kgdb_nmicallin(int cpu, int trapnr, void *regs, int err_code,
335 : atomic_t *snd_rdy);
336 : extern void gdbstub_exit(int status);
337 :
338 : /*
339 : * kgdb and kprobes both use the same (kprobe) blocklist (which makes sense
340 : * given they are both typically hooked up to the same trap meaning on most
341 : * architectures one cannot be used to debug the other)
342 : *
343 : * However on architectures where kprobes is not (yet) implemented we permit
344 : * breakpoints everywhere rather than blocking everything by default.
345 : */
346 : static inline bool kgdb_within_blocklist(unsigned long addr)
347 : {
348 : #ifdef CONFIG_KGDB_HONOUR_BLOCKLIST
349 : return within_kprobe_blacklist(addr);
350 : #else
351 : return false;
352 : #endif
353 : }
354 :
355 : extern int kgdb_single_step;
356 : extern atomic_t kgdb_active;
357 : #define in_dbg_master() \
358 : (irqs_disabled() && (smp_processor_id() == atomic_read(&kgdb_active)))
359 : extern bool dbg_is_early;
360 : extern void __init dbg_late_init(void);
361 : extern void kgdb_panic(const char *msg);
362 : extern void kgdb_free_init_mem(void);
363 : #else /* ! CONFIG_KGDB */
364 : #define in_dbg_master() (0)
365 : #define dbg_late_init()
366 0 : static inline void kgdb_panic(const char *msg) {}
367 1 : static inline void kgdb_free_init_mem(void) { }
368 : #endif /* ! CONFIG_KGDB */
369 : #endif /* _KGDB_H_ */
|