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