xref: /openbmc/linux/arch/x86/kernel/kgdb.c (revision f42b3800)
1 /*
2  * This program is free software; you can redistribute it and/or modify it
3  * under the terms of the GNU General Public License as published by the
4  * Free Software Foundation; either version 2, or (at your option) any
5  * later version.
6  *
7  * This program is distributed in the hope that it will be useful, but
8  * WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
10  * General Public License for more details.
11  *
12  */
13 
14 /*
15  * Copyright (C) 2004 Amit S. Kale <amitkale@linsyssoft.com>
16  * Copyright (C) 2000-2001 VERITAS Software Corporation.
17  * Copyright (C) 2002 Andi Kleen, SuSE Labs
18  * Copyright (C) 2004 LinSysSoft Technologies Pvt. Ltd.
19  * Copyright (C) 2007 MontaVista Software, Inc.
20  * Copyright (C) 2007-2008 Jason Wessel, Wind River Systems, Inc.
21  */
22 /****************************************************************************
23  *  Contributor:     Lake Stevens Instrument Division$
24  *  Written by:      Glenn Engel $
25  *  Updated by:	     Amit Kale<akale@veritas.com>
26  *  Updated by:	     Tom Rini <trini@kernel.crashing.org>
27  *  Updated by:	     Jason Wessel <jason.wessel@windriver.com>
28  *  Modified for 386 by Jim Kingdon, Cygnus Support.
29  *  Origianl kgdb, compatibility with 2.1.xx kernel by
30  *  David Grothe <dave@gcom.com>
31  *  Integrated into 2.2.5 kernel by Tigran Aivazian <tigran@sco.com>
32  *  X86_64 changes from Andi Kleen's patch merged by Jim Houston
33  */
34 #include <linux/spinlock.h>
35 #include <linux/kdebug.h>
36 #include <linux/string.h>
37 #include <linux/kernel.h>
38 #include <linux/ptrace.h>
39 #include <linux/sched.h>
40 #include <linux/delay.h>
41 #include <linux/kgdb.h>
42 #include <linux/init.h>
43 #include <linux/smp.h>
44 #include <linux/nmi.h>
45 
46 #include <asm/apicdef.h>
47 #include <asm/system.h>
48 
49 #ifdef CONFIG_X86_32
50 # include <mach_ipi.h>
51 #else
52 # include <asm/mach_apic.h>
53 #endif
54 
55 /*
56  * Put the error code here just in case the user cares:
57  */
58 static int gdb_x86errcode;
59 
60 /*
61  * Likewise, the vector number here (since GDB only gets the signal
62  * number through the usual means, and that's not very specific):
63  */
64 static int gdb_x86vector = -1;
65 
66 /**
67  *	pt_regs_to_gdb_regs - Convert ptrace regs to GDB regs
68  *	@gdb_regs: A pointer to hold the registers in the order GDB wants.
69  *	@regs: The &struct pt_regs of the current process.
70  *
71  *	Convert the pt_regs in @regs into the format for registers that
72  *	GDB expects, stored in @gdb_regs.
73  */
74 void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs)
75 {
76 	gdb_regs[GDB_AX]	= regs->ax;
77 	gdb_regs[GDB_BX]	= regs->bx;
78 	gdb_regs[GDB_CX]	= regs->cx;
79 	gdb_regs[GDB_DX]	= regs->dx;
80 	gdb_regs[GDB_SI]	= regs->si;
81 	gdb_regs[GDB_DI]	= regs->di;
82 	gdb_regs[GDB_BP]	= regs->bp;
83 	gdb_regs[GDB_PS]	= regs->flags;
84 	gdb_regs[GDB_PC]	= regs->ip;
85 #ifdef CONFIG_X86_32
86 	gdb_regs[GDB_DS]	= regs->ds;
87 	gdb_regs[GDB_ES]	= regs->es;
88 	gdb_regs[GDB_CS]	= regs->cs;
89 	gdb_regs[GDB_SS]	= __KERNEL_DS;
90 	gdb_regs[GDB_FS]	= 0xFFFF;
91 	gdb_regs[GDB_GS]	= 0xFFFF;
92 #else
93 	gdb_regs[GDB_R8]	= regs->r8;
94 	gdb_regs[GDB_R9]	= regs->r9;
95 	gdb_regs[GDB_R10]	= regs->r10;
96 	gdb_regs[GDB_R11]	= regs->r11;
97 	gdb_regs[GDB_R12]	= regs->r12;
98 	gdb_regs[GDB_R13]	= regs->r13;
99 	gdb_regs[GDB_R14]	= regs->r14;
100 	gdb_regs[GDB_R15]	= regs->r15;
101 #endif
102 	gdb_regs[GDB_SP]	= regs->sp;
103 }
104 
105 /**
106  *	sleeping_thread_to_gdb_regs - Convert ptrace regs to GDB regs
107  *	@gdb_regs: A pointer to hold the registers in the order GDB wants.
108  *	@p: The &struct task_struct of the desired process.
109  *
110  *	Convert the register values of the sleeping process in @p to
111  *	the format that GDB expects.
112  *	This function is called when kgdb does not have access to the
113  *	&struct pt_regs and therefore it should fill the gdb registers
114  *	@gdb_regs with what has	been saved in &struct thread_struct
115  *	thread field during switch_to.
116  */
117 void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p)
118 {
119 	gdb_regs[GDB_AX]	= 0;
120 	gdb_regs[GDB_BX]	= 0;
121 	gdb_regs[GDB_CX]	= 0;
122 	gdb_regs[GDB_DX]	= 0;
123 	gdb_regs[GDB_SI]	= 0;
124 	gdb_regs[GDB_DI]	= 0;
125 	gdb_regs[GDB_BP]	= *(unsigned long *)p->thread.sp;
126 #ifdef CONFIG_X86_32
127 	gdb_regs[GDB_DS]	= __KERNEL_DS;
128 	gdb_regs[GDB_ES]	= __KERNEL_DS;
129 	gdb_regs[GDB_PS]	= 0;
130 	gdb_regs[GDB_CS]	= __KERNEL_CS;
131 	gdb_regs[GDB_PC]	= p->thread.ip;
132 	gdb_regs[GDB_SS]	= __KERNEL_DS;
133 	gdb_regs[GDB_FS]	= 0xFFFF;
134 	gdb_regs[GDB_GS]	= 0xFFFF;
135 #else
136 	gdb_regs[GDB_PS]	= *(unsigned long *)(p->thread.sp + 8);
137 	gdb_regs[GDB_PC]	= 0;
138 	gdb_regs[GDB_R8]	= 0;
139 	gdb_regs[GDB_R9]	= 0;
140 	gdb_regs[GDB_R10]	= 0;
141 	gdb_regs[GDB_R11]	= 0;
142 	gdb_regs[GDB_R12]	= 0;
143 	gdb_regs[GDB_R13]	= 0;
144 	gdb_regs[GDB_R14]	= 0;
145 	gdb_regs[GDB_R15]	= 0;
146 #endif
147 	gdb_regs[GDB_SP]	= p->thread.sp;
148 }
149 
150 /**
151  *	gdb_regs_to_pt_regs - Convert GDB regs to ptrace regs.
152  *	@gdb_regs: A pointer to hold the registers we've received from GDB.
153  *	@regs: A pointer to a &struct pt_regs to hold these values in.
154  *
155  *	Convert the GDB regs in @gdb_regs into the pt_regs, and store them
156  *	in @regs.
157  */
158 void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs)
159 {
160 	regs->ax		= gdb_regs[GDB_AX];
161 	regs->bx		= gdb_regs[GDB_BX];
162 	regs->cx		= gdb_regs[GDB_CX];
163 	regs->dx		= gdb_regs[GDB_DX];
164 	regs->si		= gdb_regs[GDB_SI];
165 	regs->di		= gdb_regs[GDB_DI];
166 	regs->bp		= gdb_regs[GDB_BP];
167 	regs->flags		= gdb_regs[GDB_PS];
168 	regs->ip		= gdb_regs[GDB_PC];
169 #ifdef CONFIG_X86_32
170 	regs->ds		= gdb_regs[GDB_DS];
171 	regs->es		= gdb_regs[GDB_ES];
172 	regs->cs		= gdb_regs[GDB_CS];
173 #else
174 	regs->r8		= gdb_regs[GDB_R8];
175 	regs->r9		= gdb_regs[GDB_R9];
176 	regs->r10		= gdb_regs[GDB_R10];
177 	regs->r11		= gdb_regs[GDB_R11];
178 	regs->r12		= gdb_regs[GDB_R12];
179 	regs->r13		= gdb_regs[GDB_R13];
180 	regs->r14		= gdb_regs[GDB_R14];
181 	regs->r15		= gdb_regs[GDB_R15];
182 #endif
183 }
184 
185 static struct hw_breakpoint {
186 	unsigned		enabled;
187 	unsigned		type;
188 	unsigned		len;
189 	unsigned long		addr;
190 } breakinfo[4];
191 
192 static void kgdb_correct_hw_break(void)
193 {
194 	unsigned long dr7;
195 	int correctit = 0;
196 	int breakbit;
197 	int breakno;
198 
199 	get_debugreg(dr7, 7);
200 	for (breakno = 0; breakno < 4; breakno++) {
201 		breakbit = 2 << (breakno << 1);
202 		if (!(dr7 & breakbit) && breakinfo[breakno].enabled) {
203 			correctit = 1;
204 			dr7 |= breakbit;
205 			dr7 &= ~(0xf0000 << (breakno << 2));
206 			dr7 |= ((breakinfo[breakno].len << 2) |
207 				 breakinfo[breakno].type) <<
208 			       ((breakno << 2) + 16);
209 			if (breakno >= 0 && breakno <= 3)
210 				set_debugreg(breakinfo[breakno].addr, breakno);
211 
212 		} else {
213 			if ((dr7 & breakbit) && !breakinfo[breakno].enabled) {
214 				correctit = 1;
215 				dr7 &= ~breakbit;
216 				dr7 &= ~(0xf0000 << (breakno << 2));
217 			}
218 		}
219 	}
220 	if (correctit)
221 		set_debugreg(dr7, 7);
222 }
223 
224 static int
225 kgdb_remove_hw_break(unsigned long addr, int len, enum kgdb_bptype bptype)
226 {
227 	int i;
228 
229 	for (i = 0; i < 4; i++)
230 		if (breakinfo[i].addr == addr && breakinfo[i].enabled)
231 			break;
232 	if (i == 4)
233 		return -1;
234 
235 	breakinfo[i].enabled = 0;
236 
237 	return 0;
238 }
239 
240 static void kgdb_remove_all_hw_break(void)
241 {
242 	int i;
243 
244 	for (i = 0; i < 4; i++)
245 		memset(&breakinfo[i], 0, sizeof(struct hw_breakpoint));
246 }
247 
248 static int
249 kgdb_set_hw_break(unsigned long addr, int len, enum kgdb_bptype bptype)
250 {
251 	unsigned type;
252 	int i;
253 
254 	for (i = 0; i < 4; i++)
255 		if (!breakinfo[i].enabled)
256 			break;
257 	if (i == 4)
258 		return -1;
259 
260 	switch (bptype) {
261 	case BP_HARDWARE_BREAKPOINT:
262 		type = 0;
263 		len  = 1;
264 		break;
265 	case BP_WRITE_WATCHPOINT:
266 		type = 1;
267 		break;
268 	case BP_ACCESS_WATCHPOINT:
269 		type = 3;
270 		break;
271 	default:
272 		return -1;
273 	}
274 
275 	if (len == 1 || len == 2 || len == 4)
276 		breakinfo[i].len  = len - 1;
277 	else
278 		return -1;
279 
280 	breakinfo[i].enabled = 1;
281 	breakinfo[i].addr = addr;
282 	breakinfo[i].type = type;
283 
284 	return 0;
285 }
286 
287 /**
288  *	kgdb_disable_hw_debug - Disable hardware debugging while we in kgdb.
289  *	@regs: Current &struct pt_regs.
290  *
291  *	This function will be called if the particular architecture must
292  *	disable hardware debugging while it is processing gdb packets or
293  *	handling exception.
294  */
295 void kgdb_disable_hw_debug(struct pt_regs *regs)
296 {
297 	/* Disable hardware debugging while we are in kgdb: */
298 	set_debugreg(0UL, 7);
299 }
300 
301 /**
302  *	kgdb_post_primary_code - Save error vector/code numbers.
303  *	@regs: Original pt_regs.
304  *	@e_vector: Original error vector.
305  *	@err_code: Original error code.
306  *
307  *	This is needed on architectures which support SMP and KGDB.
308  *	This function is called after all the slave cpus have been put
309  *	to a know spin state and the primary CPU has control over KGDB.
310  */
311 void kgdb_post_primary_code(struct pt_regs *regs, int e_vector, int err_code)
312 {
313 	/* primary processor is completely in the debugger */
314 	gdb_x86vector = e_vector;
315 	gdb_x86errcode = err_code;
316 }
317 
318 #ifdef CONFIG_SMP
319 /**
320  *	kgdb_roundup_cpus - Get other CPUs into a holding pattern
321  *	@flags: Current IRQ state
322  *
323  *	On SMP systems, we need to get the attention of the other CPUs
324  *	and get them be in a known state.  This should do what is needed
325  *	to get the other CPUs to call kgdb_wait(). Note that on some arches,
326  *	the NMI approach is not used for rounding up all the CPUs. For example,
327  *	in case of MIPS, smp_call_function() is used to roundup CPUs. In
328  *	this case, we have to make sure that interrupts are enabled before
329  *	calling smp_call_function(). The argument to this function is
330  *	the flags that will be used when restoring the interrupts. There is
331  *	local_irq_save() call before kgdb_roundup_cpus().
332  *
333  *	On non-SMP systems, this is not called.
334  */
335 void kgdb_roundup_cpus(unsigned long flags)
336 {
337 	send_IPI_allbutself(APIC_DM_NMI);
338 }
339 #endif
340 
341 /**
342  *	kgdb_arch_handle_exception - Handle architecture specific GDB packets.
343  *	@vector: The error vector of the exception that happened.
344  *	@signo: The signal number of the exception that happened.
345  *	@err_code: The error code of the exception that happened.
346  *	@remcom_in_buffer: The buffer of the packet we have read.
347  *	@remcom_out_buffer: The buffer of %BUFMAX bytes to write a packet into.
348  *	@regs: The &struct pt_regs of the current process.
349  *
350  *	This function MUST handle the 'c' and 's' command packets,
351  *	as well packets to set / remove a hardware breakpoint, if used.
352  *	If there are additional packets which the hardware needs to handle,
353  *	they are handled here.  The code should return -1 if it wants to
354  *	process more packets, and a %0 or %1 if it wants to exit from the
355  *	kgdb callback.
356  */
357 int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,
358 			       char *remcomInBuffer, char *remcomOutBuffer,
359 			       struct pt_regs *linux_regs)
360 {
361 	unsigned long addr;
362 	unsigned long dr6;
363 	char *ptr;
364 	int newPC;
365 
366 	switch (remcomInBuffer[0]) {
367 	case 'c':
368 	case 's':
369 		/* try to read optional parameter, pc unchanged if no parm */
370 		ptr = &remcomInBuffer[1];
371 		if (kgdb_hex2long(&ptr, &addr))
372 			linux_regs->ip = addr;
373 	case 'D':
374 	case 'k':
375 		newPC = linux_regs->ip;
376 
377 		/* clear the trace bit */
378 		linux_regs->flags &= ~X86_EFLAGS_TF;
379 		atomic_set(&kgdb_cpu_doing_single_step, -1);
380 
381 		/* set the trace bit if we're stepping */
382 		if (remcomInBuffer[0] == 's') {
383 			linux_regs->flags |= X86_EFLAGS_TF;
384 			kgdb_single_step = 1;
385 			if (kgdb_contthread) {
386 				atomic_set(&kgdb_cpu_doing_single_step,
387 					   raw_smp_processor_id());
388 			}
389 		}
390 
391 		get_debugreg(dr6, 6);
392 		if (!(dr6 & 0x4000)) {
393 			int breakno;
394 
395 			for (breakno = 0; breakno < 4; breakno++) {
396 				if (dr6 & (1 << breakno) &&
397 				    breakinfo[breakno].type == 0) {
398 					/* Set restore flag: */
399 					linux_regs->flags |= X86_EFLAGS_RF;
400 					break;
401 				}
402 			}
403 		}
404 		set_debugreg(0UL, 6);
405 		kgdb_correct_hw_break();
406 
407 		return 0;
408 	}
409 
410 	/* this means that we do not want to exit from the handler: */
411 	return -1;
412 }
413 
414 static inline int
415 single_step_cont(struct pt_regs *regs, struct die_args *args)
416 {
417 	/*
418 	 * Single step exception from kernel space to user space so
419 	 * eat the exception and continue the process:
420 	 */
421 	printk(KERN_ERR "KGDB: trap/step from kernel to user space, "
422 			"resuming...\n");
423 	kgdb_arch_handle_exception(args->trapnr, args->signr,
424 				   args->err, "c", "", regs);
425 
426 	return NOTIFY_STOP;
427 }
428 
429 static int was_in_debug_nmi[NR_CPUS];
430 
431 static int __kgdb_notify(struct die_args *args, unsigned long cmd)
432 {
433 	struct pt_regs *regs = args->regs;
434 
435 	switch (cmd) {
436 	case DIE_NMI:
437 		if (atomic_read(&kgdb_active) != -1) {
438 			/* KGDB CPU roundup */
439 			kgdb_nmicallback(raw_smp_processor_id(), regs);
440 			was_in_debug_nmi[raw_smp_processor_id()] = 1;
441 			touch_nmi_watchdog();
442 			return NOTIFY_STOP;
443 		}
444 		return NOTIFY_DONE;
445 
446 	case DIE_NMI_IPI:
447 		if (atomic_read(&kgdb_active) != -1) {
448 			/* KGDB CPU roundup */
449 			kgdb_nmicallback(raw_smp_processor_id(), regs);
450 			was_in_debug_nmi[raw_smp_processor_id()] = 1;
451 			touch_nmi_watchdog();
452 		}
453 		return NOTIFY_DONE;
454 
455 	case DIE_NMIUNKNOWN:
456 		if (was_in_debug_nmi[raw_smp_processor_id()]) {
457 			was_in_debug_nmi[raw_smp_processor_id()] = 0;
458 			return NOTIFY_STOP;
459 		}
460 		return NOTIFY_DONE;
461 
462 	case DIE_NMIWATCHDOG:
463 		if (atomic_read(&kgdb_active) != -1) {
464 			/* KGDB CPU roundup: */
465 			kgdb_nmicallback(raw_smp_processor_id(), regs);
466 			return NOTIFY_STOP;
467 		}
468 		/* Enter debugger: */
469 		break;
470 
471 	case DIE_DEBUG:
472 		if (atomic_read(&kgdb_cpu_doing_single_step) ==
473 			raw_smp_processor_id() &&
474 			user_mode(regs))
475 			return single_step_cont(regs, args);
476 		/* fall through */
477 	default:
478 		if (user_mode(regs))
479 			return NOTIFY_DONE;
480 	}
481 
482 	if (kgdb_handle_exception(args->trapnr, args->signr, args->err, regs))
483 		return NOTIFY_DONE;
484 
485 	/* Must touch watchdog before return to normal operation */
486 	touch_nmi_watchdog();
487 	return NOTIFY_STOP;
488 }
489 
490 static int
491 kgdb_notify(struct notifier_block *self, unsigned long cmd, void *ptr)
492 {
493 	unsigned long flags;
494 	int ret;
495 
496 	local_irq_save(flags);
497 	ret = __kgdb_notify(ptr, cmd);
498 	local_irq_restore(flags);
499 
500 	return ret;
501 }
502 
503 static struct notifier_block kgdb_notifier = {
504 	.notifier_call	= kgdb_notify,
505 
506 	/*
507 	 * Lowest-prio notifier priority, we want to be notified last:
508 	 */
509 	.priority	= -INT_MAX,
510 };
511 
512 /**
513  *	kgdb_arch_init - Perform any architecture specific initalization.
514  *
515  *	This function will handle the initalization of any architecture
516  *	specific callbacks.
517  */
518 int kgdb_arch_init(void)
519 {
520 	return register_die_notifier(&kgdb_notifier);
521 }
522 
523 /**
524  *	kgdb_arch_exit - Perform any architecture specific uninitalization.
525  *
526  *	This function will handle the uninitalization of any architecture
527  *	specific callbacks, for dynamic registration and unregistration.
528  */
529 void kgdb_arch_exit(void)
530 {
531 	unregister_die_notifier(&kgdb_notifier);
532 }
533 
534 /**
535  *
536  *	kgdb_skipexception - Bail out of KGDB when we've been triggered.
537  *	@exception: Exception vector number
538  *	@regs: Current &struct pt_regs.
539  *
540  *	On some architectures we need to skip a breakpoint exception when
541  *	it occurs after a breakpoint has been removed.
542  *
543  * Skip an int3 exception when it occurs after a breakpoint has been
544  * removed. Backtrack eip by 1 since the int3 would have caused it to
545  * increment by 1.
546  */
547 int kgdb_skipexception(int exception, struct pt_regs *regs)
548 {
549 	if (exception == 3 && kgdb_isremovedbreak(regs->ip - 1)) {
550 		regs->ip -= 1;
551 		return 1;
552 	}
553 	return 0;
554 }
555 
556 unsigned long kgdb_arch_pc(int exception, struct pt_regs *regs)
557 {
558 	if (exception == 3)
559 		return instruction_pointer(regs) - 1;
560 	return instruction_pointer(regs);
561 }
562 
563 struct kgdb_arch arch_kgdb_ops = {
564 	/* Breakpoint instruction: */
565 	.gdb_bpt_instr		= { 0xcc },
566 	.flags			= KGDB_HW_BREAKPOINT,
567 	.set_hw_breakpoint	= kgdb_set_hw_break,
568 	.remove_hw_breakpoint	= kgdb_remove_hw_break,
569 	.remove_all_hw_break	= kgdb_remove_all_hw_break,
570 	.correct_hw_break	= kgdb_correct_hw_break,
571 };
572