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