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