1 /*
2  * Kernel Debugger Architecture Independent Main Code
3  *
4  * This file is subject to the terms and conditions of the GNU General Public
5  * License.  See the file "COPYING" in the main directory of this archive
6  * for more details.
7  *
8  * Copyright (C) 1999-2004 Silicon Graphics, Inc.  All Rights Reserved.
9  * Copyright (C) 2000 Stephane Eranian <eranian@hpl.hp.com>
10  * Xscale (R) modifications copyright (C) 2003 Intel Corporation.
11  * Copyright (c) 2009 Wind River Systems, Inc.  All Rights Reserved.
12  */
13 
14 #include <linux/ctype.h>
15 #include <linux/types.h>
16 #include <linux/string.h>
17 #include <linux/kernel.h>
18 #include <linux/kmsg_dump.h>
19 #include <linux/reboot.h>
20 #include <linux/sched.h>
21 #include <linux/sched/loadavg.h>
22 #include <linux/sched/stat.h>
23 #include <linux/sched/debug.h>
24 #include <linux/sysrq.h>
25 #include <linux/smp.h>
26 #include <linux/utsname.h>
27 #include <linux/vmalloc.h>
28 #include <linux/atomic.h>
29 #include <linux/moduleparam.h>
30 #include <linux/mm.h>
31 #include <linux/init.h>
32 #include <linux/kallsyms.h>
33 #include <linux/kgdb.h>
34 #include <linux/kdb.h>
35 #include <linux/notifier.h>
36 #include <linux/interrupt.h>
37 #include <linux/delay.h>
38 #include <linux/nmi.h>
39 #include <linux/time.h>
40 #include <linux/ptrace.h>
41 #include <linux/sysctl.h>
42 #include <linux/cpu.h>
43 #include <linux/kdebug.h>
44 #include <linux/proc_fs.h>
45 #include <linux/uaccess.h>
46 #include <linux/slab.h>
47 #include <linux/security.h>
48 #include "kdb_private.h"
49 
50 #undef	MODULE_PARAM_PREFIX
51 #define	MODULE_PARAM_PREFIX "kdb."
52 
53 static int kdb_cmd_enabled = CONFIG_KDB_DEFAULT_ENABLE;
54 module_param_named(cmd_enable, kdb_cmd_enabled, int, 0600);
55 
56 char kdb_grep_string[KDB_GREP_STRLEN];
57 int kdb_grepping_flag;
58 EXPORT_SYMBOL(kdb_grepping_flag);
59 int kdb_grep_leading;
60 int kdb_grep_trailing;
61 
62 /*
63  * Kernel debugger state flags
64  */
65 unsigned int kdb_flags;
66 
67 /*
68  * kdb_lock protects updates to kdb_initial_cpu.  Used to
69  * single thread processors through the kernel debugger.
70  */
71 int kdb_initial_cpu = -1;	/* cpu number that owns kdb */
72 int kdb_nextline = 1;
73 int kdb_state;			/* General KDB state */
74 
75 struct task_struct *kdb_current_task;
76 struct pt_regs *kdb_current_regs;
77 
78 const char *kdb_diemsg;
79 static int kdb_go_count;
80 #ifdef CONFIG_KDB_CONTINUE_CATASTROPHIC
81 static unsigned int kdb_continue_catastrophic =
82 	CONFIG_KDB_CONTINUE_CATASTROPHIC;
83 #else
84 static unsigned int kdb_continue_catastrophic;
85 #endif
86 
87 /* kdb_cmds_head describes the available commands. */
88 static LIST_HEAD(kdb_cmds_head);
89 
90 typedef struct _kdbmsg {
91 	int	km_diag;	/* kdb diagnostic */
92 	char	*km_msg;	/* Corresponding message text */
93 } kdbmsg_t;
94 
95 #define KDBMSG(msgnum, text) \
96 	{ KDB_##msgnum, text }
97 
98 static kdbmsg_t kdbmsgs[] = {
99 	KDBMSG(NOTFOUND, "Command Not Found"),
100 	KDBMSG(ARGCOUNT, "Improper argument count, see usage."),
101 	KDBMSG(BADWIDTH, "Illegal value for BYTESPERWORD use 1, 2, 4 or 8, "
102 	       "8 is only allowed on 64 bit systems"),
103 	KDBMSG(BADRADIX, "Illegal value for RADIX use 8, 10 or 16"),
104 	KDBMSG(NOTENV, "Cannot find environment variable"),
105 	KDBMSG(NOENVVALUE, "Environment variable should have value"),
106 	KDBMSG(NOTIMP, "Command not implemented"),
107 	KDBMSG(ENVFULL, "Environment full"),
108 	KDBMSG(ENVBUFFULL, "Environment buffer full"),
109 	KDBMSG(TOOMANYBPT, "Too many breakpoints defined"),
110 #ifdef CONFIG_CPU_XSCALE
111 	KDBMSG(TOOMANYDBREGS, "More breakpoints than ibcr registers defined"),
112 #else
113 	KDBMSG(TOOMANYDBREGS, "More breakpoints than db registers defined"),
114 #endif
115 	KDBMSG(DUPBPT, "Duplicate breakpoint address"),
116 	KDBMSG(BPTNOTFOUND, "Breakpoint not found"),
117 	KDBMSG(BADMODE, "Invalid IDMODE"),
118 	KDBMSG(BADINT, "Illegal numeric value"),
119 	KDBMSG(INVADDRFMT, "Invalid symbolic address format"),
120 	KDBMSG(BADREG, "Invalid register name"),
121 	KDBMSG(BADCPUNUM, "Invalid cpu number"),
122 	KDBMSG(BADLENGTH, "Invalid length field"),
123 	KDBMSG(NOBP, "No Breakpoint exists"),
124 	KDBMSG(BADADDR, "Invalid address"),
125 	KDBMSG(NOPERM, "Permission denied"),
126 };
127 #undef KDBMSG
128 
129 static const int __nkdb_err = ARRAY_SIZE(kdbmsgs);
130 
131 
132 /*
133  * Initial environment.   This is all kept static and local to
134  * this file.   We don't want to rely on the memory allocation
135  * mechanisms in the kernel, so we use a very limited allocate-only
136  * heap for new and altered environment variables.  The entire
137  * environment is limited to a fixed number of entries (add more
138  * to __env[] if required) and a fixed amount of heap (add more to
139  * KDB_ENVBUFSIZE if required).
140  */
141 
142 static char *__env[31] = {
143 #if defined(CONFIG_SMP)
144 	"PROMPT=[%d]kdb> ",
145 #else
146 	"PROMPT=kdb> ",
147 #endif
148 	"MOREPROMPT=more> ",
149 	"RADIX=16",
150 	"MDCOUNT=8",		/* lines of md output */
151 	KDB_PLATFORM_ENV,
152 	"DTABCOUNT=30",
153 	"NOSECT=1",
154 };
155 
156 static const int __nenv = ARRAY_SIZE(__env);
157 
158 /*
159  * Update the permissions flags (kdb_cmd_enabled) to match the
160  * current lockdown state.
161  *
162  * Within this function the calls to security_locked_down() are "lazy". We
163  * avoid calling them if the current value of kdb_cmd_enabled already excludes
164  * flags that might be subject to lockdown. Additionally we deliberately check
165  * the lockdown flags independently (even though read lockdown implies write
166  * lockdown) since that results in both simpler code and clearer messages to
167  * the user on first-time debugger entry.
168  *
169  * The permission masks during a read+write lockdown permits the following
170  * flags: INSPECT, SIGNAL, REBOOT (and ALWAYS_SAFE).
171  *
172  * The INSPECT commands are not blocked during lockdown because they are
173  * not arbitrary memory reads. INSPECT covers the backtrace family (sometimes
174  * forcing them to have no arguments) and lsmod. These commands do expose
175  * some kernel state but do not allow the developer seated at the console to
176  * choose what state is reported. SIGNAL and REBOOT should not be controversial,
177  * given these are allowed for root during lockdown already.
178  */
kdb_check_for_lockdown(void)179 static void kdb_check_for_lockdown(void)
180 {
181 	const int write_flags = KDB_ENABLE_MEM_WRITE |
182 				KDB_ENABLE_REG_WRITE |
183 				KDB_ENABLE_FLOW_CTRL;
184 	const int read_flags = KDB_ENABLE_MEM_READ |
185 			       KDB_ENABLE_REG_READ;
186 
187 	bool need_to_lockdown_write = false;
188 	bool need_to_lockdown_read = false;
189 
190 	if (kdb_cmd_enabled & (KDB_ENABLE_ALL | write_flags))
191 		need_to_lockdown_write =
192 			security_locked_down(LOCKDOWN_DBG_WRITE_KERNEL);
193 
194 	if (kdb_cmd_enabled & (KDB_ENABLE_ALL | read_flags))
195 		need_to_lockdown_read =
196 			security_locked_down(LOCKDOWN_DBG_READ_KERNEL);
197 
198 	/* De-compose KDB_ENABLE_ALL if required */
199 	if (need_to_lockdown_write || need_to_lockdown_read)
200 		if (kdb_cmd_enabled & KDB_ENABLE_ALL)
201 			kdb_cmd_enabled = KDB_ENABLE_MASK & ~KDB_ENABLE_ALL;
202 
203 	if (need_to_lockdown_write)
204 		kdb_cmd_enabled &= ~write_flags;
205 
206 	if (need_to_lockdown_read)
207 		kdb_cmd_enabled &= ~read_flags;
208 }
209 
210 /*
211  * Check whether the flags of the current command, the permissions of the kdb
212  * console and the lockdown state allow a command to be run.
213  */
kdb_check_flags(kdb_cmdflags_t flags,int permissions,bool no_args)214 static bool kdb_check_flags(kdb_cmdflags_t flags, int permissions,
215 				   bool no_args)
216 {
217 	/* permissions comes from userspace so needs massaging slightly */
218 	permissions &= KDB_ENABLE_MASK;
219 	permissions |= KDB_ENABLE_ALWAYS_SAFE;
220 
221 	/* some commands change group when launched with no arguments */
222 	if (no_args)
223 		permissions |= permissions << KDB_ENABLE_NO_ARGS_SHIFT;
224 
225 	flags |= KDB_ENABLE_ALL;
226 
227 	return permissions & flags;
228 }
229 
230 /*
231  * kdbgetenv - This function will return the character string value of
232  *	an environment variable.
233  * Parameters:
234  *	match	A character string representing an environment variable.
235  * Returns:
236  *	NULL	No environment variable matches 'match'
237  *	char*	Pointer to string value of environment variable.
238  */
kdbgetenv(const char * match)239 char *kdbgetenv(const char *match)
240 {
241 	char **ep = __env;
242 	int matchlen = strlen(match);
243 	int i;
244 
245 	for (i = 0; i < __nenv; i++) {
246 		char *e = *ep++;
247 
248 		if (!e)
249 			continue;
250 
251 		if ((strncmp(match, e, matchlen) == 0)
252 		 && ((e[matchlen] == '\0')
253 		   || (e[matchlen] == '='))) {
254 			char *cp = strchr(e, '=');
255 			return cp ? ++cp : "";
256 		}
257 	}
258 	return NULL;
259 }
260 
261 /*
262  * kdballocenv - This function is used to allocate bytes for
263  *	environment entries.
264  * Parameters:
265  *	bytes	The number of bytes to allocate in the static buffer.
266  * Returns:
267  *	A pointer to the allocated space in the buffer on success.
268  *	NULL if bytes > size available in the envbuffer.
269  * Remarks:
270  *	We use a static environment buffer (envbuffer) to hold the values
271  *	of dynamically generated environment variables (see kdb_set).  Buffer
272  *	space once allocated is never free'd, so over time, the amount of space
273  *	(currently 512 bytes) will be exhausted if env variables are changed
274  *	frequently.
275  */
kdballocenv(size_t bytes)276 static char *kdballocenv(size_t bytes)
277 {
278 #define	KDB_ENVBUFSIZE	512
279 	static char envbuffer[KDB_ENVBUFSIZE];
280 	static int envbufsize;
281 	char *ep = NULL;
282 
283 	if ((KDB_ENVBUFSIZE - envbufsize) >= bytes) {
284 		ep = &envbuffer[envbufsize];
285 		envbufsize += bytes;
286 	}
287 	return ep;
288 }
289 
290 /*
291  * kdbgetulenv - This function will return the value of an unsigned
292  *	long-valued environment variable.
293  * Parameters:
294  *	match	A character string representing a numeric value
295  * Outputs:
296  *	*value  the unsigned long representation of the env variable 'match'
297  * Returns:
298  *	Zero on success, a kdb diagnostic on failure.
299  */
kdbgetulenv(const char * match,unsigned long * value)300 static int kdbgetulenv(const char *match, unsigned long *value)
301 {
302 	char *ep;
303 
304 	ep = kdbgetenv(match);
305 	if (!ep)
306 		return KDB_NOTENV;
307 	if (strlen(ep) == 0)
308 		return KDB_NOENVVALUE;
309 
310 	*value = simple_strtoul(ep, NULL, 0);
311 
312 	return 0;
313 }
314 
315 /*
316  * kdbgetintenv - This function will return the value of an
317  *	integer-valued environment variable.
318  * Parameters:
319  *	match	A character string representing an integer-valued env variable
320  * Outputs:
321  *	*value  the integer representation of the environment variable 'match'
322  * Returns:
323  *	Zero on success, a kdb diagnostic on failure.
324  */
kdbgetintenv(const char * match,int * value)325 int kdbgetintenv(const char *match, int *value)
326 {
327 	unsigned long val;
328 	int diag;
329 
330 	diag = kdbgetulenv(match, &val);
331 	if (!diag)
332 		*value = (int) val;
333 	return diag;
334 }
335 
336 /*
337  * kdb_setenv() - Alter an existing environment variable or create a new one.
338  * @var: Name of the variable
339  * @val: Value of the variable
340  *
341  * Return: Zero on success, a kdb diagnostic on failure.
342  */
kdb_setenv(const char * var,const char * val)343 static int kdb_setenv(const char *var, const char *val)
344 {
345 	int i;
346 	char *ep;
347 	size_t varlen, vallen;
348 
349 	varlen = strlen(var);
350 	vallen = strlen(val);
351 	ep = kdballocenv(varlen + vallen + 2);
352 	if (ep == (char *)0)
353 		return KDB_ENVBUFFULL;
354 
355 	sprintf(ep, "%s=%s", var, val);
356 
357 	for (i = 0; i < __nenv; i++) {
358 		if (__env[i]
359 		 && ((strncmp(__env[i], var, varlen) == 0)
360 		   && ((__env[i][varlen] == '\0')
361 		    || (__env[i][varlen] == '=')))) {
362 			__env[i] = ep;
363 			return 0;
364 		}
365 	}
366 
367 	/*
368 	 * Wasn't existing variable.  Fit into slot.
369 	 */
370 	for (i = 0; i < __nenv-1; i++) {
371 		if (__env[i] == (char *)0) {
372 			__env[i] = ep;
373 			return 0;
374 		}
375 	}
376 
377 	return KDB_ENVFULL;
378 }
379 
380 /*
381  * kdb_printenv() - Display the current environment variables.
382  */
kdb_printenv(void)383 static void kdb_printenv(void)
384 {
385 	int i;
386 
387 	for (i = 0; i < __nenv; i++) {
388 		if (__env[i])
389 			kdb_printf("%s\n", __env[i]);
390 	}
391 }
392 
393 /*
394  * kdbgetularg - This function will convert a numeric string into an
395  *	unsigned long value.
396  * Parameters:
397  *	arg	A character string representing a numeric value
398  * Outputs:
399  *	*value  the unsigned long representation of arg.
400  * Returns:
401  *	Zero on success, a kdb diagnostic on failure.
402  */
kdbgetularg(const char * arg,unsigned long * value)403 int kdbgetularg(const char *arg, unsigned long *value)
404 {
405 	char *endp;
406 	unsigned long val;
407 
408 	val = simple_strtoul(arg, &endp, 0);
409 
410 	if (endp == arg) {
411 		/*
412 		 * Also try base 16, for us folks too lazy to type the
413 		 * leading 0x...
414 		 */
415 		val = simple_strtoul(arg, &endp, 16);
416 		if (endp == arg)
417 			return KDB_BADINT;
418 	}
419 
420 	*value = val;
421 
422 	return 0;
423 }
424 
kdbgetu64arg(const char * arg,u64 * value)425 int kdbgetu64arg(const char *arg, u64 *value)
426 {
427 	char *endp;
428 	u64 val;
429 
430 	val = simple_strtoull(arg, &endp, 0);
431 
432 	if (endp == arg) {
433 
434 		val = simple_strtoull(arg, &endp, 16);
435 		if (endp == arg)
436 			return KDB_BADINT;
437 	}
438 
439 	*value = val;
440 
441 	return 0;
442 }
443 
444 /*
445  * kdb_set - This function implements the 'set' command.  Alter an
446  *	existing environment variable or create a new one.
447  */
kdb_set(int argc,const char ** argv)448 int kdb_set(int argc, const char **argv)
449 {
450 	/*
451 	 * we can be invoked two ways:
452 	 *   set var=value    argv[1]="var", argv[2]="value"
453 	 *   set var = value  argv[1]="var", argv[2]="=", argv[3]="value"
454 	 * - if the latter, shift 'em down.
455 	 */
456 	if (argc == 3) {
457 		argv[2] = argv[3];
458 		argc--;
459 	}
460 
461 	if (argc != 2)
462 		return KDB_ARGCOUNT;
463 
464 	/*
465 	 * Censor sensitive variables
466 	 */
467 	if (strcmp(argv[1], "PROMPT") == 0 &&
468 	    !kdb_check_flags(KDB_ENABLE_MEM_READ, kdb_cmd_enabled, false))
469 		return KDB_NOPERM;
470 
471 	/*
472 	 * Check for internal variables
473 	 */
474 	if (strcmp(argv[1], "KDBDEBUG") == 0) {
475 		unsigned int debugflags;
476 		char *cp;
477 
478 		debugflags = simple_strtoul(argv[2], &cp, 0);
479 		if (cp == argv[2] || debugflags & ~KDB_DEBUG_FLAG_MASK) {
480 			kdb_printf("kdb: illegal debug flags '%s'\n",
481 				    argv[2]);
482 			return 0;
483 		}
484 		kdb_flags = (kdb_flags & ~KDB_DEBUG(MASK))
485 			| (debugflags << KDB_DEBUG_FLAG_SHIFT);
486 
487 		return 0;
488 	}
489 
490 	/*
491 	 * Tokenizer squashed the '=' sign.  argv[1] is variable
492 	 * name, argv[2] = value.
493 	 */
494 	return kdb_setenv(argv[1], argv[2]);
495 }
496 
kdb_check_regs(void)497 static int kdb_check_regs(void)
498 {
499 	if (!kdb_current_regs) {
500 		kdb_printf("No current kdb registers."
501 			   "  You may need to select another task\n");
502 		return KDB_BADREG;
503 	}
504 	return 0;
505 }
506 
507 /*
508  * kdbgetaddrarg - This function is responsible for parsing an
509  *	address-expression and returning the value of the expression,
510  *	symbol name, and offset to the caller.
511  *
512  *	The argument may consist of a numeric value (decimal or
513  *	hexadecimal), a symbol name, a register name (preceded by the
514  *	percent sign), an environment variable with a numeric value
515  *	(preceded by a dollar sign) or a simple arithmetic expression
516  *	consisting of a symbol name, +/-, and a numeric constant value
517  *	(offset).
518  * Parameters:
519  *	argc	- count of arguments in argv
520  *	argv	- argument vector
521  *	*nextarg - index to next unparsed argument in argv[]
522  *	regs	- Register state at time of KDB entry
523  * Outputs:
524  *	*value	- receives the value of the address-expression
525  *	*offset - receives the offset specified, if any
526  *	*name   - receives the symbol name, if any
527  *	*nextarg - index to next unparsed argument in argv[]
528  * Returns:
529  *	zero is returned on success, a kdb diagnostic code is
530  *      returned on error.
531  */
kdbgetaddrarg(int argc,const char ** argv,int * nextarg,unsigned long * value,long * offset,char ** name)532 int kdbgetaddrarg(int argc, const char **argv, int *nextarg,
533 		  unsigned long *value,  long *offset,
534 		  char **name)
535 {
536 	unsigned long addr;
537 	unsigned long off = 0;
538 	int positive;
539 	int diag;
540 	int found = 0;
541 	char *symname;
542 	char symbol = '\0';
543 	char *cp;
544 	kdb_symtab_t symtab;
545 
546 	/*
547 	 * If the enable flags prohibit both arbitrary memory access
548 	 * and flow control then there are no reasonable grounds to
549 	 * provide symbol lookup.
550 	 */
551 	if (!kdb_check_flags(KDB_ENABLE_MEM_READ | KDB_ENABLE_FLOW_CTRL,
552 			     kdb_cmd_enabled, false))
553 		return KDB_NOPERM;
554 
555 	/*
556 	 * Process arguments which follow the following syntax:
557 	 *
558 	 *  symbol | numeric-address [+/- numeric-offset]
559 	 *  %register
560 	 *  $environment-variable
561 	 */
562 
563 	if (*nextarg > argc)
564 		return KDB_ARGCOUNT;
565 
566 	symname = (char *)argv[*nextarg];
567 
568 	/*
569 	 * If there is no whitespace between the symbol
570 	 * or address and the '+' or '-' symbols, we
571 	 * remember the character and replace it with a
572 	 * null so the symbol/value can be properly parsed
573 	 */
574 	cp = strpbrk(symname, "+-");
575 	if (cp != NULL) {
576 		symbol = *cp;
577 		*cp++ = '\0';
578 	}
579 
580 	if (symname[0] == '$') {
581 		diag = kdbgetulenv(&symname[1], &addr);
582 		if (diag)
583 			return diag;
584 	} else if (symname[0] == '%') {
585 		diag = kdb_check_regs();
586 		if (diag)
587 			return diag;
588 		/* Implement register values with % at a later time as it is
589 		 * arch optional.
590 		 */
591 		return KDB_NOTIMP;
592 	} else {
593 		found = kdbgetsymval(symname, &symtab);
594 		if (found) {
595 			addr = symtab.sym_start;
596 		} else {
597 			diag = kdbgetularg(argv[*nextarg], &addr);
598 			if (diag)
599 				return diag;
600 		}
601 	}
602 
603 	if (!found)
604 		found = kdbnearsym(addr, &symtab);
605 
606 	(*nextarg)++;
607 
608 	if (name)
609 		*name = symname;
610 	if (value)
611 		*value = addr;
612 	if (offset && name && *name)
613 		*offset = addr - symtab.sym_start;
614 
615 	if ((*nextarg > argc)
616 	 && (symbol == '\0'))
617 		return 0;
618 
619 	/*
620 	 * check for +/- and offset
621 	 */
622 
623 	if (symbol == '\0') {
624 		if ((argv[*nextarg][0] != '+')
625 		 && (argv[*nextarg][0] != '-')) {
626 			/*
627 			 * Not our argument.  Return.
628 			 */
629 			return 0;
630 		} else {
631 			positive = (argv[*nextarg][0] == '+');
632 			(*nextarg)++;
633 		}
634 	} else
635 		positive = (symbol == '+');
636 
637 	/*
638 	 * Now there must be an offset!
639 	 */
640 	if ((*nextarg > argc)
641 	 && (symbol == '\0')) {
642 		return KDB_INVADDRFMT;
643 	}
644 
645 	if (!symbol) {
646 		cp = (char *)argv[*nextarg];
647 		(*nextarg)++;
648 	}
649 
650 	diag = kdbgetularg(cp, &off);
651 	if (diag)
652 		return diag;
653 
654 	if (!positive)
655 		off = -off;
656 
657 	if (offset)
658 		*offset += off;
659 
660 	if (value)
661 		*value += off;
662 
663 	return 0;
664 }
665 
kdb_cmderror(int diag)666 static void kdb_cmderror(int diag)
667 {
668 	int i;
669 
670 	if (diag >= 0) {
671 		kdb_printf("no error detected (diagnostic is %d)\n", diag);
672 		return;
673 	}
674 
675 	for (i = 0; i < __nkdb_err; i++) {
676 		if (kdbmsgs[i].km_diag == diag) {
677 			kdb_printf("diag: %d: %s\n", diag, kdbmsgs[i].km_msg);
678 			return;
679 		}
680 	}
681 
682 	kdb_printf("Unknown diag %d\n", -diag);
683 }
684 
685 /*
686  * kdb_defcmd, kdb_defcmd2 - This function implements the 'defcmd'
687  *	command which defines one command as a set of other commands,
688  *	terminated by endefcmd.  kdb_defcmd processes the initial
689  *	'defcmd' command, kdb_defcmd2 is invoked from kdb_parse for
690  *	the following commands until 'endefcmd'.
691  * Inputs:
692  *	argc	argument count
693  *	argv	argument vector
694  * Returns:
695  *	zero for success, a kdb diagnostic if error
696  */
697 struct kdb_macro {
698 	kdbtab_t cmd;			/* Macro command */
699 	struct list_head statements;	/* Associated statement list */
700 };
701 
702 struct kdb_macro_statement {
703 	char *statement;		/* Statement text */
704 	struct list_head list_node;	/* Statement list node */
705 };
706 
707 static struct kdb_macro *kdb_macro;
708 static bool defcmd_in_progress;
709 
710 /* Forward references */
711 static int kdb_exec_defcmd(int argc, const char **argv);
712 
kdb_defcmd2(const char * cmdstr,const char * argv0)713 static int kdb_defcmd2(const char *cmdstr, const char *argv0)
714 {
715 	struct kdb_macro_statement *kms;
716 
717 	if (!kdb_macro)
718 		return KDB_NOTIMP;
719 
720 	if (strcmp(argv0, "endefcmd") == 0) {
721 		defcmd_in_progress = false;
722 		if (!list_empty(&kdb_macro->statements))
723 			kdb_register(&kdb_macro->cmd);
724 		return 0;
725 	}
726 
727 	kms = kmalloc(sizeof(*kms), GFP_KDB);
728 	if (!kms) {
729 		kdb_printf("Could not allocate new kdb macro command: %s\n",
730 			   cmdstr);
731 		return KDB_NOTIMP;
732 	}
733 
734 	kms->statement = kdb_strdup(cmdstr, GFP_KDB);
735 	list_add_tail(&kms->list_node, &kdb_macro->statements);
736 
737 	return 0;
738 }
739 
kdb_defcmd(int argc,const char ** argv)740 static int kdb_defcmd(int argc, const char **argv)
741 {
742 	kdbtab_t *mp;
743 
744 	if (defcmd_in_progress) {
745 		kdb_printf("kdb: nested defcmd detected, assuming missing "
746 			   "endefcmd\n");
747 		kdb_defcmd2("endefcmd", "endefcmd");
748 	}
749 	if (argc == 0) {
750 		kdbtab_t *kp;
751 		struct kdb_macro *kmp;
752 		struct kdb_macro_statement *kms;
753 
754 		list_for_each_entry(kp, &kdb_cmds_head, list_node) {
755 			if (kp->func == kdb_exec_defcmd) {
756 				kdb_printf("defcmd %s \"%s\" \"%s\"\n",
757 					   kp->name, kp->usage, kp->help);
758 				kmp = container_of(kp, struct kdb_macro, cmd);
759 				list_for_each_entry(kms, &kmp->statements,
760 						    list_node)
761 					kdb_printf("%s", kms->statement);
762 				kdb_printf("endefcmd\n");
763 			}
764 		}
765 		return 0;
766 	}
767 	if (argc != 3)
768 		return KDB_ARGCOUNT;
769 	if (in_dbg_master()) {
770 		kdb_printf("Command only available during kdb_init()\n");
771 		return KDB_NOTIMP;
772 	}
773 	kdb_macro = kzalloc(sizeof(*kdb_macro), GFP_KDB);
774 	if (!kdb_macro)
775 		goto fail_defcmd;
776 
777 	mp = &kdb_macro->cmd;
778 	mp->func = kdb_exec_defcmd;
779 	mp->minlen = 0;
780 	mp->flags = KDB_ENABLE_ALWAYS_SAFE;
781 	mp->name = kdb_strdup(argv[1], GFP_KDB);
782 	if (!mp->name)
783 		goto fail_name;
784 	mp->usage = kdb_strdup(argv[2], GFP_KDB);
785 	if (!mp->usage)
786 		goto fail_usage;
787 	mp->help = kdb_strdup(argv[3], GFP_KDB);
788 	if (!mp->help)
789 		goto fail_help;
790 	if (mp->usage[0] == '"') {
791 		strcpy(mp->usage, argv[2]+1);
792 		mp->usage[strlen(mp->usage)-1] = '\0';
793 	}
794 	if (mp->help[0] == '"') {
795 		strcpy(mp->help, argv[3]+1);
796 		mp->help[strlen(mp->help)-1] = '\0';
797 	}
798 
799 	INIT_LIST_HEAD(&kdb_macro->statements);
800 	defcmd_in_progress = true;
801 	return 0;
802 fail_help:
803 	kfree(mp->usage);
804 fail_usage:
805 	kfree(mp->name);
806 fail_name:
807 	kfree(kdb_macro);
808 fail_defcmd:
809 	kdb_printf("Could not allocate new kdb_macro entry for %s\n", argv[1]);
810 	return KDB_NOTIMP;
811 }
812 
813 /*
814  * kdb_exec_defcmd - Execute the set of commands associated with this
815  *	defcmd name.
816  * Inputs:
817  *	argc	argument count
818  *	argv	argument vector
819  * Returns:
820  *	zero for success, a kdb diagnostic if error
821  */
kdb_exec_defcmd(int argc,const char ** argv)822 static int kdb_exec_defcmd(int argc, const char **argv)
823 {
824 	int ret;
825 	kdbtab_t *kp;
826 	struct kdb_macro *kmp;
827 	struct kdb_macro_statement *kms;
828 
829 	if (argc != 0)
830 		return KDB_ARGCOUNT;
831 
832 	list_for_each_entry(kp, &kdb_cmds_head, list_node) {
833 		if (strcmp(kp->name, argv[0]) == 0)
834 			break;
835 	}
836 	if (list_entry_is_head(kp, &kdb_cmds_head, list_node)) {
837 		kdb_printf("kdb_exec_defcmd: could not find commands for %s\n",
838 			   argv[0]);
839 		return KDB_NOTIMP;
840 	}
841 	kmp = container_of(kp, struct kdb_macro, cmd);
842 	list_for_each_entry(kms, &kmp->statements, list_node) {
843 		/*
844 		 * Recursive use of kdb_parse, do not use argv after this point.
845 		 */
846 		argv = NULL;
847 		kdb_printf("[%s]kdb> %s\n", kmp->cmd.name, kms->statement);
848 		ret = kdb_parse(kms->statement);
849 		if (ret)
850 			return ret;
851 	}
852 	return 0;
853 }
854 
855 /* Command history */
856 #define KDB_CMD_HISTORY_COUNT	32
857 #define CMD_BUFLEN		200	/* kdb_printf: max printline
858 					 * size == 256 */
859 static unsigned int cmd_head, cmd_tail;
860 static unsigned int cmdptr;
861 static char cmd_hist[KDB_CMD_HISTORY_COUNT][CMD_BUFLEN];
862 static char cmd_cur[CMD_BUFLEN];
863 
864 /*
865  * The "str" argument may point to something like  | grep xyz
866  */
parse_grep(const char * str)867 static void parse_grep(const char *str)
868 {
869 	int	len;
870 	char	*cp = (char *)str, *cp2;
871 
872 	/* sanity check: we should have been called with the \ first */
873 	if (*cp != '|')
874 		return;
875 	cp++;
876 	while (isspace(*cp))
877 		cp++;
878 	if (!str_has_prefix(cp, "grep ")) {
879 		kdb_printf("invalid 'pipe', see grephelp\n");
880 		return;
881 	}
882 	cp += 5;
883 	while (isspace(*cp))
884 		cp++;
885 	cp2 = strchr(cp, '\n');
886 	if (cp2)
887 		*cp2 = '\0'; /* remove the trailing newline */
888 	len = strlen(cp);
889 	if (len == 0) {
890 		kdb_printf("invalid 'pipe', see grephelp\n");
891 		return;
892 	}
893 	/* now cp points to a nonzero length search string */
894 	if (*cp == '"') {
895 		/* allow it be "x y z" by removing the "'s - there must
896 		   be two of them */
897 		cp++;
898 		cp2 = strchr(cp, '"');
899 		if (!cp2) {
900 			kdb_printf("invalid quoted string, see grephelp\n");
901 			return;
902 		}
903 		*cp2 = '\0'; /* end the string where the 2nd " was */
904 	}
905 	kdb_grep_leading = 0;
906 	if (*cp == '^') {
907 		kdb_grep_leading = 1;
908 		cp++;
909 	}
910 	len = strlen(cp);
911 	kdb_grep_trailing = 0;
912 	if (*(cp+len-1) == '$') {
913 		kdb_grep_trailing = 1;
914 		*(cp+len-1) = '\0';
915 	}
916 	len = strlen(cp);
917 	if (!len)
918 		return;
919 	if (len >= KDB_GREP_STRLEN) {
920 		kdb_printf("search string too long\n");
921 		return;
922 	}
923 	strcpy(kdb_grep_string, cp);
924 	kdb_grepping_flag++;
925 	return;
926 }
927 
928 /*
929  * kdb_parse - Parse the command line, search the command table for a
930  *	matching command and invoke the command function.  This
931  *	function may be called recursively, if it is, the second call
932  *	will overwrite argv and cbuf.  It is the caller's
933  *	responsibility to save their argv if they recursively call
934  *	kdb_parse().
935  * Parameters:
936  *      cmdstr	The input command line to be parsed.
937  *	regs	The registers at the time kdb was entered.
938  * Returns:
939  *	Zero for success, a kdb diagnostic if failure.
940  * Remarks:
941  *	Limited to 20 tokens.
942  *
943  *	Real rudimentary tokenization. Basically only whitespace
944  *	is considered a token delimiter (but special consideration
945  *	is taken of the '=' sign as used by the 'set' command).
946  *
947  *	The algorithm used to tokenize the input string relies on
948  *	there being at least one whitespace (or otherwise useless)
949  *	character between tokens as the character immediately following
950  *	the token is altered in-place to a null-byte to terminate the
951  *	token string.
952  */
953 
954 #define MAXARGC	20
955 
kdb_parse(const char * cmdstr)956 int kdb_parse(const char *cmdstr)
957 {
958 	static char *argv[MAXARGC];
959 	static int argc;
960 	static char cbuf[CMD_BUFLEN+2];
961 	char *cp;
962 	char *cpp, quoted;
963 	kdbtab_t *tp;
964 	int escaped, ignore_errors = 0, check_grep = 0;
965 
966 	/*
967 	 * First tokenize the command string.
968 	 */
969 	cp = (char *)cmdstr;
970 
971 	if (KDB_FLAG(CMD_INTERRUPT)) {
972 		/* Previous command was interrupted, newline must not
973 		 * repeat the command */
974 		KDB_FLAG_CLEAR(CMD_INTERRUPT);
975 		KDB_STATE_SET(PAGER);
976 		argc = 0;	/* no repeat */
977 	}
978 
979 	if (*cp != '\n' && *cp != '\0') {
980 		argc = 0;
981 		cpp = cbuf;
982 		while (*cp) {
983 			/* skip whitespace */
984 			while (isspace(*cp))
985 				cp++;
986 			if ((*cp == '\0') || (*cp == '\n') ||
987 			    (*cp == '#' && !defcmd_in_progress))
988 				break;
989 			/* special case: check for | grep pattern */
990 			if (*cp == '|') {
991 				check_grep++;
992 				break;
993 			}
994 			if (cpp >= cbuf + CMD_BUFLEN) {
995 				kdb_printf("kdb_parse: command buffer "
996 					   "overflow, command ignored\n%s\n",
997 					   cmdstr);
998 				return KDB_NOTFOUND;
999 			}
1000 			if (argc >= MAXARGC - 1) {
1001 				kdb_printf("kdb_parse: too many arguments, "
1002 					   "command ignored\n%s\n", cmdstr);
1003 				return KDB_NOTFOUND;
1004 			}
1005 			argv[argc++] = cpp;
1006 			escaped = 0;
1007 			quoted = '\0';
1008 			/* Copy to next unquoted and unescaped
1009 			 * whitespace or '=' */
1010 			while (*cp && *cp != '\n' &&
1011 			       (escaped || quoted || !isspace(*cp))) {
1012 				if (cpp >= cbuf + CMD_BUFLEN)
1013 					break;
1014 				if (escaped) {
1015 					escaped = 0;
1016 					*cpp++ = *cp++;
1017 					continue;
1018 				}
1019 				if (*cp == '\\') {
1020 					escaped = 1;
1021 					++cp;
1022 					continue;
1023 				}
1024 				if (*cp == quoted)
1025 					quoted = '\0';
1026 				else if (*cp == '\'' || *cp == '"')
1027 					quoted = *cp;
1028 				*cpp = *cp++;
1029 				if (*cpp == '=' && !quoted)
1030 					break;
1031 				++cpp;
1032 			}
1033 			*cpp++ = '\0';	/* Squash a ws or '=' character */
1034 		}
1035 	}
1036 	if (!argc)
1037 		return 0;
1038 	if (check_grep)
1039 		parse_grep(cp);
1040 	if (defcmd_in_progress) {
1041 		int result = kdb_defcmd2(cmdstr, argv[0]);
1042 		if (!defcmd_in_progress) {
1043 			argc = 0;	/* avoid repeat on endefcmd */
1044 			*(argv[0]) = '\0';
1045 		}
1046 		return result;
1047 	}
1048 	if (argv[0][0] == '-' && argv[0][1] &&
1049 	    (argv[0][1] < '0' || argv[0][1] > '9')) {
1050 		ignore_errors = 1;
1051 		++argv[0];
1052 	}
1053 
1054 	list_for_each_entry(tp, &kdb_cmds_head, list_node) {
1055 		/*
1056 		 * If this command is allowed to be abbreviated,
1057 		 * check to see if this is it.
1058 		 */
1059 		if (tp->minlen && (strlen(argv[0]) <= tp->minlen) &&
1060 		    (strncmp(argv[0], tp->name, tp->minlen) == 0))
1061 			break;
1062 
1063 		if (strcmp(argv[0], tp->name) == 0)
1064 			break;
1065 	}
1066 
1067 	/*
1068 	 * If we don't find a command by this name, see if the first
1069 	 * few characters of this match any of the known commands.
1070 	 * e.g., md1c20 should match md.
1071 	 */
1072 	if (list_entry_is_head(tp, &kdb_cmds_head, list_node)) {
1073 		list_for_each_entry(tp, &kdb_cmds_head, list_node) {
1074 			if (strncmp(argv[0], tp->name, strlen(tp->name)) == 0)
1075 				break;
1076 		}
1077 	}
1078 
1079 	if (!list_entry_is_head(tp, &kdb_cmds_head, list_node)) {
1080 		int result;
1081 
1082 		if (!kdb_check_flags(tp->flags, kdb_cmd_enabled, argc <= 1))
1083 			return KDB_NOPERM;
1084 
1085 		KDB_STATE_SET(CMD);
1086 		result = (*tp->func)(argc-1, (const char **)argv);
1087 		if (result && ignore_errors && result > KDB_CMD_GO)
1088 			result = 0;
1089 		KDB_STATE_CLEAR(CMD);
1090 
1091 		if (tp->flags & KDB_REPEAT_WITH_ARGS)
1092 			return result;
1093 
1094 		argc = tp->flags & KDB_REPEAT_NO_ARGS ? 1 : 0;
1095 		if (argv[argc])
1096 			*(argv[argc]) = '\0';
1097 		return result;
1098 	}
1099 
1100 	/*
1101 	 * If the input with which we were presented does not
1102 	 * map to an existing command, attempt to parse it as an
1103 	 * address argument and display the result.   Useful for
1104 	 * obtaining the address of a variable, or the nearest symbol
1105 	 * to an address contained in a register.
1106 	 */
1107 	{
1108 		unsigned long value;
1109 		char *name = NULL;
1110 		long offset;
1111 		int nextarg = 0;
1112 
1113 		if (kdbgetaddrarg(0, (const char **)argv, &nextarg,
1114 				  &value, &offset, &name)) {
1115 			return KDB_NOTFOUND;
1116 		}
1117 
1118 		kdb_printf("%s = ", argv[0]);
1119 		kdb_symbol_print(value, NULL, KDB_SP_DEFAULT);
1120 		kdb_printf("\n");
1121 		return 0;
1122 	}
1123 }
1124 
1125 
handle_ctrl_cmd(char * cmd)1126 static int handle_ctrl_cmd(char *cmd)
1127 {
1128 #define CTRL_P	16
1129 #define CTRL_N	14
1130 
1131 	/* initial situation */
1132 	if (cmd_head == cmd_tail)
1133 		return 0;
1134 	switch (*cmd) {
1135 	case CTRL_P:
1136 		if (cmdptr != cmd_tail)
1137 			cmdptr = (cmdptr + KDB_CMD_HISTORY_COUNT - 1) %
1138 				 KDB_CMD_HISTORY_COUNT;
1139 		strscpy(cmd_cur, cmd_hist[cmdptr], CMD_BUFLEN);
1140 		return 1;
1141 	case CTRL_N:
1142 		if (cmdptr != cmd_head)
1143 			cmdptr = (cmdptr+1) % KDB_CMD_HISTORY_COUNT;
1144 		strscpy(cmd_cur, cmd_hist[cmdptr], CMD_BUFLEN);
1145 		return 1;
1146 	}
1147 	return 0;
1148 }
1149 
1150 /*
1151  * kdb_reboot - This function implements the 'reboot' command.  Reboot
1152  *	the system immediately, or loop for ever on failure.
1153  */
kdb_reboot(int argc,const char ** argv)1154 static int kdb_reboot(int argc, const char **argv)
1155 {
1156 	emergency_restart();
1157 	kdb_printf("Hmm, kdb_reboot did not reboot, spinning here\n");
1158 	while (1)
1159 		cpu_relax();
1160 	/* NOTREACHED */
1161 	return 0;
1162 }
1163 
kdb_dumpregs(struct pt_regs * regs)1164 static void kdb_dumpregs(struct pt_regs *regs)
1165 {
1166 	int old_lvl = console_loglevel;
1167 	console_loglevel = CONSOLE_LOGLEVEL_MOTORMOUTH;
1168 	kdb_trap_printk++;
1169 	show_regs(regs);
1170 	kdb_trap_printk--;
1171 	kdb_printf("\n");
1172 	console_loglevel = old_lvl;
1173 }
1174 
kdb_set_current_task(struct task_struct * p)1175 static void kdb_set_current_task(struct task_struct *p)
1176 {
1177 	kdb_current_task = p;
1178 
1179 	if (kdb_task_has_cpu(p)) {
1180 		kdb_current_regs = KDB_TSKREGS(kdb_process_cpu(p));
1181 		return;
1182 	}
1183 	kdb_current_regs = NULL;
1184 }
1185 
drop_newline(char * buf)1186 static void drop_newline(char *buf)
1187 {
1188 	size_t len = strlen(buf);
1189 
1190 	if (len == 0)
1191 		return;
1192 	if (*(buf + len - 1) == '\n')
1193 		*(buf + len - 1) = '\0';
1194 }
1195 
1196 /*
1197  * kdb_local - The main code for kdb.  This routine is invoked on a
1198  *	specific processor, it is not global.  The main kdb() routine
1199  *	ensures that only one processor at a time is in this routine.
1200  *	This code is called with the real reason code on the first
1201  *	entry to a kdb session, thereafter it is called with reason
1202  *	SWITCH, even if the user goes back to the original cpu.
1203  * Inputs:
1204  *	reason		The reason KDB was invoked
1205  *	error		The hardware-defined error code
1206  *	regs		The exception frame at time of fault/breakpoint.
1207  *	db_result	Result code from the break or debug point.
1208  * Returns:
1209  *	0	KDB was invoked for an event which it wasn't responsible
1210  *	1	KDB handled the event for which it was invoked.
1211  *	KDB_CMD_GO	User typed 'go'.
1212  *	KDB_CMD_CPU	User switched to another cpu.
1213  *	KDB_CMD_SS	Single step.
1214  */
kdb_local(kdb_reason_t reason,int error,struct pt_regs * regs,kdb_dbtrap_t db_result)1215 static int kdb_local(kdb_reason_t reason, int error, struct pt_regs *regs,
1216 		     kdb_dbtrap_t db_result)
1217 {
1218 	char *cmdbuf;
1219 	int diag;
1220 	struct task_struct *kdb_current =
1221 		curr_task(raw_smp_processor_id());
1222 
1223 	KDB_DEBUG_STATE("kdb_local 1", reason);
1224 
1225 	kdb_check_for_lockdown();
1226 
1227 	kdb_go_count = 0;
1228 	if (reason == KDB_REASON_DEBUG) {
1229 		/* special case below */
1230 	} else {
1231 		kdb_printf("\nEntering kdb (current=0x%px, pid %d) ",
1232 			   kdb_current, kdb_current ? kdb_current->pid : 0);
1233 #if defined(CONFIG_SMP)
1234 		kdb_printf("on processor %d ", raw_smp_processor_id());
1235 #endif
1236 	}
1237 
1238 	switch (reason) {
1239 	case KDB_REASON_DEBUG:
1240 	{
1241 		/*
1242 		 * If re-entering kdb after a single step
1243 		 * command, don't print the message.
1244 		 */
1245 		switch (db_result) {
1246 		case KDB_DB_BPT:
1247 			kdb_printf("\nEntering kdb (0x%px, pid %d) ",
1248 				   kdb_current, kdb_current->pid);
1249 #if defined(CONFIG_SMP)
1250 			kdb_printf("on processor %d ", raw_smp_processor_id());
1251 #endif
1252 			kdb_printf("due to Debug @ " kdb_machreg_fmt "\n",
1253 				   instruction_pointer(regs));
1254 			break;
1255 		case KDB_DB_SS:
1256 			break;
1257 		case KDB_DB_SSBPT:
1258 			KDB_DEBUG_STATE("kdb_local 4", reason);
1259 			return 1;	/* kdba_db_trap did the work */
1260 		default:
1261 			kdb_printf("kdb: Bad result from kdba_db_trap: %d\n",
1262 				   db_result);
1263 			break;
1264 		}
1265 
1266 	}
1267 		break;
1268 	case KDB_REASON_ENTER:
1269 		if (KDB_STATE(KEYBOARD))
1270 			kdb_printf("due to Keyboard Entry\n");
1271 		else
1272 			kdb_printf("due to KDB_ENTER()\n");
1273 		break;
1274 	case KDB_REASON_KEYBOARD:
1275 		KDB_STATE_SET(KEYBOARD);
1276 		kdb_printf("due to Keyboard Entry\n");
1277 		break;
1278 	case KDB_REASON_ENTER_SLAVE:
1279 		/* drop through, slaves only get released via cpu switch */
1280 	case KDB_REASON_SWITCH:
1281 		kdb_printf("due to cpu switch\n");
1282 		break;
1283 	case KDB_REASON_OOPS:
1284 		kdb_printf("Oops: %s\n", kdb_diemsg);
1285 		kdb_printf("due to oops @ " kdb_machreg_fmt "\n",
1286 			   instruction_pointer(regs));
1287 		kdb_dumpregs(regs);
1288 		break;
1289 	case KDB_REASON_SYSTEM_NMI:
1290 		kdb_printf("due to System NonMaskable Interrupt\n");
1291 		break;
1292 	case KDB_REASON_NMI:
1293 		kdb_printf("due to NonMaskable Interrupt @ "
1294 			   kdb_machreg_fmt "\n",
1295 			   instruction_pointer(regs));
1296 		break;
1297 	case KDB_REASON_SSTEP:
1298 	case KDB_REASON_BREAK:
1299 		kdb_printf("due to %s @ " kdb_machreg_fmt "\n",
1300 			   reason == KDB_REASON_BREAK ?
1301 			   "Breakpoint" : "SS trap", instruction_pointer(regs));
1302 		/*
1303 		 * Determine if this breakpoint is one that we
1304 		 * are interested in.
1305 		 */
1306 		if (db_result != KDB_DB_BPT) {
1307 			kdb_printf("kdb: error return from kdba_bp_trap: %d\n",
1308 				   db_result);
1309 			KDB_DEBUG_STATE("kdb_local 6", reason);
1310 			return 0;	/* Not for us, dismiss it */
1311 		}
1312 		break;
1313 	case KDB_REASON_RECURSE:
1314 		kdb_printf("due to Recursion @ " kdb_machreg_fmt "\n",
1315 			   instruction_pointer(regs));
1316 		break;
1317 	default:
1318 		kdb_printf("kdb: unexpected reason code: %d\n", reason);
1319 		KDB_DEBUG_STATE("kdb_local 8", reason);
1320 		return 0;	/* Not for us, dismiss it */
1321 	}
1322 
1323 	while (1) {
1324 		/*
1325 		 * Initialize pager context.
1326 		 */
1327 		kdb_nextline = 1;
1328 		KDB_STATE_CLEAR(SUPPRESS);
1329 		kdb_grepping_flag = 0;
1330 		/* ensure the old search does not leak into '/' commands */
1331 		kdb_grep_string[0] = '\0';
1332 
1333 		cmdbuf = cmd_cur;
1334 		*cmdbuf = '\0';
1335 		*(cmd_hist[cmd_head]) = '\0';
1336 
1337 do_full_getstr:
1338 		/* PROMPT can only be set if we have MEM_READ permission. */
1339 		snprintf(kdb_prompt_str, CMD_BUFLEN, kdbgetenv("PROMPT"),
1340 			 raw_smp_processor_id());
1341 
1342 		/*
1343 		 * Fetch command from keyboard
1344 		 */
1345 		cmdbuf = kdb_getstr(cmdbuf, CMD_BUFLEN, kdb_prompt_str);
1346 		if (*cmdbuf != '\n') {
1347 			if (*cmdbuf < 32) {
1348 				if (cmdptr == cmd_head) {
1349 					strscpy(cmd_hist[cmd_head], cmd_cur,
1350 						CMD_BUFLEN);
1351 					*(cmd_hist[cmd_head] +
1352 					  strlen(cmd_hist[cmd_head])-1) = '\0';
1353 				}
1354 				if (!handle_ctrl_cmd(cmdbuf))
1355 					*(cmd_cur+strlen(cmd_cur)-1) = '\0';
1356 				cmdbuf = cmd_cur;
1357 				goto do_full_getstr;
1358 			} else {
1359 				strscpy(cmd_hist[cmd_head], cmd_cur,
1360 					CMD_BUFLEN);
1361 			}
1362 
1363 			cmd_head = (cmd_head+1) % KDB_CMD_HISTORY_COUNT;
1364 			if (cmd_head == cmd_tail)
1365 				cmd_tail = (cmd_tail+1) % KDB_CMD_HISTORY_COUNT;
1366 		}
1367 
1368 		cmdptr = cmd_head;
1369 		diag = kdb_parse(cmdbuf);
1370 		if (diag == KDB_NOTFOUND) {
1371 			drop_newline(cmdbuf);
1372 			kdb_printf("Unknown kdb command: '%s'\n", cmdbuf);
1373 			diag = 0;
1374 		}
1375 		if (diag == KDB_CMD_GO
1376 		 || diag == KDB_CMD_CPU
1377 		 || diag == KDB_CMD_SS
1378 		 || diag == KDB_CMD_KGDB)
1379 			break;
1380 
1381 		if (diag)
1382 			kdb_cmderror(diag);
1383 	}
1384 	KDB_DEBUG_STATE("kdb_local 9", diag);
1385 	return diag;
1386 }
1387 
1388 
1389 /*
1390  * kdb_print_state - Print the state data for the current processor
1391  *	for debugging.
1392  * Inputs:
1393  *	text		Identifies the debug point
1394  *	value		Any integer value to be printed, e.g. reason code.
1395  */
kdb_print_state(const char * text,int value)1396 void kdb_print_state(const char *text, int value)
1397 {
1398 	kdb_printf("state: %s cpu %d value %d initial %d state %x\n",
1399 		   text, raw_smp_processor_id(), value, kdb_initial_cpu,
1400 		   kdb_state);
1401 }
1402 
1403 /*
1404  * kdb_main_loop - After initial setup and assignment of the
1405  *	controlling cpu, all cpus are in this loop.  One cpu is in
1406  *	control and will issue the kdb prompt, the others will spin
1407  *	until 'go' or cpu switch.
1408  *
1409  *	To get a consistent view of the kernel stacks for all
1410  *	processes, this routine is invoked from the main kdb code via
1411  *	an architecture specific routine.  kdba_main_loop is
1412  *	responsible for making the kernel stacks consistent for all
1413  *	processes, there should be no difference between a blocked
1414  *	process and a running process as far as kdb is concerned.
1415  * Inputs:
1416  *	reason		The reason KDB was invoked
1417  *	error		The hardware-defined error code
1418  *	reason2		kdb's current reason code.
1419  *			Initially error but can change
1420  *			according to kdb state.
1421  *	db_result	Result code from break or debug point.
1422  *	regs		The exception frame at time of fault/breakpoint.
1423  *			should always be valid.
1424  * Returns:
1425  *	0	KDB was invoked for an event which it wasn't responsible
1426  *	1	KDB handled the event for which it was invoked.
1427  */
kdb_main_loop(kdb_reason_t reason,kdb_reason_t reason2,int error,kdb_dbtrap_t db_result,struct pt_regs * regs)1428 int kdb_main_loop(kdb_reason_t reason, kdb_reason_t reason2, int error,
1429 	      kdb_dbtrap_t db_result, struct pt_regs *regs)
1430 {
1431 	int result = 1;
1432 	/* Stay in kdb() until 'go', 'ss[b]' or an error */
1433 	while (1) {
1434 		/*
1435 		 * All processors except the one that is in control
1436 		 * will spin here.
1437 		 */
1438 		KDB_DEBUG_STATE("kdb_main_loop 1", reason);
1439 		while (KDB_STATE(HOLD_CPU)) {
1440 			/* state KDB is turned off by kdb_cpu to see if the
1441 			 * other cpus are still live, each cpu in this loop
1442 			 * turns it back on.
1443 			 */
1444 			if (!KDB_STATE(KDB))
1445 				KDB_STATE_SET(KDB);
1446 		}
1447 
1448 		KDB_STATE_CLEAR(SUPPRESS);
1449 		KDB_DEBUG_STATE("kdb_main_loop 2", reason);
1450 		if (KDB_STATE(LEAVING))
1451 			break;	/* Another cpu said 'go' */
1452 		/* Still using kdb, this processor is in control */
1453 		result = kdb_local(reason2, error, regs, db_result);
1454 		KDB_DEBUG_STATE("kdb_main_loop 3", result);
1455 
1456 		if (result == KDB_CMD_CPU)
1457 			break;
1458 
1459 		if (result == KDB_CMD_SS) {
1460 			KDB_STATE_SET(DOING_SS);
1461 			break;
1462 		}
1463 
1464 		if (result == KDB_CMD_KGDB) {
1465 			if (!KDB_STATE(DOING_KGDB))
1466 				kdb_printf("Entering please attach debugger "
1467 					   "or use $D#44+ or $3#33\n");
1468 			break;
1469 		}
1470 		if (result && result != 1 && result != KDB_CMD_GO)
1471 			kdb_printf("\nUnexpected kdb_local return code %d\n",
1472 				   result);
1473 		KDB_DEBUG_STATE("kdb_main_loop 4", reason);
1474 		break;
1475 	}
1476 	if (KDB_STATE(DOING_SS))
1477 		KDB_STATE_CLEAR(SSBPT);
1478 
1479 	/* Clean up any keyboard devices before leaving */
1480 	kdb_kbd_cleanup_state();
1481 
1482 	return result;
1483 }
1484 
1485 /*
1486  * kdb_mdr - This function implements the guts of the 'mdr', memory
1487  * read command.
1488  *	mdr  <addr arg>,<byte count>
1489  * Inputs:
1490  *	addr	Start address
1491  *	count	Number of bytes
1492  * Returns:
1493  *	Always 0.  Any errors are detected and printed by kdb_getarea.
1494  */
kdb_mdr(unsigned long addr,unsigned int count)1495 static int kdb_mdr(unsigned long addr, unsigned int count)
1496 {
1497 	unsigned char c;
1498 	while (count--) {
1499 		if (kdb_getarea(c, addr))
1500 			return 0;
1501 		kdb_printf("%02x", c);
1502 		addr++;
1503 	}
1504 	kdb_printf("\n");
1505 	return 0;
1506 }
1507 
1508 /*
1509  * kdb_md - This function implements the 'md', 'md1', 'md2', 'md4',
1510  *	'md8' 'mdr' and 'mds' commands.
1511  *
1512  *	md|mds  [<addr arg> [<line count> [<radix>]]]
1513  *	mdWcN	[<addr arg> [<line count> [<radix>]]]
1514  *		where W = is the width (1, 2, 4 or 8) and N is the count.
1515  *		for eg., md1c20 reads 20 bytes, 1 at a time.
1516  *	mdr  <addr arg>,<byte count>
1517  */
kdb_md_line(const char * fmtstr,unsigned long addr,int symbolic,int nosect,int bytesperword,int num,int repeat,int phys)1518 static void kdb_md_line(const char *fmtstr, unsigned long addr,
1519 			int symbolic, int nosect, int bytesperword,
1520 			int num, int repeat, int phys)
1521 {
1522 	/* print just one line of data */
1523 	kdb_symtab_t symtab;
1524 	char cbuf[32];
1525 	char *c = cbuf;
1526 	int i;
1527 	int j;
1528 	unsigned long word;
1529 
1530 	memset(cbuf, '\0', sizeof(cbuf));
1531 	if (phys)
1532 		kdb_printf("phys " kdb_machreg_fmt0 " ", addr);
1533 	else
1534 		kdb_printf(kdb_machreg_fmt0 " ", addr);
1535 
1536 	for (i = 0; i < num && repeat--; i++) {
1537 		if (phys) {
1538 			if (kdb_getphysword(&word, addr, bytesperword))
1539 				break;
1540 		} else if (kdb_getword(&word, addr, bytesperword))
1541 			break;
1542 		kdb_printf(fmtstr, word);
1543 		if (symbolic)
1544 			kdbnearsym(word, &symtab);
1545 		else
1546 			memset(&symtab, 0, sizeof(symtab));
1547 		if (symtab.sym_name) {
1548 			kdb_symbol_print(word, &symtab, 0);
1549 			if (!nosect) {
1550 				kdb_printf("\n");
1551 				kdb_printf("                       %s %s "
1552 					   kdb_machreg_fmt " "
1553 					   kdb_machreg_fmt " "
1554 					   kdb_machreg_fmt, symtab.mod_name,
1555 					   symtab.sec_name, symtab.sec_start,
1556 					   symtab.sym_start, symtab.sym_end);
1557 			}
1558 			addr += bytesperword;
1559 		} else {
1560 			union {
1561 				u64 word;
1562 				unsigned char c[8];
1563 			} wc;
1564 			unsigned char *cp;
1565 #ifdef	__BIG_ENDIAN
1566 			cp = wc.c + 8 - bytesperword;
1567 #else
1568 			cp = wc.c;
1569 #endif
1570 			wc.word = word;
1571 #define printable_char(c) \
1572 	({unsigned char __c = c; isascii(__c) && isprint(__c) ? __c : '.'; })
1573 			for (j = 0; j < bytesperword; j++)
1574 				*c++ = printable_char(*cp++);
1575 			addr += bytesperword;
1576 #undef printable_char
1577 		}
1578 	}
1579 	kdb_printf("%*s %s\n", (int)((num-i)*(2*bytesperword + 1)+1),
1580 		   " ", cbuf);
1581 }
1582 
kdb_md(int argc,const char ** argv)1583 static int kdb_md(int argc, const char **argv)
1584 {
1585 	static unsigned long last_addr;
1586 	static int last_radix, last_bytesperword, last_repeat;
1587 	int radix = 16, mdcount = 8, bytesperword = KDB_WORD_SIZE, repeat;
1588 	int nosect = 0;
1589 	char fmtchar, fmtstr[64];
1590 	unsigned long addr;
1591 	unsigned long word;
1592 	long offset = 0;
1593 	int symbolic = 0;
1594 	int valid = 0;
1595 	int phys = 0;
1596 	int raw = 0;
1597 
1598 	kdbgetintenv("MDCOUNT", &mdcount);
1599 	kdbgetintenv("RADIX", &radix);
1600 	kdbgetintenv("BYTESPERWORD", &bytesperword);
1601 
1602 	/* Assume 'md <addr>' and start with environment values */
1603 	repeat = mdcount * 16 / bytesperword;
1604 
1605 	if (strcmp(argv[0], "mdr") == 0) {
1606 		if (argc == 2 || (argc == 0 && last_addr != 0))
1607 			valid = raw = 1;
1608 		else
1609 			return KDB_ARGCOUNT;
1610 	} else if (isdigit(argv[0][2])) {
1611 		bytesperword = (int)(argv[0][2] - '0');
1612 		if (bytesperword == 0) {
1613 			bytesperword = last_bytesperword;
1614 			if (bytesperword == 0)
1615 				bytesperword = 4;
1616 		}
1617 		last_bytesperword = bytesperword;
1618 		repeat = mdcount * 16 / bytesperword;
1619 		if (!argv[0][3])
1620 			valid = 1;
1621 		else if (argv[0][3] == 'c' && argv[0][4]) {
1622 			char *p;
1623 			repeat = simple_strtoul(argv[0] + 4, &p, 10);
1624 			mdcount = ((repeat * bytesperword) + 15) / 16;
1625 			valid = !*p;
1626 		}
1627 		last_repeat = repeat;
1628 	} else if (strcmp(argv[0], "md") == 0)
1629 		valid = 1;
1630 	else if (strcmp(argv[0], "mds") == 0)
1631 		valid = 1;
1632 	else if (strcmp(argv[0], "mdp") == 0) {
1633 		phys = valid = 1;
1634 	}
1635 	if (!valid)
1636 		return KDB_NOTFOUND;
1637 
1638 	if (argc == 0) {
1639 		if (last_addr == 0)
1640 			return KDB_ARGCOUNT;
1641 		addr = last_addr;
1642 		radix = last_radix;
1643 		bytesperword = last_bytesperword;
1644 		repeat = last_repeat;
1645 		if (raw)
1646 			mdcount = repeat;
1647 		else
1648 			mdcount = ((repeat * bytesperword) + 15) / 16;
1649 	}
1650 
1651 	if (argc) {
1652 		unsigned long val;
1653 		int diag, nextarg = 1;
1654 		diag = kdbgetaddrarg(argc, argv, &nextarg, &addr,
1655 				     &offset, NULL);
1656 		if (diag)
1657 			return diag;
1658 		if (argc > nextarg+2)
1659 			return KDB_ARGCOUNT;
1660 
1661 		if (argc >= nextarg) {
1662 			diag = kdbgetularg(argv[nextarg], &val);
1663 			if (!diag) {
1664 				mdcount = (int) val;
1665 				if (raw)
1666 					repeat = mdcount;
1667 				else
1668 					repeat = mdcount * 16 / bytesperword;
1669 			}
1670 		}
1671 		if (argc >= nextarg+1) {
1672 			diag = kdbgetularg(argv[nextarg+1], &val);
1673 			if (!diag)
1674 				radix = (int) val;
1675 		}
1676 	}
1677 
1678 	if (strcmp(argv[0], "mdr") == 0) {
1679 		int ret;
1680 		last_addr = addr;
1681 		ret = kdb_mdr(addr, mdcount);
1682 		last_addr += mdcount;
1683 		last_repeat = mdcount;
1684 		last_bytesperword = bytesperword; // to make REPEAT happy
1685 		return ret;
1686 	}
1687 
1688 	switch (radix) {
1689 	case 10:
1690 		fmtchar = 'd';
1691 		break;
1692 	case 16:
1693 		fmtchar = 'x';
1694 		break;
1695 	case 8:
1696 		fmtchar = 'o';
1697 		break;
1698 	default:
1699 		return KDB_BADRADIX;
1700 	}
1701 
1702 	last_radix = radix;
1703 
1704 	if (bytesperword > KDB_WORD_SIZE)
1705 		return KDB_BADWIDTH;
1706 
1707 	switch (bytesperword) {
1708 	case 8:
1709 		sprintf(fmtstr, "%%16.16l%c ", fmtchar);
1710 		break;
1711 	case 4:
1712 		sprintf(fmtstr, "%%8.8l%c ", fmtchar);
1713 		break;
1714 	case 2:
1715 		sprintf(fmtstr, "%%4.4l%c ", fmtchar);
1716 		break;
1717 	case 1:
1718 		sprintf(fmtstr, "%%2.2l%c ", fmtchar);
1719 		break;
1720 	default:
1721 		return KDB_BADWIDTH;
1722 	}
1723 
1724 	last_repeat = repeat;
1725 	last_bytesperword = bytesperword;
1726 
1727 	if (strcmp(argv[0], "mds") == 0) {
1728 		symbolic = 1;
1729 		/* Do not save these changes as last_*, they are temporary mds
1730 		 * overrides.
1731 		 */
1732 		bytesperword = KDB_WORD_SIZE;
1733 		repeat = mdcount;
1734 		kdbgetintenv("NOSECT", &nosect);
1735 	}
1736 
1737 	/* Round address down modulo BYTESPERWORD */
1738 
1739 	addr &= ~(bytesperword-1);
1740 
1741 	while (repeat > 0) {
1742 		unsigned long a;
1743 		int n, z, num = (symbolic ? 1 : (16 / bytesperword));
1744 
1745 		if (KDB_FLAG(CMD_INTERRUPT))
1746 			return 0;
1747 		for (a = addr, z = 0; z < repeat; a += bytesperword, ++z) {
1748 			if (phys) {
1749 				if (kdb_getphysword(&word, a, bytesperword)
1750 						|| word)
1751 					break;
1752 			} else if (kdb_getword(&word, a, bytesperword) || word)
1753 				break;
1754 		}
1755 		n = min(num, repeat);
1756 		kdb_md_line(fmtstr, addr, symbolic, nosect, bytesperword,
1757 			    num, repeat, phys);
1758 		addr += bytesperword * n;
1759 		repeat -= n;
1760 		z = (z + num - 1) / num;
1761 		if (z > 2) {
1762 			int s = num * (z-2);
1763 			kdb_printf(kdb_machreg_fmt0 "-" kdb_machreg_fmt0
1764 				   " zero suppressed\n",
1765 				addr, addr + bytesperword * s - 1);
1766 			addr += bytesperword * s;
1767 			repeat -= s;
1768 		}
1769 	}
1770 	last_addr = addr;
1771 
1772 	return 0;
1773 }
1774 
1775 /*
1776  * kdb_mm - This function implements the 'mm' command.
1777  *	mm address-expression new-value
1778  * Remarks:
1779  *	mm works on machine words, mmW works on bytes.
1780  */
kdb_mm(int argc,const char ** argv)1781 static int kdb_mm(int argc, const char **argv)
1782 {
1783 	int diag;
1784 	unsigned long addr;
1785 	long offset = 0;
1786 	unsigned long contents;
1787 	int nextarg;
1788 	int width;
1789 
1790 	if (argv[0][2] && !isdigit(argv[0][2]))
1791 		return KDB_NOTFOUND;
1792 
1793 	if (argc < 2)
1794 		return KDB_ARGCOUNT;
1795 
1796 	nextarg = 1;
1797 	diag = kdbgetaddrarg(argc, argv, &nextarg, &addr, &offset, NULL);
1798 	if (diag)
1799 		return diag;
1800 
1801 	if (nextarg > argc)
1802 		return KDB_ARGCOUNT;
1803 	diag = kdbgetaddrarg(argc, argv, &nextarg, &contents, NULL, NULL);
1804 	if (diag)
1805 		return diag;
1806 
1807 	if (nextarg != argc + 1)
1808 		return KDB_ARGCOUNT;
1809 
1810 	width = argv[0][2] ? (argv[0][2] - '0') : (KDB_WORD_SIZE);
1811 	diag = kdb_putword(addr, contents, width);
1812 	if (diag)
1813 		return diag;
1814 
1815 	kdb_printf(kdb_machreg_fmt " = " kdb_machreg_fmt "\n", addr, contents);
1816 
1817 	return 0;
1818 }
1819 
1820 /*
1821  * kdb_go - This function implements the 'go' command.
1822  *	go [address-expression]
1823  */
kdb_go(int argc,const char ** argv)1824 static int kdb_go(int argc, const char **argv)
1825 {
1826 	unsigned long addr;
1827 	int diag;
1828 	int nextarg;
1829 	long offset;
1830 
1831 	if (raw_smp_processor_id() != kdb_initial_cpu) {
1832 		kdb_printf("go must execute on the entry cpu, "
1833 			   "please use \"cpu %d\" and then execute go\n",
1834 			   kdb_initial_cpu);
1835 		return KDB_BADCPUNUM;
1836 	}
1837 	if (argc == 1) {
1838 		nextarg = 1;
1839 		diag = kdbgetaddrarg(argc, argv, &nextarg,
1840 				     &addr, &offset, NULL);
1841 		if (diag)
1842 			return diag;
1843 	} else if (argc) {
1844 		return KDB_ARGCOUNT;
1845 	}
1846 
1847 	diag = KDB_CMD_GO;
1848 	if (KDB_FLAG(CATASTROPHIC)) {
1849 		kdb_printf("Catastrophic error detected\n");
1850 		kdb_printf("kdb_continue_catastrophic=%d, ",
1851 			kdb_continue_catastrophic);
1852 		if (kdb_continue_catastrophic == 0 && kdb_go_count++ == 0) {
1853 			kdb_printf("type go a second time if you really want "
1854 				   "to continue\n");
1855 			return 0;
1856 		}
1857 		if (kdb_continue_catastrophic == 2) {
1858 			kdb_printf("forcing reboot\n");
1859 			kdb_reboot(0, NULL);
1860 		}
1861 		kdb_printf("attempting to continue\n");
1862 	}
1863 	return diag;
1864 }
1865 
1866 /*
1867  * kdb_rd - This function implements the 'rd' command.
1868  */
kdb_rd(int argc,const char ** argv)1869 static int kdb_rd(int argc, const char **argv)
1870 {
1871 	int len = kdb_check_regs();
1872 #if DBG_MAX_REG_NUM > 0
1873 	int i;
1874 	char *rname;
1875 	int rsize;
1876 	u64 reg64;
1877 	u32 reg32;
1878 	u16 reg16;
1879 	u8 reg8;
1880 
1881 	if (len)
1882 		return len;
1883 
1884 	for (i = 0; i < DBG_MAX_REG_NUM; i++) {
1885 		rsize = dbg_reg_def[i].size * 2;
1886 		if (rsize > 16)
1887 			rsize = 2;
1888 		if (len + strlen(dbg_reg_def[i].name) + 4 + rsize > 80) {
1889 			len = 0;
1890 			kdb_printf("\n");
1891 		}
1892 		if (len)
1893 			len += kdb_printf("  ");
1894 		switch(dbg_reg_def[i].size * 8) {
1895 		case 8:
1896 			rname = dbg_get_reg(i, &reg8, kdb_current_regs);
1897 			if (!rname)
1898 				break;
1899 			len += kdb_printf("%s: %02x", rname, reg8);
1900 			break;
1901 		case 16:
1902 			rname = dbg_get_reg(i, &reg16, kdb_current_regs);
1903 			if (!rname)
1904 				break;
1905 			len += kdb_printf("%s: %04x", rname, reg16);
1906 			break;
1907 		case 32:
1908 			rname = dbg_get_reg(i, &reg32, kdb_current_regs);
1909 			if (!rname)
1910 				break;
1911 			len += kdb_printf("%s: %08x", rname, reg32);
1912 			break;
1913 		case 64:
1914 			rname = dbg_get_reg(i, &reg64, kdb_current_regs);
1915 			if (!rname)
1916 				break;
1917 			len += kdb_printf("%s: %016llx", rname, reg64);
1918 			break;
1919 		default:
1920 			len += kdb_printf("%s: ??", dbg_reg_def[i].name);
1921 		}
1922 	}
1923 	kdb_printf("\n");
1924 #else
1925 	if (len)
1926 		return len;
1927 
1928 	kdb_dumpregs(kdb_current_regs);
1929 #endif
1930 	return 0;
1931 }
1932 
1933 /*
1934  * kdb_rm - This function implements the 'rm' (register modify)  command.
1935  *	rm register-name new-contents
1936  * Remarks:
1937  *	Allows register modification with the same restrictions as gdb
1938  */
kdb_rm(int argc,const char ** argv)1939 static int kdb_rm(int argc, const char **argv)
1940 {
1941 #if DBG_MAX_REG_NUM > 0
1942 	int diag;
1943 	const char *rname;
1944 	int i;
1945 	u64 reg64;
1946 	u32 reg32;
1947 	u16 reg16;
1948 	u8 reg8;
1949 
1950 	if (argc != 2)
1951 		return KDB_ARGCOUNT;
1952 	/*
1953 	 * Allow presence or absence of leading '%' symbol.
1954 	 */
1955 	rname = argv[1];
1956 	if (*rname == '%')
1957 		rname++;
1958 
1959 	diag = kdbgetu64arg(argv[2], &reg64);
1960 	if (diag)
1961 		return diag;
1962 
1963 	diag = kdb_check_regs();
1964 	if (diag)
1965 		return diag;
1966 
1967 	diag = KDB_BADREG;
1968 	for (i = 0; i < DBG_MAX_REG_NUM; i++) {
1969 		if (strcmp(rname, dbg_reg_def[i].name) == 0) {
1970 			diag = 0;
1971 			break;
1972 		}
1973 	}
1974 	if (!diag) {
1975 		switch(dbg_reg_def[i].size * 8) {
1976 		case 8:
1977 			reg8 = reg64;
1978 			dbg_set_reg(i, &reg8, kdb_current_regs);
1979 			break;
1980 		case 16:
1981 			reg16 = reg64;
1982 			dbg_set_reg(i, &reg16, kdb_current_regs);
1983 			break;
1984 		case 32:
1985 			reg32 = reg64;
1986 			dbg_set_reg(i, &reg32, kdb_current_regs);
1987 			break;
1988 		case 64:
1989 			dbg_set_reg(i, &reg64, kdb_current_regs);
1990 			break;
1991 		}
1992 	}
1993 	return diag;
1994 #else
1995 	kdb_printf("ERROR: Register set currently not implemented\n");
1996     return 0;
1997 #endif
1998 }
1999 
2000 #if defined(CONFIG_MAGIC_SYSRQ)
2001 /*
2002  * kdb_sr - This function implements the 'sr' (SYSRQ key) command
2003  *	which interfaces to the soi-disant MAGIC SYSRQ functionality.
2004  *		sr <magic-sysrq-code>
2005  */
kdb_sr(int argc,const char ** argv)2006 static int kdb_sr(int argc, const char **argv)
2007 {
2008 	bool check_mask =
2009 	    !kdb_check_flags(KDB_ENABLE_ALL, kdb_cmd_enabled, false);
2010 
2011 	if (argc != 1)
2012 		return KDB_ARGCOUNT;
2013 
2014 	kdb_trap_printk++;
2015 	__handle_sysrq(*argv[1], check_mask);
2016 	kdb_trap_printk--;
2017 
2018 	return 0;
2019 }
2020 #endif	/* CONFIG_MAGIC_SYSRQ */
2021 
2022 /*
2023  * kdb_ef - This function implements the 'regs' (display exception
2024  *	frame) command.  This command takes an address and expects to
2025  *	find an exception frame at that address, formats and prints
2026  *	it.
2027  *		regs address-expression
2028  * Remarks:
2029  *	Not done yet.
2030  */
kdb_ef(int argc,const char ** argv)2031 static int kdb_ef(int argc, const char **argv)
2032 {
2033 	int diag;
2034 	unsigned long addr;
2035 	long offset;
2036 	int nextarg;
2037 
2038 	if (argc != 1)
2039 		return KDB_ARGCOUNT;
2040 
2041 	nextarg = 1;
2042 	diag = kdbgetaddrarg(argc, argv, &nextarg, &addr, &offset, NULL);
2043 	if (diag)
2044 		return diag;
2045 	show_regs((struct pt_regs *)addr);
2046 	return 0;
2047 }
2048 
2049 /*
2050  * kdb_env - This function implements the 'env' command.  Display the
2051  *	current environment variables.
2052  */
2053 
kdb_env(int argc,const char ** argv)2054 static int kdb_env(int argc, const char **argv)
2055 {
2056 	kdb_printenv();
2057 
2058 	if (KDB_DEBUG(MASK))
2059 		kdb_printf("KDBDEBUG=0x%x\n",
2060 			(kdb_flags & KDB_DEBUG(MASK)) >> KDB_DEBUG_FLAG_SHIFT);
2061 
2062 	return 0;
2063 }
2064 
2065 #ifdef CONFIG_PRINTK
2066 /*
2067  * kdb_dmesg - This function implements the 'dmesg' command to display
2068  *	the contents of the syslog buffer.
2069  *		dmesg [lines] [adjust]
2070  */
kdb_dmesg(int argc,const char ** argv)2071 static int kdb_dmesg(int argc, const char **argv)
2072 {
2073 	int diag;
2074 	int logging;
2075 	int lines = 0;
2076 	int adjust = 0;
2077 	int n = 0;
2078 	int skip = 0;
2079 	struct kmsg_dump_iter iter;
2080 	size_t len;
2081 	char buf[201];
2082 
2083 	if (argc > 2)
2084 		return KDB_ARGCOUNT;
2085 	if (argc) {
2086 		char *cp;
2087 		lines = simple_strtol(argv[1], &cp, 0);
2088 		if (*cp)
2089 			lines = 0;
2090 		if (argc > 1) {
2091 			adjust = simple_strtoul(argv[2], &cp, 0);
2092 			if (*cp || adjust < 0)
2093 				adjust = 0;
2094 		}
2095 	}
2096 
2097 	/* disable LOGGING if set */
2098 	diag = kdbgetintenv("LOGGING", &logging);
2099 	if (!diag && logging) {
2100 		const char *setargs[] = { "set", "LOGGING", "0" };
2101 		kdb_set(2, setargs);
2102 	}
2103 
2104 	kmsg_dump_rewind(&iter);
2105 	while (kmsg_dump_get_line(&iter, 1, NULL, 0, NULL))
2106 		n++;
2107 
2108 	if (lines < 0) {
2109 		if (adjust >= n)
2110 			kdb_printf("buffer only contains %d lines, nothing "
2111 				   "printed\n", n);
2112 		else if (adjust - lines >= n)
2113 			kdb_printf("buffer only contains %d lines, last %d "
2114 				   "lines printed\n", n, n - adjust);
2115 		skip = adjust;
2116 		lines = abs(lines);
2117 	} else if (lines > 0) {
2118 		skip = n - lines - adjust;
2119 		lines = abs(lines);
2120 		if (adjust >= n) {
2121 			kdb_printf("buffer only contains %d lines, "
2122 				   "nothing printed\n", n);
2123 			skip = n;
2124 		} else if (skip < 0) {
2125 			lines += skip;
2126 			skip = 0;
2127 			kdb_printf("buffer only contains %d lines, first "
2128 				   "%d lines printed\n", n, lines);
2129 		}
2130 	} else {
2131 		lines = n;
2132 	}
2133 
2134 	if (skip >= n || skip < 0)
2135 		return 0;
2136 
2137 	kmsg_dump_rewind(&iter);
2138 	while (kmsg_dump_get_line(&iter, 1, buf, sizeof(buf), &len)) {
2139 		if (skip) {
2140 			skip--;
2141 			continue;
2142 		}
2143 		if (!lines--)
2144 			break;
2145 		if (KDB_FLAG(CMD_INTERRUPT))
2146 			return 0;
2147 
2148 		kdb_printf("%.*s\n", (int)len - 1, buf);
2149 	}
2150 
2151 	return 0;
2152 }
2153 #endif /* CONFIG_PRINTK */
2154 
2155 /* Make sure we balance enable/disable calls, must disable first. */
2156 static atomic_t kdb_nmi_disabled;
2157 
kdb_disable_nmi(int argc,const char * argv[])2158 static int kdb_disable_nmi(int argc, const char *argv[])
2159 {
2160 	if (atomic_read(&kdb_nmi_disabled))
2161 		return 0;
2162 	atomic_set(&kdb_nmi_disabled, 1);
2163 	arch_kgdb_ops.enable_nmi(0);
2164 	return 0;
2165 }
2166 
kdb_param_enable_nmi(const char * val,const struct kernel_param * kp)2167 static int kdb_param_enable_nmi(const char *val, const struct kernel_param *kp)
2168 {
2169 	if (!atomic_add_unless(&kdb_nmi_disabled, -1, 0))
2170 		return -EINVAL;
2171 	arch_kgdb_ops.enable_nmi(1);
2172 	return 0;
2173 }
2174 
2175 static const struct kernel_param_ops kdb_param_ops_enable_nmi = {
2176 	.set = kdb_param_enable_nmi,
2177 };
2178 module_param_cb(enable_nmi, &kdb_param_ops_enable_nmi, NULL, 0600);
2179 
2180 /*
2181  * kdb_cpu - This function implements the 'cpu' command.
2182  *	cpu	[<cpunum>]
2183  * Returns:
2184  *	KDB_CMD_CPU for success, a kdb diagnostic if error
2185  */
kdb_cpu_status(void)2186 static void kdb_cpu_status(void)
2187 {
2188 	int i, start_cpu, first_print = 1;
2189 	char state, prev_state = '?';
2190 
2191 	kdb_printf("Currently on cpu %d\n", raw_smp_processor_id());
2192 	kdb_printf("Available cpus: ");
2193 	for (start_cpu = -1, i = 0; i < NR_CPUS; i++) {
2194 		if (!cpu_online(i)) {
2195 			state = 'F';	/* cpu is offline */
2196 		} else if (!kgdb_info[i].enter_kgdb) {
2197 			state = 'D';	/* cpu is online but unresponsive */
2198 		} else {
2199 			state = ' ';	/* cpu is responding to kdb */
2200 			if (kdb_task_state_char(KDB_TSK(i)) == '-')
2201 				state = '-';	/* idle task */
2202 		}
2203 		if (state != prev_state) {
2204 			if (prev_state != '?') {
2205 				if (!first_print)
2206 					kdb_printf(", ");
2207 				first_print = 0;
2208 				kdb_printf("%d", start_cpu);
2209 				if (start_cpu < i-1)
2210 					kdb_printf("-%d", i-1);
2211 				if (prev_state != ' ')
2212 					kdb_printf("(%c)", prev_state);
2213 			}
2214 			prev_state = state;
2215 			start_cpu = i;
2216 		}
2217 	}
2218 	/* print the trailing cpus, ignoring them if they are all offline */
2219 	if (prev_state != 'F') {
2220 		if (!first_print)
2221 			kdb_printf(", ");
2222 		kdb_printf("%d", start_cpu);
2223 		if (start_cpu < i-1)
2224 			kdb_printf("-%d", i-1);
2225 		if (prev_state != ' ')
2226 			kdb_printf("(%c)", prev_state);
2227 	}
2228 	kdb_printf("\n");
2229 }
2230 
kdb_cpu(int argc,const char ** argv)2231 static int kdb_cpu(int argc, const char **argv)
2232 {
2233 	unsigned long cpunum;
2234 	int diag;
2235 
2236 	if (argc == 0) {
2237 		kdb_cpu_status();
2238 		return 0;
2239 	}
2240 
2241 	if (argc != 1)
2242 		return KDB_ARGCOUNT;
2243 
2244 	diag = kdbgetularg(argv[1], &cpunum);
2245 	if (diag)
2246 		return diag;
2247 
2248 	/*
2249 	 * Validate cpunum
2250 	 */
2251 	if ((cpunum >= CONFIG_NR_CPUS) || !kgdb_info[cpunum].enter_kgdb)
2252 		return KDB_BADCPUNUM;
2253 
2254 	dbg_switch_cpu = cpunum;
2255 
2256 	/*
2257 	 * Switch to other cpu
2258 	 */
2259 	return KDB_CMD_CPU;
2260 }
2261 
2262 /* The user may not realize that ps/bta with no parameters does not print idle
2263  * or sleeping system daemon processes, so tell them how many were suppressed.
2264  */
kdb_ps_suppressed(void)2265 void kdb_ps_suppressed(void)
2266 {
2267 	int idle = 0, daemon = 0;
2268 	unsigned long cpu;
2269 	const struct task_struct *p, *g;
2270 	for_each_online_cpu(cpu) {
2271 		p = curr_task(cpu);
2272 		if (kdb_task_state(p, "-"))
2273 			++idle;
2274 	}
2275 	for_each_process_thread(g, p) {
2276 		if (kdb_task_state(p, "ims"))
2277 			++daemon;
2278 	}
2279 	if (idle || daemon) {
2280 		if (idle)
2281 			kdb_printf("%d idle process%s (state -)%s\n",
2282 				   idle, idle == 1 ? "" : "es",
2283 				   daemon ? " and " : "");
2284 		if (daemon)
2285 			kdb_printf("%d sleeping system daemon (state [ims]) "
2286 				   "process%s", daemon,
2287 				   daemon == 1 ? "" : "es");
2288 		kdb_printf(" suppressed,\nuse 'ps A' to see all.\n");
2289 	}
2290 }
2291 
kdb_ps1(const struct task_struct * p)2292 void kdb_ps1(const struct task_struct *p)
2293 {
2294 	int cpu;
2295 	unsigned long tmp;
2296 
2297 	if (!p ||
2298 	    copy_from_kernel_nofault(&tmp, (char *)p, sizeof(unsigned long)))
2299 		return;
2300 
2301 	cpu = kdb_process_cpu(p);
2302 	kdb_printf("0x%px %8d %8d  %d %4d   %c  0x%px %c%s\n",
2303 		   (void *)p, p->pid, p->parent->pid,
2304 		   kdb_task_has_cpu(p), kdb_process_cpu(p),
2305 		   kdb_task_state_char(p),
2306 		   (void *)(&p->thread),
2307 		   p == curr_task(raw_smp_processor_id()) ? '*' : ' ',
2308 		   p->comm);
2309 	if (kdb_task_has_cpu(p)) {
2310 		if (!KDB_TSK(cpu)) {
2311 			kdb_printf("  Error: no saved data for this cpu\n");
2312 		} else {
2313 			if (KDB_TSK(cpu) != p)
2314 				kdb_printf("  Error: does not match running "
2315 				   "process table (0x%px)\n", KDB_TSK(cpu));
2316 		}
2317 	}
2318 }
2319 
2320 /*
2321  * kdb_ps - This function implements the 'ps' command which shows a
2322  *	    list of the active processes.
2323  *
2324  * ps [<state_chars>]   Show processes, optionally selecting only those whose
2325  *                      state character is found in <state_chars>.
2326  */
kdb_ps(int argc,const char ** argv)2327 static int kdb_ps(int argc, const char **argv)
2328 {
2329 	struct task_struct *g, *p;
2330 	const char *mask;
2331 	unsigned long cpu;
2332 
2333 	if (argc == 0)
2334 		kdb_ps_suppressed();
2335 	kdb_printf("%-*s      Pid   Parent [*] cpu State %-*s Command\n",
2336 		(int)(2*sizeof(void *))+2, "Task Addr",
2337 		(int)(2*sizeof(void *))+2, "Thread");
2338 	mask = argc ? argv[1] : kdbgetenv("PS");
2339 	/* Run the active tasks first */
2340 	for_each_online_cpu(cpu) {
2341 		if (KDB_FLAG(CMD_INTERRUPT))
2342 			return 0;
2343 		p = curr_task(cpu);
2344 		if (kdb_task_state(p, mask))
2345 			kdb_ps1(p);
2346 	}
2347 	kdb_printf("\n");
2348 	/* Now the real tasks */
2349 	for_each_process_thread(g, p) {
2350 		if (KDB_FLAG(CMD_INTERRUPT))
2351 			return 0;
2352 		if (kdb_task_state(p, mask))
2353 			kdb_ps1(p);
2354 	}
2355 
2356 	return 0;
2357 }
2358 
2359 /*
2360  * kdb_pid - This function implements the 'pid' command which switches
2361  *	the currently active process.
2362  *		pid [<pid> | R]
2363  */
kdb_pid(int argc,const char ** argv)2364 static int kdb_pid(int argc, const char **argv)
2365 {
2366 	struct task_struct *p;
2367 	unsigned long val;
2368 	int diag;
2369 
2370 	if (argc > 1)
2371 		return KDB_ARGCOUNT;
2372 
2373 	if (argc) {
2374 		if (strcmp(argv[1], "R") == 0) {
2375 			p = KDB_TSK(kdb_initial_cpu);
2376 		} else {
2377 			diag = kdbgetularg(argv[1], &val);
2378 			if (diag)
2379 				return KDB_BADINT;
2380 
2381 			p = find_task_by_pid_ns((pid_t)val,	&init_pid_ns);
2382 			if (!p) {
2383 				kdb_printf("No task with pid=%d\n", (pid_t)val);
2384 				return 0;
2385 			}
2386 		}
2387 		kdb_set_current_task(p);
2388 	}
2389 	kdb_printf("KDB current process is %s(pid=%d)\n",
2390 		   kdb_current_task->comm,
2391 		   kdb_current_task->pid);
2392 
2393 	return 0;
2394 }
2395 
kdb_kgdb(int argc,const char ** argv)2396 static int kdb_kgdb(int argc, const char **argv)
2397 {
2398 	return KDB_CMD_KGDB;
2399 }
2400 
2401 /*
2402  * kdb_help - This function implements the 'help' and '?' commands.
2403  */
kdb_help(int argc,const char ** argv)2404 static int kdb_help(int argc, const char **argv)
2405 {
2406 	kdbtab_t *kt;
2407 
2408 	kdb_printf("%-15.15s %-20.20s %s\n", "Command", "Usage", "Description");
2409 	kdb_printf("-----------------------------"
2410 		   "-----------------------------\n");
2411 	list_for_each_entry(kt, &kdb_cmds_head, list_node) {
2412 		char *space = "";
2413 		if (KDB_FLAG(CMD_INTERRUPT))
2414 			return 0;
2415 		if (!kdb_check_flags(kt->flags, kdb_cmd_enabled, true))
2416 			continue;
2417 		if (strlen(kt->usage) > 20)
2418 			space = "\n                                    ";
2419 		kdb_printf("%-15.15s %-20s%s%s\n", kt->name,
2420 			   kt->usage, space, kt->help);
2421 	}
2422 	return 0;
2423 }
2424 
2425 /*
2426  * kdb_kill - This function implements the 'kill' commands.
2427  */
kdb_kill(int argc,const char ** argv)2428 static int kdb_kill(int argc, const char **argv)
2429 {
2430 	long sig, pid;
2431 	char *endp;
2432 	struct task_struct *p;
2433 
2434 	if (argc != 2)
2435 		return KDB_ARGCOUNT;
2436 
2437 	sig = simple_strtol(argv[1], &endp, 0);
2438 	if (*endp)
2439 		return KDB_BADINT;
2440 	if ((sig >= 0) || !valid_signal(-sig)) {
2441 		kdb_printf("Invalid signal parameter.<-signal>\n");
2442 		return 0;
2443 	}
2444 	sig = -sig;
2445 
2446 	pid = simple_strtol(argv[2], &endp, 0);
2447 	if (*endp)
2448 		return KDB_BADINT;
2449 	if (pid <= 0) {
2450 		kdb_printf("Process ID must be large than 0.\n");
2451 		return 0;
2452 	}
2453 
2454 	/* Find the process. */
2455 	p = find_task_by_pid_ns(pid, &init_pid_ns);
2456 	if (!p) {
2457 		kdb_printf("The specified process isn't found.\n");
2458 		return 0;
2459 	}
2460 	p = p->group_leader;
2461 	kdb_send_sig(p, sig);
2462 	return 0;
2463 }
2464 
2465 /*
2466  * Most of this code has been lifted from kernel/timer.c::sys_sysinfo().
2467  * I cannot call that code directly from kdb, it has an unconditional
2468  * cli()/sti() and calls routines that take locks which can stop the debugger.
2469  */
kdb_sysinfo(struct sysinfo * val)2470 static void kdb_sysinfo(struct sysinfo *val)
2471 {
2472 	u64 uptime = ktime_get_mono_fast_ns();
2473 
2474 	memset(val, 0, sizeof(*val));
2475 	val->uptime = div_u64(uptime, NSEC_PER_SEC);
2476 	val->loads[0] = avenrun[0];
2477 	val->loads[1] = avenrun[1];
2478 	val->loads[2] = avenrun[2];
2479 	val->procs = nr_threads-1;
2480 	si_meminfo(val);
2481 
2482 	return;
2483 }
2484 
2485 /*
2486  * kdb_summary - This function implements the 'summary' command.
2487  */
kdb_summary(int argc,const char ** argv)2488 static int kdb_summary(int argc, const char **argv)
2489 {
2490 	time64_t now;
2491 	struct sysinfo val;
2492 
2493 	if (argc)
2494 		return KDB_ARGCOUNT;
2495 
2496 	kdb_printf("sysname    %s\n", init_uts_ns.name.sysname);
2497 	kdb_printf("release    %s\n", init_uts_ns.name.release);
2498 	kdb_printf("version    %s\n", init_uts_ns.name.version);
2499 	kdb_printf("machine    %s\n", init_uts_ns.name.machine);
2500 	kdb_printf("nodename   %s\n", init_uts_ns.name.nodename);
2501 	kdb_printf("domainname %s\n", init_uts_ns.name.domainname);
2502 
2503 	now = __ktime_get_real_seconds();
2504 	kdb_printf("date       %ptTs tz_minuteswest %d\n", &now, sys_tz.tz_minuteswest);
2505 	kdb_sysinfo(&val);
2506 	kdb_printf("uptime     ");
2507 	if (val.uptime > (24*60*60)) {
2508 		int days = val.uptime / (24*60*60);
2509 		val.uptime %= (24*60*60);
2510 		kdb_printf("%d day%s ", days, str_plural(days));
2511 	}
2512 	kdb_printf("%02ld:%02ld\n", val.uptime/(60*60), (val.uptime/60)%60);
2513 
2514 	kdb_printf("load avg   %ld.%02ld %ld.%02ld %ld.%02ld\n",
2515 		LOAD_INT(val.loads[0]), LOAD_FRAC(val.loads[0]),
2516 		LOAD_INT(val.loads[1]), LOAD_FRAC(val.loads[1]),
2517 		LOAD_INT(val.loads[2]), LOAD_FRAC(val.loads[2]));
2518 
2519 	/* Display in kilobytes */
2520 #define K(x) ((x) << (PAGE_SHIFT - 10))
2521 	kdb_printf("\nMemTotal:       %8lu kB\nMemFree:        %8lu kB\n"
2522 		   "Buffers:        %8lu kB\n",
2523 		   K(val.totalram), K(val.freeram), K(val.bufferram));
2524 	return 0;
2525 }
2526 
2527 /*
2528  * kdb_per_cpu - This function implements the 'per_cpu' command.
2529  */
kdb_per_cpu(int argc,const char ** argv)2530 static int kdb_per_cpu(int argc, const char **argv)
2531 {
2532 	char fmtstr[64];
2533 	int cpu, diag, nextarg = 1;
2534 	unsigned long addr, symaddr, val, bytesperword = 0, whichcpu = ~0UL;
2535 
2536 	if (argc < 1 || argc > 3)
2537 		return KDB_ARGCOUNT;
2538 
2539 	diag = kdbgetaddrarg(argc, argv, &nextarg, &symaddr, NULL, NULL);
2540 	if (diag)
2541 		return diag;
2542 
2543 	if (argc >= 2) {
2544 		diag = kdbgetularg(argv[2], &bytesperword);
2545 		if (diag)
2546 			return diag;
2547 	}
2548 	if (!bytesperword)
2549 		bytesperword = KDB_WORD_SIZE;
2550 	else if (bytesperword > KDB_WORD_SIZE)
2551 		return KDB_BADWIDTH;
2552 	sprintf(fmtstr, "%%0%dlx ", (int)(2*bytesperword));
2553 	if (argc >= 3) {
2554 		diag = kdbgetularg(argv[3], &whichcpu);
2555 		if (diag)
2556 			return diag;
2557 		if (whichcpu >= nr_cpu_ids || !cpu_online(whichcpu)) {
2558 			kdb_printf("cpu %ld is not online\n", whichcpu);
2559 			return KDB_BADCPUNUM;
2560 		}
2561 	}
2562 
2563 	/* Most architectures use __per_cpu_offset[cpu], some use
2564 	 * __per_cpu_offset(cpu), smp has no __per_cpu_offset.
2565 	 */
2566 #ifdef	__per_cpu_offset
2567 #define KDB_PCU(cpu) __per_cpu_offset(cpu)
2568 #else
2569 #ifdef	CONFIG_SMP
2570 #define KDB_PCU(cpu) __per_cpu_offset[cpu]
2571 #else
2572 #define KDB_PCU(cpu) 0
2573 #endif
2574 #endif
2575 	for_each_online_cpu(cpu) {
2576 		if (KDB_FLAG(CMD_INTERRUPT))
2577 			return 0;
2578 
2579 		if (whichcpu != ~0UL && whichcpu != cpu)
2580 			continue;
2581 		addr = symaddr + KDB_PCU(cpu);
2582 		diag = kdb_getword(&val, addr, bytesperword);
2583 		if (diag) {
2584 			kdb_printf("%5d " kdb_bfd_vma_fmt0 " - unable to "
2585 				   "read, diag=%d\n", cpu, addr, diag);
2586 			continue;
2587 		}
2588 		kdb_printf("%5d ", cpu);
2589 		kdb_md_line(fmtstr, addr,
2590 			bytesperword == KDB_WORD_SIZE,
2591 			1, bytesperword, 1, 1, 0);
2592 	}
2593 #undef KDB_PCU
2594 	return 0;
2595 }
2596 
2597 /*
2598  * display help for the use of cmd | grep pattern
2599  */
kdb_grep_help(int argc,const char ** argv)2600 static int kdb_grep_help(int argc, const char **argv)
2601 {
2602 	kdb_printf("Usage of  cmd args | grep pattern:\n");
2603 	kdb_printf("  Any command's output may be filtered through an ");
2604 	kdb_printf("emulated 'pipe'.\n");
2605 	kdb_printf("  'grep' is just a key word.\n");
2606 	kdb_printf("  The pattern may include a very limited set of "
2607 		   "metacharacters:\n");
2608 	kdb_printf("   pattern or ^pattern or pattern$ or ^pattern$\n");
2609 	kdb_printf("  And if there are spaces in the pattern, you may "
2610 		   "quote it:\n");
2611 	kdb_printf("   \"pat tern\" or \"^pat tern\" or \"pat tern$\""
2612 		   " or \"^pat tern$\"\n");
2613 	return 0;
2614 }
2615 
2616 /**
2617  * kdb_register() - This function is used to register a kernel debugger
2618  *                  command.
2619  * @cmd: pointer to kdb command
2620  *
2621  * Note that it's the job of the caller to keep the memory for the cmd
2622  * allocated until unregister is called.
2623  */
kdb_register(kdbtab_t * cmd)2624 int kdb_register(kdbtab_t *cmd)
2625 {
2626 	kdbtab_t *kp;
2627 
2628 	list_for_each_entry(kp, &kdb_cmds_head, list_node) {
2629 		if (strcmp(kp->name, cmd->name) == 0) {
2630 			kdb_printf("Duplicate kdb cmd: %s, func %p help %s\n",
2631 				   cmd->name, cmd->func, cmd->help);
2632 			return 1;
2633 		}
2634 	}
2635 
2636 	list_add_tail(&cmd->list_node, &kdb_cmds_head);
2637 	return 0;
2638 }
2639 EXPORT_SYMBOL_GPL(kdb_register);
2640 
2641 /**
2642  * kdb_register_table() - This function is used to register a kdb command
2643  *                        table.
2644  * @kp: pointer to kdb command table
2645  * @len: length of kdb command table
2646  */
kdb_register_table(kdbtab_t * kp,size_t len)2647 void kdb_register_table(kdbtab_t *kp, size_t len)
2648 {
2649 	while (len--) {
2650 		list_add_tail(&kp->list_node, &kdb_cmds_head);
2651 		kp++;
2652 	}
2653 }
2654 
2655 /**
2656  * kdb_unregister() - This function is used to unregister a kernel debugger
2657  *                    command. It is generally called when a module which
2658  *                    implements kdb command is unloaded.
2659  * @cmd: pointer to kdb command
2660  */
kdb_unregister(kdbtab_t * cmd)2661 void kdb_unregister(kdbtab_t *cmd)
2662 {
2663 	list_del(&cmd->list_node);
2664 }
2665 EXPORT_SYMBOL_GPL(kdb_unregister);
2666 
2667 static kdbtab_t maintab[] = {
2668 	{	.name = "md",
2669 		.func = kdb_md,
2670 		.usage = "<vaddr>",
2671 		.help = "Display Memory Contents, also mdWcN, e.g. md8c1",
2672 		.minlen = 1,
2673 		.flags = KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS,
2674 	},
2675 	{	.name = "mdr",
2676 		.func = kdb_md,
2677 		.usage = "<vaddr> <bytes>",
2678 		.help = "Display Raw Memory",
2679 		.flags = KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS,
2680 	},
2681 	{	.name = "mdp",
2682 		.func = kdb_md,
2683 		.usage = "<paddr> <bytes>",
2684 		.help = "Display Physical Memory",
2685 		.flags = KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS,
2686 	},
2687 	{	.name = "mds",
2688 		.func = kdb_md,
2689 		.usage = "<vaddr>",
2690 		.help = "Display Memory Symbolically",
2691 		.flags = KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS,
2692 	},
2693 	{	.name = "mm",
2694 		.func = kdb_mm,
2695 		.usage = "<vaddr> <contents>",
2696 		.help = "Modify Memory Contents",
2697 		.flags = KDB_ENABLE_MEM_WRITE | KDB_REPEAT_NO_ARGS,
2698 	},
2699 	{	.name = "go",
2700 		.func = kdb_go,
2701 		.usage = "[<vaddr>]",
2702 		.help = "Continue Execution",
2703 		.minlen = 1,
2704 		.flags = KDB_ENABLE_REG_WRITE |
2705 			     KDB_ENABLE_ALWAYS_SAFE_NO_ARGS,
2706 	},
2707 	{	.name = "rd",
2708 		.func = kdb_rd,
2709 		.usage = "",
2710 		.help = "Display Registers",
2711 		.flags = KDB_ENABLE_REG_READ,
2712 	},
2713 	{	.name = "rm",
2714 		.func = kdb_rm,
2715 		.usage = "<reg> <contents>",
2716 		.help = "Modify Registers",
2717 		.flags = KDB_ENABLE_REG_WRITE,
2718 	},
2719 	{	.name = "ef",
2720 		.func = kdb_ef,
2721 		.usage = "<vaddr>",
2722 		.help = "Display exception frame",
2723 		.flags = KDB_ENABLE_MEM_READ,
2724 	},
2725 	{	.name = "bt",
2726 		.func = kdb_bt,
2727 		.usage = "[<vaddr>]",
2728 		.help = "Stack traceback",
2729 		.minlen = 1,
2730 		.flags = KDB_ENABLE_MEM_READ | KDB_ENABLE_INSPECT_NO_ARGS,
2731 	},
2732 	{	.name = "btp",
2733 		.func = kdb_bt,
2734 		.usage = "<pid>",
2735 		.help = "Display stack for process <pid>",
2736 		.flags = KDB_ENABLE_INSPECT,
2737 	},
2738 	{	.name = "bta",
2739 		.func = kdb_bt,
2740 		.usage = "[<state_chars>|A]",
2741 		.help = "Backtrace all processes whose state matches",
2742 		.flags = KDB_ENABLE_INSPECT,
2743 	},
2744 	{	.name = "btc",
2745 		.func = kdb_bt,
2746 		.usage = "",
2747 		.help = "Backtrace current process on each cpu",
2748 		.flags = KDB_ENABLE_INSPECT,
2749 	},
2750 	{	.name = "btt",
2751 		.func = kdb_bt,
2752 		.usage = "<vaddr>",
2753 		.help = "Backtrace process given its struct task address",
2754 		.flags = KDB_ENABLE_MEM_READ | KDB_ENABLE_INSPECT_NO_ARGS,
2755 	},
2756 	{	.name = "env",
2757 		.func = kdb_env,
2758 		.usage = "",
2759 		.help = "Show environment variables",
2760 		.flags = KDB_ENABLE_ALWAYS_SAFE,
2761 	},
2762 	{	.name = "set",
2763 		.func = kdb_set,
2764 		.usage = "",
2765 		.help = "Set environment variables",
2766 		.flags = KDB_ENABLE_ALWAYS_SAFE,
2767 	},
2768 	{	.name = "help",
2769 		.func = kdb_help,
2770 		.usage = "",
2771 		.help = "Display Help Message",
2772 		.minlen = 1,
2773 		.flags = KDB_ENABLE_ALWAYS_SAFE,
2774 	},
2775 	{	.name = "?",
2776 		.func = kdb_help,
2777 		.usage = "",
2778 		.help = "Display Help Message",
2779 		.flags = KDB_ENABLE_ALWAYS_SAFE,
2780 	},
2781 	{	.name = "cpu",
2782 		.func = kdb_cpu,
2783 		.usage = "<cpunum>",
2784 		.help = "Switch to new cpu",
2785 		.flags = KDB_ENABLE_ALWAYS_SAFE_NO_ARGS,
2786 	},
2787 	{	.name = "kgdb",
2788 		.func = kdb_kgdb,
2789 		.usage = "",
2790 		.help = "Enter kgdb mode",
2791 		.flags = 0,
2792 	},
2793 	{	.name = "ps",
2794 		.func = kdb_ps,
2795 		.usage = "[<state_chars>|A]",
2796 		.help = "Display active task list",
2797 		.flags = KDB_ENABLE_INSPECT,
2798 	},
2799 	{	.name = "pid",
2800 		.func = kdb_pid,
2801 		.usage = "<pidnum>",
2802 		.help = "Switch to another task",
2803 		.flags = KDB_ENABLE_INSPECT,
2804 	},
2805 	{	.name = "reboot",
2806 		.func = kdb_reboot,
2807 		.usage = "",
2808 		.help = "Reboot the machine immediately",
2809 		.flags = KDB_ENABLE_REBOOT,
2810 	},
2811 #if defined(CONFIG_MODULES)
2812 	{	.name = "lsmod",
2813 		.func = kdb_lsmod,
2814 		.usage = "",
2815 		.help = "List loaded kernel modules",
2816 		.flags = KDB_ENABLE_INSPECT,
2817 	},
2818 #endif
2819 #if defined(CONFIG_MAGIC_SYSRQ)
2820 	{	.name = "sr",
2821 		.func = kdb_sr,
2822 		.usage = "<key>",
2823 		.help = "Magic SysRq key",
2824 		.flags = KDB_ENABLE_ALWAYS_SAFE,
2825 	},
2826 #endif
2827 #if defined(CONFIG_PRINTK)
2828 	{	.name = "dmesg",
2829 		.func = kdb_dmesg,
2830 		.usage = "[lines]",
2831 		.help = "Display syslog buffer",
2832 		.flags = KDB_ENABLE_ALWAYS_SAFE,
2833 	},
2834 #endif
2835 	{	.name = "defcmd",
2836 		.func = kdb_defcmd,
2837 		.usage = "name \"usage\" \"help\"",
2838 		.help = "Define a set of commands, down to endefcmd",
2839 		/*
2840 		 * Macros are always safe because when executed each
2841 		 * internal command re-enters kdb_parse() and is safety
2842 		 * checked individually.
2843 		 */
2844 		.flags = KDB_ENABLE_ALWAYS_SAFE,
2845 	},
2846 	{	.name = "kill",
2847 		.func = kdb_kill,
2848 		.usage = "<-signal> <pid>",
2849 		.help = "Send a signal to a process",
2850 		.flags = KDB_ENABLE_SIGNAL,
2851 	},
2852 	{	.name = "summary",
2853 		.func = kdb_summary,
2854 		.usage = "",
2855 		.help = "Summarize the system",
2856 		.minlen = 4,
2857 		.flags = KDB_ENABLE_ALWAYS_SAFE,
2858 	},
2859 	{	.name = "per_cpu",
2860 		.func = kdb_per_cpu,
2861 		.usage = "<sym> [<bytes>] [<cpu>]",
2862 		.help = "Display per_cpu variables",
2863 		.minlen = 3,
2864 		.flags = KDB_ENABLE_MEM_READ,
2865 	},
2866 	{	.name = "grephelp",
2867 		.func = kdb_grep_help,
2868 		.usage = "",
2869 		.help = "Display help on | grep",
2870 		.flags = KDB_ENABLE_ALWAYS_SAFE,
2871 	},
2872 };
2873 
2874 static kdbtab_t nmicmd = {
2875 	.name = "disable_nmi",
2876 	.func = kdb_disable_nmi,
2877 	.usage = "",
2878 	.help = "Disable NMI entry to KDB",
2879 	.flags = KDB_ENABLE_ALWAYS_SAFE,
2880 };
2881 
2882 /* Initialize the kdb command table. */
kdb_inittab(void)2883 static void __init kdb_inittab(void)
2884 {
2885 	kdb_register_table(maintab, ARRAY_SIZE(maintab));
2886 	if (arch_kgdb_ops.enable_nmi)
2887 		kdb_register_table(&nmicmd, 1);
2888 }
2889 
2890 /* Execute any commands defined in kdb_cmds.  */
kdb_cmd_init(void)2891 static void __init kdb_cmd_init(void)
2892 {
2893 	int i, diag;
2894 	for (i = 0; kdb_cmds[i]; ++i) {
2895 		diag = kdb_parse(kdb_cmds[i]);
2896 		if (diag)
2897 			kdb_printf("kdb command %s failed, kdb diag %d\n",
2898 				kdb_cmds[i], diag);
2899 	}
2900 	if (defcmd_in_progress) {
2901 		kdb_printf("Incomplete 'defcmd' set, forcing endefcmd\n");
2902 		kdb_parse("endefcmd");
2903 	}
2904 }
2905 
2906 /* Initialize kdb_printf, breakpoint tables and kdb state */
kdb_init(int lvl)2907 void __init kdb_init(int lvl)
2908 {
2909 	static int kdb_init_lvl = KDB_NOT_INITIALIZED;
2910 	int i;
2911 
2912 	if (kdb_init_lvl == KDB_INIT_FULL || lvl <= kdb_init_lvl)
2913 		return;
2914 	for (i = kdb_init_lvl; i < lvl; i++) {
2915 		switch (i) {
2916 		case KDB_NOT_INITIALIZED:
2917 			kdb_inittab();		/* Initialize Command Table */
2918 			kdb_initbptab();	/* Initialize Breakpoints */
2919 			break;
2920 		case KDB_INIT_EARLY:
2921 			kdb_cmd_init();		/* Build kdb_cmds tables */
2922 			break;
2923 		}
2924 	}
2925 	kdb_init_lvl = lvl;
2926 }
2927