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