Back to home page

OSCL-LXR

 
 

    


0001 /*
0002  * Kernel Debugger Architecture Independent Main Code
0003  *
0004  * This file is subject to the terms and conditions of the GNU General Public
0005  * License.  See the file "COPYING" in the main directory of this archive
0006  * for more details.
0007  *
0008  * Copyright (C) 1999-2004 Silicon Graphics, Inc.  All Rights Reserved.
0009  * Copyright (C) 2000 Stephane Eranian <eranian@hpl.hp.com>
0010  * Xscale (R) modifications copyright (C) 2003 Intel Corporation.
0011  * Copyright (c) 2009 Wind River Systems, Inc.  All Rights Reserved.
0012  */
0013 
0014 #include <linux/ctype.h>
0015 #include <linux/types.h>
0016 #include <linux/string.h>
0017 #include <linux/kernel.h>
0018 #include <linux/kmsg_dump.h>
0019 #include <linux/reboot.h>
0020 #include <linux/sched.h>
0021 #include <linux/sched/loadavg.h>
0022 #include <linux/sched/stat.h>
0023 #include <linux/sched/debug.h>
0024 #include <linux/sysrq.h>
0025 #include <linux/smp.h>
0026 #include <linux/utsname.h>
0027 #include <linux/vmalloc.h>
0028 #include <linux/atomic.h>
0029 #include <linux/moduleparam.h>
0030 #include <linux/mm.h>
0031 #include <linux/init.h>
0032 #include <linux/kallsyms.h>
0033 #include <linux/kgdb.h>
0034 #include <linux/kdb.h>
0035 #include <linux/notifier.h>
0036 #include <linux/interrupt.h>
0037 #include <linux/delay.h>
0038 #include <linux/nmi.h>
0039 #include <linux/time.h>
0040 #include <linux/ptrace.h>
0041 #include <linux/sysctl.h>
0042 #include <linux/cpu.h>
0043 #include <linux/kdebug.h>
0044 #include <linux/proc_fs.h>
0045 #include <linux/uaccess.h>
0046 #include <linux/slab.h>
0047 #include <linux/security.h>
0048 #include "kdb_private.h"
0049 
0050 #undef  MODULE_PARAM_PREFIX
0051 #define MODULE_PARAM_PREFIX "kdb."
0052 
0053 static int kdb_cmd_enabled = CONFIG_KDB_DEFAULT_ENABLE;
0054 module_param_named(cmd_enable, kdb_cmd_enabled, int, 0600);
0055 
0056 char kdb_grep_string[KDB_GREP_STRLEN];
0057 int kdb_grepping_flag;
0058 EXPORT_SYMBOL(kdb_grepping_flag);
0059 int kdb_grep_leading;
0060 int kdb_grep_trailing;
0061 
0062 /*
0063  * Kernel debugger state flags
0064  */
0065 unsigned int kdb_flags;
0066 
0067 /*
0068  * kdb_lock protects updates to kdb_initial_cpu.  Used to
0069  * single thread processors through the kernel debugger.
0070  */
0071 int kdb_initial_cpu = -1;   /* cpu number that owns kdb */
0072 int kdb_nextline = 1;
0073 int kdb_state;          /* General KDB state */
0074 
0075 struct task_struct *kdb_current_task;
0076 struct pt_regs *kdb_current_regs;
0077 
0078 const char *kdb_diemsg;
0079 static int kdb_go_count;
0080 #ifdef CONFIG_KDB_CONTINUE_CATASTROPHIC
0081 static unsigned int kdb_continue_catastrophic =
0082     CONFIG_KDB_CONTINUE_CATASTROPHIC;
0083 #else
0084 static unsigned int kdb_continue_catastrophic;
0085 #endif
0086 
0087 /* kdb_cmds_head describes the available commands. */
0088 static LIST_HEAD(kdb_cmds_head);
0089 
0090 typedef struct _kdbmsg {
0091     int km_diag;    /* kdb diagnostic */
0092     char    *km_msg;    /* Corresponding message text */
0093 } kdbmsg_t;
0094 
0095 #define KDBMSG(msgnum, text) \
0096     { KDB_##msgnum, text }
0097 
0098 static kdbmsg_t kdbmsgs[] = {
0099     KDBMSG(NOTFOUND, "Command Not Found"),
0100     KDBMSG(ARGCOUNT, "Improper argument count, see usage."),
0101     KDBMSG(BADWIDTH, "Illegal value for BYTESPERWORD use 1, 2, 4 or 8, "
0102            "8 is only allowed on 64 bit systems"),
0103     KDBMSG(BADRADIX, "Illegal value for RADIX use 8, 10 or 16"),
0104     KDBMSG(NOTENV, "Cannot find environment variable"),
0105     KDBMSG(NOENVVALUE, "Environment variable should have value"),
0106     KDBMSG(NOTIMP, "Command not implemented"),
0107     KDBMSG(ENVFULL, "Environment full"),
0108     KDBMSG(ENVBUFFULL, "Environment buffer full"),
0109     KDBMSG(TOOMANYBPT, "Too many breakpoints defined"),
0110 #ifdef CONFIG_CPU_XSCALE
0111     KDBMSG(TOOMANYDBREGS, "More breakpoints than ibcr registers defined"),
0112 #else
0113     KDBMSG(TOOMANYDBREGS, "More breakpoints than db registers defined"),
0114 #endif
0115     KDBMSG(DUPBPT, "Duplicate breakpoint address"),
0116     KDBMSG(BPTNOTFOUND, "Breakpoint not found"),
0117     KDBMSG(BADMODE, "Invalid IDMODE"),
0118     KDBMSG(BADINT, "Illegal numeric value"),
0119     KDBMSG(INVADDRFMT, "Invalid symbolic address format"),
0120     KDBMSG(BADREG, "Invalid register name"),
0121     KDBMSG(BADCPUNUM, "Invalid cpu number"),
0122     KDBMSG(BADLENGTH, "Invalid length field"),
0123     KDBMSG(NOBP, "No Breakpoint exists"),
0124     KDBMSG(BADADDR, "Invalid address"),
0125     KDBMSG(NOPERM, "Permission denied"),
0126 };
0127 #undef KDBMSG
0128 
0129 static const int __nkdb_err = ARRAY_SIZE(kdbmsgs);
0130 
0131 
0132 /*
0133  * Initial environment.   This is all kept static and local to
0134  * this file.   We don't want to rely on the memory allocation
0135  * mechanisms in the kernel, so we use a very limited allocate-only
0136  * heap for new and altered environment variables.  The entire
0137  * environment is limited to a fixed number of entries (add more
0138  * to __env[] if required) and a fixed amount of heap (add more to
0139  * KDB_ENVBUFSIZE if required).
0140  */
0141 
0142 static char *__env[31] = {
0143 #if defined(CONFIG_SMP)
0144     "PROMPT=[%d]kdb> ",
0145 #else
0146     "PROMPT=kdb> ",
0147 #endif
0148     "MOREPROMPT=more> ",
0149     "RADIX=16",
0150     "MDCOUNT=8",        /* lines of md output */
0151     KDB_PLATFORM_ENV,
0152     "DTABCOUNT=30",
0153     "NOSECT=1",
0154 };
0155 
0156 static const int __nenv = ARRAY_SIZE(__env);
0157 
0158 struct task_struct *kdb_curr_task(int cpu)
0159 {
0160     struct task_struct *p = curr_task(cpu);
0161 #ifdef  _TIF_MCA_INIT
0162     if ((task_thread_info(p)->flags & _TIF_MCA_INIT) && KDB_TSK(cpu))
0163         p = krp->p;
0164 #endif
0165     return p;
0166 }
0167 
0168 /*
0169  * Update the permissions flags (kdb_cmd_enabled) to match the
0170  * current lockdown state.
0171  *
0172  * Within this function the calls to security_locked_down() are "lazy". We
0173  * avoid calling them if the current value of kdb_cmd_enabled already excludes
0174  * flags that might be subject to lockdown. Additionally we deliberately check
0175  * the lockdown flags independently (even though read lockdown implies write
0176  * lockdown) since that results in both simpler code and clearer messages to
0177  * the user on first-time debugger entry.
0178  *
0179  * The permission masks during a read+write lockdown permits the following
0180  * flags: INSPECT, SIGNAL, REBOOT (and ALWAYS_SAFE).
0181  *
0182  * The INSPECT commands are not blocked during lockdown because they are
0183  * not arbitrary memory reads. INSPECT covers the backtrace family (sometimes
0184  * forcing them to have no arguments) and lsmod. These commands do expose
0185  * some kernel state but do not allow the developer seated at the console to
0186  * choose what state is reported. SIGNAL and REBOOT should not be controversial,
0187  * given these are allowed for root during lockdown already.
0188  */
0189 static void kdb_check_for_lockdown(void)
0190 {
0191     const int write_flags = KDB_ENABLE_MEM_WRITE |
0192                 KDB_ENABLE_REG_WRITE |
0193                 KDB_ENABLE_FLOW_CTRL;
0194     const int read_flags = KDB_ENABLE_MEM_READ |
0195                    KDB_ENABLE_REG_READ;
0196 
0197     bool need_to_lockdown_write = false;
0198     bool need_to_lockdown_read = false;
0199 
0200     if (kdb_cmd_enabled & (KDB_ENABLE_ALL | write_flags))
0201         need_to_lockdown_write =
0202             security_locked_down(LOCKDOWN_DBG_WRITE_KERNEL);
0203 
0204     if (kdb_cmd_enabled & (KDB_ENABLE_ALL | read_flags))
0205         need_to_lockdown_read =
0206             security_locked_down(LOCKDOWN_DBG_READ_KERNEL);
0207 
0208     /* De-compose KDB_ENABLE_ALL if required */
0209     if (need_to_lockdown_write || need_to_lockdown_read)
0210         if (kdb_cmd_enabled & KDB_ENABLE_ALL)
0211             kdb_cmd_enabled = KDB_ENABLE_MASK & ~KDB_ENABLE_ALL;
0212 
0213     if (need_to_lockdown_write)
0214         kdb_cmd_enabled &= ~write_flags;
0215 
0216     if (need_to_lockdown_read)
0217         kdb_cmd_enabled &= ~read_flags;
0218 }
0219 
0220 /*
0221  * Check whether the flags of the current command, the permissions of the kdb
0222  * console and the lockdown state allow a command to be run.
0223  */
0224 static bool kdb_check_flags(kdb_cmdflags_t flags, int permissions,
0225                    bool no_args)
0226 {
0227     /* permissions comes from userspace so needs massaging slightly */
0228     permissions &= KDB_ENABLE_MASK;
0229     permissions |= KDB_ENABLE_ALWAYS_SAFE;
0230 
0231     /* some commands change group when launched with no arguments */
0232     if (no_args)
0233         permissions |= permissions << KDB_ENABLE_NO_ARGS_SHIFT;
0234 
0235     flags |= KDB_ENABLE_ALL;
0236 
0237     return permissions & flags;
0238 }
0239 
0240 /*
0241  * kdbgetenv - This function will return the character string value of
0242  *  an environment variable.
0243  * Parameters:
0244  *  match   A character string representing an environment variable.
0245  * Returns:
0246  *  NULL    No environment variable matches 'match'
0247  *  char*   Pointer to string value of environment variable.
0248  */
0249 char *kdbgetenv(const char *match)
0250 {
0251     char **ep = __env;
0252     int matchlen = strlen(match);
0253     int i;
0254 
0255     for (i = 0; i < __nenv; i++) {
0256         char *e = *ep++;
0257 
0258         if (!e)
0259             continue;
0260 
0261         if ((strncmp(match, e, matchlen) == 0)
0262          && ((e[matchlen] == '\0')
0263            || (e[matchlen] == '='))) {
0264             char *cp = strchr(e, '=');
0265             return cp ? ++cp : "";
0266         }
0267     }
0268     return NULL;
0269 }
0270 
0271 /*
0272  * kdballocenv - This function is used to allocate bytes for
0273  *  environment entries.
0274  * Parameters:
0275  *  match   A character string representing a numeric value
0276  * Outputs:
0277  *  *value  the unsigned long representation of the env variable 'match'
0278  * Returns:
0279  *  Zero on success, a kdb diagnostic on failure.
0280  * Remarks:
0281  *  We use a static environment buffer (envbuffer) to hold the values
0282  *  of dynamically generated environment variables (see kdb_set).  Buffer
0283  *  space once allocated is never free'd, so over time, the amount of space
0284  *  (currently 512 bytes) will be exhausted if env variables are changed
0285  *  frequently.
0286  */
0287 static char *kdballocenv(size_t bytes)
0288 {
0289 #define KDB_ENVBUFSIZE  512
0290     static char envbuffer[KDB_ENVBUFSIZE];
0291     static int envbufsize;
0292     char *ep = NULL;
0293 
0294     if ((KDB_ENVBUFSIZE - envbufsize) >= bytes) {
0295         ep = &envbuffer[envbufsize];
0296         envbufsize += bytes;
0297     }
0298     return ep;
0299 }
0300 
0301 /*
0302  * kdbgetulenv - This function will return the value of an unsigned
0303  *  long-valued environment variable.
0304  * Parameters:
0305  *  match   A character string representing a numeric value
0306  * Outputs:
0307  *  *value  the unsigned long representation of the env variable 'match'
0308  * Returns:
0309  *  Zero on success, a kdb diagnostic on failure.
0310  */
0311 static int kdbgetulenv(const char *match, unsigned long *value)
0312 {
0313     char *ep;
0314 
0315     ep = kdbgetenv(match);
0316     if (!ep)
0317         return KDB_NOTENV;
0318     if (strlen(ep) == 0)
0319         return KDB_NOENVVALUE;
0320 
0321     *value = simple_strtoul(ep, NULL, 0);
0322 
0323     return 0;
0324 }
0325 
0326 /*
0327  * kdbgetintenv - This function will return the value of an
0328  *  integer-valued environment variable.
0329  * Parameters:
0330  *  match   A character string representing an integer-valued env variable
0331  * Outputs:
0332  *  *value  the integer representation of the environment variable 'match'
0333  * Returns:
0334  *  Zero on success, a kdb diagnostic on failure.
0335  */
0336 int kdbgetintenv(const char *match, int *value)
0337 {
0338     unsigned long val;
0339     int diag;
0340 
0341     diag = kdbgetulenv(match, &val);
0342     if (!diag)
0343         *value = (int) val;
0344     return diag;
0345 }
0346 
0347 /*
0348  * kdb_setenv() - Alter an existing environment variable or create a new one.
0349  * @var: Name of the variable
0350  * @val: Value of the variable
0351  *
0352  * Return: Zero on success, a kdb diagnostic on failure.
0353  */
0354 static int kdb_setenv(const char *var, const char *val)
0355 {
0356     int i;
0357     char *ep;
0358     size_t varlen, vallen;
0359 
0360     varlen = strlen(var);
0361     vallen = strlen(val);
0362     ep = kdballocenv(varlen + vallen + 2);
0363     if (ep == (char *)0)
0364         return KDB_ENVBUFFULL;
0365 
0366     sprintf(ep, "%s=%s", var, val);
0367 
0368     for (i = 0; i < __nenv; i++) {
0369         if (__env[i]
0370          && ((strncmp(__env[i], var, varlen) == 0)
0371            && ((__env[i][varlen] == '\0')
0372             || (__env[i][varlen] == '=')))) {
0373             __env[i] = ep;
0374             return 0;
0375         }
0376     }
0377 
0378     /*
0379      * Wasn't existing variable.  Fit into slot.
0380      */
0381     for (i = 0; i < __nenv-1; i++) {
0382         if (__env[i] == (char *)0) {
0383             __env[i] = ep;
0384             return 0;
0385         }
0386     }
0387 
0388     return KDB_ENVFULL;
0389 }
0390 
0391 /*
0392  * kdb_printenv() - Display the current environment variables.
0393  */
0394 static void kdb_printenv(void)
0395 {
0396     int i;
0397 
0398     for (i = 0; i < __nenv; i++) {
0399         if (__env[i])
0400             kdb_printf("%s\n", __env[i]);
0401     }
0402 }
0403 
0404 /*
0405  * kdbgetularg - This function will convert a numeric string into an
0406  *  unsigned long value.
0407  * Parameters:
0408  *  arg A character string representing a numeric value
0409  * Outputs:
0410  *  *value  the unsigned long representation of arg.
0411  * Returns:
0412  *  Zero on success, a kdb diagnostic on failure.
0413  */
0414 int kdbgetularg(const char *arg, unsigned long *value)
0415 {
0416     char *endp;
0417     unsigned long val;
0418 
0419     val = simple_strtoul(arg, &endp, 0);
0420 
0421     if (endp == arg) {
0422         /*
0423          * Also try base 16, for us folks too lazy to type the
0424          * leading 0x...
0425          */
0426         val = simple_strtoul(arg, &endp, 16);
0427         if (endp == arg)
0428             return KDB_BADINT;
0429     }
0430 
0431     *value = val;
0432 
0433     return 0;
0434 }
0435 
0436 int kdbgetu64arg(const char *arg, u64 *value)
0437 {
0438     char *endp;
0439     u64 val;
0440 
0441     val = simple_strtoull(arg, &endp, 0);
0442 
0443     if (endp == arg) {
0444 
0445         val = simple_strtoull(arg, &endp, 16);
0446         if (endp == arg)
0447             return KDB_BADINT;
0448     }
0449 
0450     *value = val;
0451 
0452     return 0;
0453 }
0454 
0455 /*
0456  * kdb_set - This function implements the 'set' command.  Alter an
0457  *  existing environment variable or create a new one.
0458  */
0459 int kdb_set(int argc, const char **argv)
0460 {
0461     /*
0462      * we can be invoked two ways:
0463      *   set var=value    argv[1]="var", argv[2]="value"
0464      *   set var = value  argv[1]="var", argv[2]="=", argv[3]="value"
0465      * - if the latter, shift 'em down.
0466      */
0467     if (argc == 3) {
0468         argv[2] = argv[3];
0469         argc--;
0470     }
0471 
0472     if (argc != 2)
0473         return KDB_ARGCOUNT;
0474 
0475     /*
0476      * Censor sensitive variables
0477      */
0478     if (strcmp(argv[1], "PROMPT") == 0 &&
0479         !kdb_check_flags(KDB_ENABLE_MEM_READ, kdb_cmd_enabled, false))
0480         return KDB_NOPERM;
0481 
0482     /*
0483      * Check for internal variables
0484      */
0485     if (strcmp(argv[1], "KDBDEBUG") == 0) {
0486         unsigned int debugflags;
0487         char *cp;
0488 
0489         debugflags = simple_strtoul(argv[2], &cp, 0);
0490         if (cp == argv[2] || debugflags & ~KDB_DEBUG_FLAG_MASK) {
0491             kdb_printf("kdb: illegal debug flags '%s'\n",
0492                     argv[2]);
0493             return 0;
0494         }
0495         kdb_flags = (kdb_flags & ~KDB_DEBUG(MASK))
0496             | (debugflags << KDB_DEBUG_FLAG_SHIFT);
0497 
0498         return 0;
0499     }
0500 
0501     /*
0502      * Tokenizer squashed the '=' sign.  argv[1] is variable
0503      * name, argv[2] = value.
0504      */
0505     return kdb_setenv(argv[1], argv[2]);
0506 }
0507 
0508 static int kdb_check_regs(void)
0509 {
0510     if (!kdb_current_regs) {
0511         kdb_printf("No current kdb registers."
0512                "  You may need to select another task\n");
0513         return KDB_BADREG;
0514     }
0515     return 0;
0516 }
0517 
0518 /*
0519  * kdbgetaddrarg - This function is responsible for parsing an
0520  *  address-expression and returning the value of the expression,
0521  *  symbol name, and offset to the caller.
0522  *
0523  *  The argument may consist of a numeric value (decimal or
0524  *  hexadecimal), a symbol name, a register name (preceded by the
0525  *  percent sign), an environment variable with a numeric value
0526  *  (preceded by a dollar sign) or a simple arithmetic expression
0527  *  consisting of a symbol name, +/-, and a numeric constant value
0528  *  (offset).
0529  * Parameters:
0530  *  argc    - count of arguments in argv
0531  *  argv    - argument vector
0532  *  *nextarg - index to next unparsed argument in argv[]
0533  *  regs    - Register state at time of KDB entry
0534  * Outputs:
0535  *  *value  - receives the value of the address-expression
0536  *  *offset - receives the offset specified, if any
0537  *  *name   - receives the symbol name, if any
0538  *  *nextarg - index to next unparsed argument in argv[]
0539  * Returns:
0540  *  zero is returned on success, a kdb diagnostic code is
0541  *      returned on error.
0542  */
0543 int kdbgetaddrarg(int argc, const char **argv, int *nextarg,
0544           unsigned long *value,  long *offset,
0545           char **name)
0546 {
0547     unsigned long addr;
0548     unsigned long off = 0;
0549     int positive;
0550     int diag;
0551     int found = 0;
0552     char *symname;
0553     char symbol = '\0';
0554     char *cp;
0555     kdb_symtab_t symtab;
0556 
0557     /*
0558      * If the enable flags prohibit both arbitrary memory access
0559      * and flow control then there are no reasonable grounds to
0560      * provide symbol lookup.
0561      */
0562     if (!kdb_check_flags(KDB_ENABLE_MEM_READ | KDB_ENABLE_FLOW_CTRL,
0563                  kdb_cmd_enabled, false))
0564         return KDB_NOPERM;
0565 
0566     /*
0567      * Process arguments which follow the following syntax:
0568      *
0569      *  symbol | numeric-address [+/- numeric-offset]
0570      *  %register
0571      *  $environment-variable
0572      */
0573 
0574     if (*nextarg > argc)
0575         return KDB_ARGCOUNT;
0576 
0577     symname = (char *)argv[*nextarg];
0578 
0579     /*
0580      * If there is no whitespace between the symbol
0581      * or address and the '+' or '-' symbols, we
0582      * remember the character and replace it with a
0583      * null so the symbol/value can be properly parsed
0584      */
0585     cp = strpbrk(symname, "+-");
0586     if (cp != NULL) {
0587         symbol = *cp;
0588         *cp++ = '\0';
0589     }
0590 
0591     if (symname[0] == '$') {
0592         diag = kdbgetulenv(&symname[1], &addr);
0593         if (diag)
0594             return diag;
0595     } else if (symname[0] == '%') {
0596         diag = kdb_check_regs();
0597         if (diag)
0598             return diag;
0599         /* Implement register values with % at a later time as it is
0600          * arch optional.
0601          */
0602         return KDB_NOTIMP;
0603     } else {
0604         found = kdbgetsymval(symname, &symtab);
0605         if (found) {
0606             addr = symtab.sym_start;
0607         } else {
0608             diag = kdbgetularg(argv[*nextarg], &addr);
0609             if (diag)
0610                 return diag;
0611         }
0612     }
0613 
0614     if (!found)
0615         found = kdbnearsym(addr, &symtab);
0616 
0617     (*nextarg)++;
0618 
0619     if (name)
0620         *name = symname;
0621     if (value)
0622         *value = addr;
0623     if (offset && name && *name)
0624         *offset = addr - symtab.sym_start;
0625 
0626     if ((*nextarg > argc)
0627      && (symbol == '\0'))
0628         return 0;
0629 
0630     /*
0631      * check for +/- and offset
0632      */
0633 
0634     if (symbol == '\0') {
0635         if ((argv[*nextarg][0] != '+')
0636          && (argv[*nextarg][0] != '-')) {
0637             /*
0638              * Not our argument.  Return.
0639              */
0640             return 0;
0641         } else {
0642             positive = (argv[*nextarg][0] == '+');
0643             (*nextarg)++;
0644         }
0645     } else
0646         positive = (symbol == '+');
0647 
0648     /*
0649      * Now there must be an offset!
0650      */
0651     if ((*nextarg > argc)
0652      && (symbol == '\0')) {
0653         return KDB_INVADDRFMT;
0654     }
0655 
0656     if (!symbol) {
0657         cp = (char *)argv[*nextarg];
0658         (*nextarg)++;
0659     }
0660 
0661     diag = kdbgetularg(cp, &off);
0662     if (diag)
0663         return diag;
0664 
0665     if (!positive)
0666         off = -off;
0667 
0668     if (offset)
0669         *offset += off;
0670 
0671     if (value)
0672         *value += off;
0673 
0674     return 0;
0675 }
0676 
0677 static void kdb_cmderror(int diag)
0678 {
0679     int i;
0680 
0681     if (diag >= 0) {
0682         kdb_printf("no error detected (diagnostic is %d)\n", diag);
0683         return;
0684     }
0685 
0686     for (i = 0; i < __nkdb_err; i++) {
0687         if (kdbmsgs[i].km_diag == diag) {
0688             kdb_printf("diag: %d: %s\n", diag, kdbmsgs[i].km_msg);
0689             return;
0690         }
0691     }
0692 
0693     kdb_printf("Unknown diag %d\n", -diag);
0694 }
0695 
0696 /*
0697  * kdb_defcmd, kdb_defcmd2 - This function implements the 'defcmd'
0698  *  command which defines one command as a set of other commands,
0699  *  terminated by endefcmd.  kdb_defcmd processes the initial
0700  *  'defcmd' command, kdb_defcmd2 is invoked from kdb_parse for
0701  *  the following commands until 'endefcmd'.
0702  * Inputs:
0703  *  argc    argument count
0704  *  argv    argument vector
0705  * Returns:
0706  *  zero for success, a kdb diagnostic if error
0707  */
0708 struct kdb_macro {
0709     kdbtab_t cmd;           /* Macro command */
0710     struct list_head statements;    /* Associated statement list */
0711 };
0712 
0713 struct kdb_macro_statement {
0714     char *statement;        /* Statement text */
0715     struct list_head list_node; /* Statement list node */
0716 };
0717 
0718 static struct kdb_macro *kdb_macro;
0719 static bool defcmd_in_progress;
0720 
0721 /* Forward references */
0722 static int kdb_exec_defcmd(int argc, const char **argv);
0723 
0724 static int kdb_defcmd2(const char *cmdstr, const char *argv0)
0725 {
0726     struct kdb_macro_statement *kms;
0727 
0728     if (!kdb_macro)
0729         return KDB_NOTIMP;
0730 
0731     if (strcmp(argv0, "endefcmd") == 0) {
0732         defcmd_in_progress = false;
0733         if (!list_empty(&kdb_macro->statements))
0734             kdb_register(&kdb_macro->cmd);
0735         return 0;
0736     }
0737 
0738     kms = kmalloc(sizeof(*kms), GFP_KDB);
0739     if (!kms) {
0740         kdb_printf("Could not allocate new kdb macro command: %s\n",
0741                cmdstr);
0742         return KDB_NOTIMP;
0743     }
0744 
0745     kms->statement = kdb_strdup(cmdstr, GFP_KDB);
0746     list_add_tail(&kms->list_node, &kdb_macro->statements);
0747 
0748     return 0;
0749 }
0750 
0751 static int kdb_defcmd(int argc, const char **argv)
0752 {
0753     kdbtab_t *mp;
0754 
0755     if (defcmd_in_progress) {
0756         kdb_printf("kdb: nested defcmd detected, assuming missing "
0757                "endefcmd\n");
0758         kdb_defcmd2("endefcmd", "endefcmd");
0759     }
0760     if (argc == 0) {
0761         kdbtab_t *kp;
0762         struct kdb_macro *kmp;
0763         struct kdb_macro_statement *kms;
0764 
0765         list_for_each_entry(kp, &kdb_cmds_head, list_node) {
0766             if (kp->func == kdb_exec_defcmd) {
0767                 kdb_printf("defcmd %s \"%s\" \"%s\"\n",
0768                        kp->name, kp->usage, kp->help);
0769                 kmp = container_of(kp, struct kdb_macro, cmd);
0770                 list_for_each_entry(kms, &kmp->statements,
0771                             list_node)
0772                     kdb_printf("%s", kms->statement);
0773                 kdb_printf("endefcmd\n");
0774             }
0775         }
0776         return 0;
0777     }
0778     if (argc != 3)
0779         return KDB_ARGCOUNT;
0780     if (in_dbg_master()) {
0781         kdb_printf("Command only available during kdb_init()\n");
0782         return KDB_NOTIMP;
0783     }
0784     kdb_macro = kzalloc(sizeof(*kdb_macro), GFP_KDB);
0785     if (!kdb_macro)
0786         goto fail_defcmd;
0787 
0788     mp = &kdb_macro->cmd;
0789     mp->func = kdb_exec_defcmd;
0790     mp->minlen = 0;
0791     mp->flags = KDB_ENABLE_ALWAYS_SAFE;
0792     mp->name = kdb_strdup(argv[1], GFP_KDB);
0793     if (!mp->name)
0794         goto fail_name;
0795     mp->usage = kdb_strdup(argv[2], GFP_KDB);
0796     if (!mp->usage)
0797         goto fail_usage;
0798     mp->help = kdb_strdup(argv[3], GFP_KDB);
0799     if (!mp->help)
0800         goto fail_help;
0801     if (mp->usage[0] == '"') {
0802         strcpy(mp->usage, argv[2]+1);
0803         mp->usage[strlen(mp->usage)-1] = '\0';
0804     }
0805     if (mp->help[0] == '"') {
0806         strcpy(mp->help, argv[3]+1);
0807         mp->help[strlen(mp->help)-1] = '\0';
0808     }
0809 
0810     INIT_LIST_HEAD(&kdb_macro->statements);
0811     defcmd_in_progress = true;
0812     return 0;
0813 fail_help:
0814     kfree(mp->usage);
0815 fail_usage:
0816     kfree(mp->name);
0817 fail_name:
0818     kfree(kdb_macro);
0819 fail_defcmd:
0820     kdb_printf("Could not allocate new kdb_macro entry for %s\n", argv[1]);
0821     return KDB_NOTIMP;
0822 }
0823 
0824 /*
0825  * kdb_exec_defcmd - Execute the set of commands associated with this
0826  *  defcmd name.
0827  * Inputs:
0828  *  argc    argument count
0829  *  argv    argument vector
0830  * Returns:
0831  *  zero for success, a kdb diagnostic if error
0832  */
0833 static int kdb_exec_defcmd(int argc, const char **argv)
0834 {
0835     int ret;
0836     kdbtab_t *kp;
0837     struct kdb_macro *kmp;
0838     struct kdb_macro_statement *kms;
0839 
0840     if (argc != 0)
0841         return KDB_ARGCOUNT;
0842 
0843     list_for_each_entry(kp, &kdb_cmds_head, list_node) {
0844         if (strcmp(kp->name, argv[0]) == 0)
0845             break;
0846     }
0847     if (list_entry_is_head(kp, &kdb_cmds_head, list_node)) {
0848         kdb_printf("kdb_exec_defcmd: could not find commands for %s\n",
0849                argv[0]);
0850         return KDB_NOTIMP;
0851     }
0852     kmp = container_of(kp, struct kdb_macro, cmd);
0853     list_for_each_entry(kms, &kmp->statements, list_node) {
0854         /*
0855          * Recursive use of kdb_parse, do not use argv after this point.
0856          */
0857         argv = NULL;
0858         kdb_printf("[%s]kdb> %s\n", kmp->cmd.name, kms->statement);
0859         ret = kdb_parse(kms->statement);
0860         if (ret)
0861             return ret;
0862     }
0863     return 0;
0864 }
0865 
0866 /* Command history */
0867 #define KDB_CMD_HISTORY_COUNT   32
0868 #define CMD_BUFLEN      200 /* kdb_printf: max printline
0869                      * size == 256 */
0870 static unsigned int cmd_head, cmd_tail;
0871 static unsigned int cmdptr;
0872 static char cmd_hist[KDB_CMD_HISTORY_COUNT][CMD_BUFLEN];
0873 static char cmd_cur[CMD_BUFLEN];
0874 
0875 /*
0876  * The "str" argument may point to something like  | grep xyz
0877  */
0878 static void parse_grep(const char *str)
0879 {
0880     int len;
0881     char    *cp = (char *)str, *cp2;
0882 
0883     /* sanity check: we should have been called with the \ first */
0884     if (*cp != '|')
0885         return;
0886     cp++;
0887     while (isspace(*cp))
0888         cp++;
0889     if (!str_has_prefix(cp, "grep ")) {
0890         kdb_printf("invalid 'pipe', see grephelp\n");
0891         return;
0892     }
0893     cp += 5;
0894     while (isspace(*cp))
0895         cp++;
0896     cp2 = strchr(cp, '\n');
0897     if (cp2)
0898         *cp2 = '\0'; /* remove the trailing newline */
0899     len = strlen(cp);
0900     if (len == 0) {
0901         kdb_printf("invalid 'pipe', see grephelp\n");
0902         return;
0903     }
0904     /* now cp points to a nonzero length search string */
0905     if (*cp == '"') {
0906         /* allow it be "x y z" by removing the "'s - there must
0907            be two of them */
0908         cp++;
0909         cp2 = strchr(cp, '"');
0910         if (!cp2) {
0911             kdb_printf("invalid quoted string, see grephelp\n");
0912             return;
0913         }
0914         *cp2 = '\0'; /* end the string where the 2nd " was */
0915     }
0916     kdb_grep_leading = 0;
0917     if (*cp == '^') {
0918         kdb_grep_leading = 1;
0919         cp++;
0920     }
0921     len = strlen(cp);
0922     kdb_grep_trailing = 0;
0923     if (*(cp+len-1) == '$') {
0924         kdb_grep_trailing = 1;
0925         *(cp+len-1) = '\0';
0926     }
0927     len = strlen(cp);
0928     if (!len)
0929         return;
0930     if (len >= KDB_GREP_STRLEN) {
0931         kdb_printf("search string too long\n");
0932         return;
0933     }
0934     strcpy(kdb_grep_string, cp);
0935     kdb_grepping_flag++;
0936     return;
0937 }
0938 
0939 /*
0940  * kdb_parse - Parse the command line, search the command table for a
0941  *  matching command and invoke the command function.  This
0942  *  function may be called recursively, if it is, the second call
0943  *  will overwrite argv and cbuf.  It is the caller's
0944  *  responsibility to save their argv if they recursively call
0945  *  kdb_parse().
0946  * Parameters:
0947  *      cmdstr  The input command line to be parsed.
0948  *  regs    The registers at the time kdb was entered.
0949  * Returns:
0950  *  Zero for success, a kdb diagnostic if failure.
0951  * Remarks:
0952  *  Limited to 20 tokens.
0953  *
0954  *  Real rudimentary tokenization. Basically only whitespace
0955  *  is considered a token delimiter (but special consideration
0956  *  is taken of the '=' sign as used by the 'set' command).
0957  *
0958  *  The algorithm used to tokenize the input string relies on
0959  *  there being at least one whitespace (or otherwise useless)
0960  *  character between tokens as the character immediately following
0961  *  the token is altered in-place to a null-byte to terminate the
0962  *  token string.
0963  */
0964 
0965 #define MAXARGC 20
0966 
0967 int kdb_parse(const char *cmdstr)
0968 {
0969     static char *argv[MAXARGC];
0970     static int argc;
0971     static char cbuf[CMD_BUFLEN+2];
0972     char *cp;
0973     char *cpp, quoted;
0974     kdbtab_t *tp;
0975     int escaped, ignore_errors = 0, check_grep = 0;
0976 
0977     /*
0978      * First tokenize the command string.
0979      */
0980     cp = (char *)cmdstr;
0981 
0982     if (KDB_FLAG(CMD_INTERRUPT)) {
0983         /* Previous command was interrupted, newline must not
0984          * repeat the command */
0985         KDB_FLAG_CLEAR(CMD_INTERRUPT);
0986         KDB_STATE_SET(PAGER);
0987         argc = 0;   /* no repeat */
0988     }
0989 
0990     if (*cp != '\n' && *cp != '\0') {
0991         argc = 0;
0992         cpp = cbuf;
0993         while (*cp) {
0994             /* skip whitespace */
0995             while (isspace(*cp))
0996                 cp++;
0997             if ((*cp == '\0') || (*cp == '\n') ||
0998                 (*cp == '#' && !defcmd_in_progress))
0999                 break;
1000             /* special case: check for | grep pattern */
1001             if (*cp == '|') {
1002                 check_grep++;
1003                 break;
1004             }
1005             if (cpp >= cbuf + CMD_BUFLEN) {
1006                 kdb_printf("kdb_parse: command buffer "
1007                        "overflow, command ignored\n%s\n",
1008                        cmdstr);
1009                 return KDB_NOTFOUND;
1010             }
1011             if (argc >= MAXARGC - 1) {
1012                 kdb_printf("kdb_parse: too many arguments, "
1013                        "command ignored\n%s\n", cmdstr);
1014                 return KDB_NOTFOUND;
1015             }
1016             argv[argc++] = cpp;
1017             escaped = 0;
1018             quoted = '\0';
1019             /* Copy to next unquoted and unescaped
1020              * whitespace or '=' */
1021             while (*cp && *cp != '\n' &&
1022                    (escaped || quoted || !isspace(*cp))) {
1023                 if (cpp >= cbuf + CMD_BUFLEN)
1024                     break;
1025                 if (escaped) {
1026                     escaped = 0;
1027                     *cpp++ = *cp++;
1028                     continue;
1029                 }
1030                 if (*cp == '\\') {
1031                     escaped = 1;
1032                     ++cp;
1033                     continue;
1034                 }
1035                 if (*cp == quoted)
1036                     quoted = '\0';
1037                 else if (*cp == '\'' || *cp == '"')
1038                     quoted = *cp;
1039                 *cpp = *cp++;
1040                 if (*cpp == '=' && !quoted)
1041                     break;
1042                 ++cpp;
1043             }
1044             *cpp++ = '\0';  /* Squash a ws or '=' character */
1045         }
1046     }
1047     if (!argc)
1048         return 0;
1049     if (check_grep)
1050         parse_grep(cp);
1051     if (defcmd_in_progress) {
1052         int result = kdb_defcmd2(cmdstr, argv[0]);
1053         if (!defcmd_in_progress) {
1054             argc = 0;   /* avoid repeat on endefcmd */
1055             *(argv[0]) = '\0';
1056         }
1057         return result;
1058     }
1059     if (argv[0][0] == '-' && argv[0][1] &&
1060         (argv[0][1] < '0' || argv[0][1] > '9')) {
1061         ignore_errors = 1;
1062         ++argv[0];
1063     }
1064 
1065     list_for_each_entry(tp, &kdb_cmds_head, list_node) {
1066         /*
1067          * If this command is allowed to be abbreviated,
1068          * check to see if this is it.
1069          */
1070         if (tp->minlen && (strlen(argv[0]) <= tp->minlen) &&
1071             (strncmp(argv[0], tp->name, tp->minlen) == 0))
1072             break;
1073 
1074         if (strcmp(argv[0], tp->name) == 0)
1075             break;
1076     }
1077 
1078     /*
1079      * If we don't find a command by this name, see if the first
1080      * few characters of this match any of the known commands.
1081      * e.g., md1c20 should match md.
1082      */
1083     if (list_entry_is_head(tp, &kdb_cmds_head, list_node)) {
1084         list_for_each_entry(tp, &kdb_cmds_head, list_node) {
1085             if (strncmp(argv[0], tp->name, strlen(tp->name)) == 0)
1086                 break;
1087         }
1088     }
1089 
1090     if (!list_entry_is_head(tp, &kdb_cmds_head, list_node)) {
1091         int result;
1092 
1093         if (!kdb_check_flags(tp->flags, kdb_cmd_enabled, argc <= 1))
1094             return KDB_NOPERM;
1095 
1096         KDB_STATE_SET(CMD);
1097         result = (*tp->func)(argc-1, (const char **)argv);
1098         if (result && ignore_errors && result > KDB_CMD_GO)
1099             result = 0;
1100         KDB_STATE_CLEAR(CMD);
1101 
1102         if (tp->flags & KDB_REPEAT_WITH_ARGS)
1103             return result;
1104 
1105         argc = tp->flags & KDB_REPEAT_NO_ARGS ? 1 : 0;
1106         if (argv[argc])
1107             *(argv[argc]) = '\0';
1108         return result;
1109     }
1110 
1111     /*
1112      * If the input with which we were presented does not
1113      * map to an existing command, attempt to parse it as an
1114      * address argument and display the result.   Useful for
1115      * obtaining the address of a variable, or the nearest symbol
1116      * to an address contained in a register.
1117      */
1118     {
1119         unsigned long value;
1120         char *name = NULL;
1121         long offset;
1122         int nextarg = 0;
1123 
1124         if (kdbgetaddrarg(0, (const char **)argv, &nextarg,
1125                   &value, &offset, &name)) {
1126             return KDB_NOTFOUND;
1127         }
1128 
1129         kdb_printf("%s = ", argv[0]);
1130         kdb_symbol_print(value, NULL, KDB_SP_DEFAULT);
1131         kdb_printf("\n");
1132         return 0;
1133     }
1134 }
1135 
1136 
1137 static int handle_ctrl_cmd(char *cmd)
1138 {
1139 #define CTRL_P  16
1140 #define CTRL_N  14
1141 
1142     /* initial situation */
1143     if (cmd_head == cmd_tail)
1144         return 0;
1145     switch (*cmd) {
1146     case CTRL_P:
1147         if (cmdptr != cmd_tail)
1148             cmdptr = (cmdptr + KDB_CMD_HISTORY_COUNT - 1) %
1149                  KDB_CMD_HISTORY_COUNT;
1150         strscpy(cmd_cur, cmd_hist[cmdptr], CMD_BUFLEN);
1151         return 1;
1152     case CTRL_N:
1153         if (cmdptr != cmd_head)
1154             cmdptr = (cmdptr+1) % KDB_CMD_HISTORY_COUNT;
1155         strscpy(cmd_cur, cmd_hist[cmdptr], CMD_BUFLEN);
1156         return 1;
1157     }
1158     return 0;
1159 }
1160 
1161 /*
1162  * kdb_reboot - This function implements the 'reboot' command.  Reboot
1163  *  the system immediately, or loop for ever on failure.
1164  */
1165 static int kdb_reboot(int argc, const char **argv)
1166 {
1167     emergency_restart();
1168     kdb_printf("Hmm, kdb_reboot did not reboot, spinning here\n");
1169     while (1)
1170         cpu_relax();
1171     /* NOTREACHED */
1172     return 0;
1173 }
1174 
1175 static void kdb_dumpregs(struct pt_regs *regs)
1176 {
1177     int old_lvl = console_loglevel;
1178     console_loglevel = CONSOLE_LOGLEVEL_MOTORMOUTH;
1179     kdb_trap_printk++;
1180     show_regs(regs);
1181     kdb_trap_printk--;
1182     kdb_printf("\n");
1183     console_loglevel = old_lvl;
1184 }
1185 
1186 static void kdb_set_current_task(struct task_struct *p)
1187 {
1188     kdb_current_task = p;
1189 
1190     if (kdb_task_has_cpu(p)) {
1191         kdb_current_regs = KDB_TSKREGS(kdb_process_cpu(p));
1192         return;
1193     }
1194     kdb_current_regs = NULL;
1195 }
1196 
1197 static void drop_newline(char *buf)
1198 {
1199     size_t len = strlen(buf);
1200 
1201     if (len == 0)
1202         return;
1203     if (*(buf + len - 1) == '\n')
1204         *(buf + len - 1) = '\0';
1205 }
1206 
1207 /*
1208  * kdb_local - The main code for kdb.  This routine is invoked on a
1209  *  specific processor, it is not global.  The main kdb() routine
1210  *  ensures that only one processor at a time is in this routine.
1211  *  This code is called with the real reason code on the first
1212  *  entry to a kdb session, thereafter it is called with reason
1213  *  SWITCH, even if the user goes back to the original cpu.
1214  * Inputs:
1215  *  reason      The reason KDB was invoked
1216  *  error       The hardware-defined error code
1217  *  regs        The exception frame at time of fault/breakpoint.
1218  *  db_result   Result code from the break or debug point.
1219  * Returns:
1220  *  0   KDB was invoked for an event which it wasn't responsible
1221  *  1   KDB handled the event for which it was invoked.
1222  *  KDB_CMD_GO  User typed 'go'.
1223  *  KDB_CMD_CPU User switched to another cpu.
1224  *  KDB_CMD_SS  Single step.
1225  */
1226 static int kdb_local(kdb_reason_t reason, int error, struct pt_regs *regs,
1227              kdb_dbtrap_t db_result)
1228 {
1229     char *cmdbuf;
1230     int diag;
1231     struct task_struct *kdb_current =
1232         kdb_curr_task(raw_smp_processor_id());
1233 
1234     KDB_DEBUG_STATE("kdb_local 1", reason);
1235 
1236     kdb_check_for_lockdown();
1237 
1238     kdb_go_count = 0;
1239     if (reason == KDB_REASON_DEBUG) {
1240         /* special case below */
1241     } else {
1242         kdb_printf("\nEntering kdb (current=0x%px, pid %d) ",
1243                kdb_current, kdb_current ? kdb_current->pid : 0);
1244 #if defined(CONFIG_SMP)
1245         kdb_printf("on processor %d ", raw_smp_processor_id());
1246 #endif
1247     }
1248 
1249     switch (reason) {
1250     case KDB_REASON_DEBUG:
1251     {
1252         /*
1253          * If re-entering kdb after a single step
1254          * command, don't print the message.
1255          */
1256         switch (db_result) {
1257         case KDB_DB_BPT:
1258             kdb_printf("\nEntering kdb (0x%px, pid %d) ",
1259                    kdb_current, kdb_current->pid);
1260 #if defined(CONFIG_SMP)
1261             kdb_printf("on processor %d ", raw_smp_processor_id());
1262 #endif
1263             kdb_printf("due to Debug @ " kdb_machreg_fmt "\n",
1264                    instruction_pointer(regs));
1265             break;
1266         case KDB_DB_SS:
1267             break;
1268         case KDB_DB_SSBPT:
1269             KDB_DEBUG_STATE("kdb_local 4", reason);
1270             return 1;   /* kdba_db_trap did the work */
1271         default:
1272             kdb_printf("kdb: Bad result from kdba_db_trap: %d\n",
1273                    db_result);
1274             break;
1275         }
1276 
1277     }
1278         break;
1279     case KDB_REASON_ENTER:
1280         if (KDB_STATE(KEYBOARD))
1281             kdb_printf("due to Keyboard Entry\n");
1282         else
1283             kdb_printf("due to KDB_ENTER()\n");
1284         break;
1285     case KDB_REASON_KEYBOARD:
1286         KDB_STATE_SET(KEYBOARD);
1287         kdb_printf("due to Keyboard Entry\n");
1288         break;
1289     case KDB_REASON_ENTER_SLAVE:
1290         /* drop through, slaves only get released via cpu switch */
1291     case KDB_REASON_SWITCH:
1292         kdb_printf("due to cpu switch\n");
1293         break;
1294     case KDB_REASON_OOPS:
1295         kdb_printf("Oops: %s\n", kdb_diemsg);
1296         kdb_printf("due to oops @ " kdb_machreg_fmt "\n",
1297                instruction_pointer(regs));
1298         kdb_dumpregs(regs);
1299         break;
1300     case KDB_REASON_SYSTEM_NMI:
1301         kdb_printf("due to System NonMaskable Interrupt\n");
1302         break;
1303     case KDB_REASON_NMI:
1304         kdb_printf("due to NonMaskable Interrupt @ "
1305                kdb_machreg_fmt "\n",
1306                instruction_pointer(regs));
1307         break;
1308     case KDB_REASON_SSTEP:
1309     case KDB_REASON_BREAK:
1310         kdb_printf("due to %s @ " kdb_machreg_fmt "\n",
1311                reason == KDB_REASON_BREAK ?
1312                "Breakpoint" : "SS trap", instruction_pointer(regs));
1313         /*
1314          * Determine if this breakpoint is one that we
1315          * are interested in.
1316          */
1317         if (db_result != KDB_DB_BPT) {
1318             kdb_printf("kdb: error return from kdba_bp_trap: %d\n",
1319                    db_result);
1320             KDB_DEBUG_STATE("kdb_local 6", reason);
1321             return 0;   /* Not for us, dismiss it */
1322         }
1323         break;
1324     case KDB_REASON_RECURSE:
1325         kdb_printf("due to Recursion @ " kdb_machreg_fmt "\n",
1326                instruction_pointer(regs));
1327         break;
1328     default:
1329         kdb_printf("kdb: unexpected reason code: %d\n", reason);
1330         KDB_DEBUG_STATE("kdb_local 8", reason);
1331         return 0;   /* Not for us, dismiss it */
1332     }
1333 
1334     while (1) {
1335         /*
1336          * Initialize pager context.
1337          */
1338         kdb_nextline = 1;
1339         KDB_STATE_CLEAR(SUPPRESS);
1340         kdb_grepping_flag = 0;
1341         /* ensure the old search does not leak into '/' commands */
1342         kdb_grep_string[0] = '\0';
1343 
1344         cmdbuf = cmd_cur;
1345         *cmdbuf = '\0';
1346         *(cmd_hist[cmd_head]) = '\0';
1347 
1348 do_full_getstr:
1349         /* PROMPT can only be set if we have MEM_READ permission. */
1350         snprintf(kdb_prompt_str, CMD_BUFLEN, kdbgetenv("PROMPT"),
1351              raw_smp_processor_id());
1352         if (defcmd_in_progress)
1353             strncat(kdb_prompt_str, "[defcmd]", CMD_BUFLEN);
1354 
1355         /*
1356          * Fetch command from keyboard
1357          */
1358         cmdbuf = kdb_getstr(cmdbuf, CMD_BUFLEN, kdb_prompt_str);
1359         if (*cmdbuf != '\n') {
1360             if (*cmdbuf < 32) {
1361                 if (cmdptr == cmd_head) {
1362                     strscpy(cmd_hist[cmd_head], cmd_cur,
1363                         CMD_BUFLEN);
1364                     *(cmd_hist[cmd_head] +
1365                       strlen(cmd_hist[cmd_head])-1) = '\0';
1366                 }
1367                 if (!handle_ctrl_cmd(cmdbuf))
1368                     *(cmd_cur+strlen(cmd_cur)-1) = '\0';
1369                 cmdbuf = cmd_cur;
1370                 goto do_full_getstr;
1371             } else {
1372                 strscpy(cmd_hist[cmd_head], cmd_cur,
1373                     CMD_BUFLEN);
1374             }
1375 
1376             cmd_head = (cmd_head+1) % KDB_CMD_HISTORY_COUNT;
1377             if (cmd_head == cmd_tail)
1378                 cmd_tail = (cmd_tail+1) % KDB_CMD_HISTORY_COUNT;
1379         }
1380 
1381         cmdptr = cmd_head;
1382         diag = kdb_parse(cmdbuf);
1383         if (diag == KDB_NOTFOUND) {
1384             drop_newline(cmdbuf);
1385             kdb_printf("Unknown kdb command: '%s'\n", cmdbuf);
1386             diag = 0;
1387         }
1388         if (diag == KDB_CMD_GO
1389          || diag == KDB_CMD_CPU
1390          || diag == KDB_CMD_SS
1391          || diag == KDB_CMD_KGDB)
1392             break;
1393 
1394         if (diag)
1395             kdb_cmderror(diag);
1396     }
1397     KDB_DEBUG_STATE("kdb_local 9", diag);
1398     return diag;
1399 }
1400 
1401 
1402 /*
1403  * kdb_print_state - Print the state data for the current processor
1404  *  for debugging.
1405  * Inputs:
1406  *  text        Identifies the debug point
1407  *  value       Any integer value to be printed, e.g. reason code.
1408  */
1409 void kdb_print_state(const char *text, int value)
1410 {
1411     kdb_printf("state: %s cpu %d value %d initial %d state %x\n",
1412            text, raw_smp_processor_id(), value, kdb_initial_cpu,
1413            kdb_state);
1414 }
1415 
1416 /*
1417  * kdb_main_loop - After initial setup and assignment of the
1418  *  controlling cpu, all cpus are in this loop.  One cpu is in
1419  *  control and will issue the kdb prompt, the others will spin
1420  *  until 'go' or cpu switch.
1421  *
1422  *  To get a consistent view of the kernel stacks for all
1423  *  processes, this routine is invoked from the main kdb code via
1424  *  an architecture specific routine.  kdba_main_loop is
1425  *  responsible for making the kernel stacks consistent for all
1426  *  processes, there should be no difference between a blocked
1427  *  process and a running process as far as kdb is concerned.
1428  * Inputs:
1429  *  reason      The reason KDB was invoked
1430  *  error       The hardware-defined error code
1431  *  reason2     kdb's current reason code.
1432  *          Initially error but can change
1433  *          according to kdb state.
1434  *  db_result   Result code from break or debug point.
1435  *  regs        The exception frame at time of fault/breakpoint.
1436  *          should always be valid.
1437  * Returns:
1438  *  0   KDB was invoked for an event which it wasn't responsible
1439  *  1   KDB handled the event for which it was invoked.
1440  */
1441 int kdb_main_loop(kdb_reason_t reason, kdb_reason_t reason2, int error,
1442           kdb_dbtrap_t db_result, struct pt_regs *regs)
1443 {
1444     int result = 1;
1445     /* Stay in kdb() until 'go', 'ss[b]' or an error */
1446     while (1) {
1447         /*
1448          * All processors except the one that is in control
1449          * will spin here.
1450          */
1451         KDB_DEBUG_STATE("kdb_main_loop 1", reason);
1452         while (KDB_STATE(HOLD_CPU)) {
1453             /* state KDB is turned off by kdb_cpu to see if the
1454              * other cpus are still live, each cpu in this loop
1455              * turns it back on.
1456              */
1457             if (!KDB_STATE(KDB))
1458                 KDB_STATE_SET(KDB);
1459         }
1460 
1461         KDB_STATE_CLEAR(SUPPRESS);
1462         KDB_DEBUG_STATE("kdb_main_loop 2", reason);
1463         if (KDB_STATE(LEAVING))
1464             break;  /* Another cpu said 'go' */
1465         /* Still using kdb, this processor is in control */
1466         result = kdb_local(reason2, error, regs, db_result);
1467         KDB_DEBUG_STATE("kdb_main_loop 3", result);
1468 
1469         if (result == KDB_CMD_CPU)
1470             break;
1471 
1472         if (result == KDB_CMD_SS) {
1473             KDB_STATE_SET(DOING_SS);
1474             break;
1475         }
1476 
1477         if (result == KDB_CMD_KGDB) {
1478             if (!KDB_STATE(DOING_KGDB))
1479                 kdb_printf("Entering please attach debugger "
1480                        "or use $D#44+ or $3#33\n");
1481             break;
1482         }
1483         if (result && result != 1 && result != KDB_CMD_GO)
1484             kdb_printf("\nUnexpected kdb_local return code %d\n",
1485                    result);
1486         KDB_DEBUG_STATE("kdb_main_loop 4", reason);
1487         break;
1488     }
1489     if (KDB_STATE(DOING_SS))
1490         KDB_STATE_CLEAR(SSBPT);
1491 
1492     /* Clean up any keyboard devices before leaving */
1493     kdb_kbd_cleanup_state();
1494 
1495     return result;
1496 }
1497 
1498 /*
1499  * kdb_mdr - This function implements the guts of the 'mdr', memory
1500  * read command.
1501  *  mdr  <addr arg>,<byte count>
1502  * Inputs:
1503  *  addr    Start address
1504  *  count   Number of bytes
1505  * Returns:
1506  *  Always 0.  Any errors are detected and printed by kdb_getarea.
1507  */
1508 static int kdb_mdr(unsigned long addr, unsigned int count)
1509 {
1510     unsigned char c;
1511     while (count--) {
1512         if (kdb_getarea(c, addr))
1513             return 0;
1514         kdb_printf("%02x", c);
1515         addr++;
1516     }
1517     kdb_printf("\n");
1518     return 0;
1519 }
1520 
1521 /*
1522  * kdb_md - This function implements the 'md', 'md1', 'md2', 'md4',
1523  *  'md8' 'mdr' and 'mds' commands.
1524  *
1525  *  md|mds  [<addr arg> [<line count> [<radix>]]]
1526  *  mdWcN   [<addr arg> [<line count> [<radix>]]]
1527  *      where W = is the width (1, 2, 4 or 8) and N is the count.
1528  *      for eg., md1c20 reads 20 bytes, 1 at a time.
1529  *  mdr  <addr arg>,<byte count>
1530  */
1531 static void kdb_md_line(const char *fmtstr, unsigned long addr,
1532             int symbolic, int nosect, int bytesperword,
1533             int num, int repeat, int phys)
1534 {
1535     /* print just one line of data */
1536     kdb_symtab_t symtab;
1537     char cbuf[32];
1538     char *c = cbuf;
1539     int i;
1540     int j;
1541     unsigned long word;
1542 
1543     memset(cbuf, '\0', sizeof(cbuf));
1544     if (phys)
1545         kdb_printf("phys " kdb_machreg_fmt0 " ", addr);
1546     else
1547         kdb_printf(kdb_machreg_fmt0 " ", addr);
1548 
1549     for (i = 0; i < num && repeat--; i++) {
1550         if (phys) {
1551             if (kdb_getphysword(&word, addr, bytesperword))
1552                 break;
1553         } else if (kdb_getword(&word, addr, bytesperword))
1554             break;
1555         kdb_printf(fmtstr, word);
1556         if (symbolic)
1557             kdbnearsym(word, &symtab);
1558         else
1559             memset(&symtab, 0, sizeof(symtab));
1560         if (symtab.sym_name) {
1561             kdb_symbol_print(word, &symtab, 0);
1562             if (!nosect) {
1563                 kdb_printf("\n");
1564                 kdb_printf("                       %s %s "
1565                        kdb_machreg_fmt " "
1566                        kdb_machreg_fmt " "
1567                        kdb_machreg_fmt, symtab.mod_name,
1568                        symtab.sec_name, symtab.sec_start,
1569                        symtab.sym_start, symtab.sym_end);
1570             }
1571             addr += bytesperword;
1572         } else {
1573             union {
1574                 u64 word;
1575                 unsigned char c[8];
1576             } wc;
1577             unsigned char *cp;
1578 #ifdef  __BIG_ENDIAN
1579             cp = wc.c + 8 - bytesperword;
1580 #else
1581             cp = wc.c;
1582 #endif
1583             wc.word = word;
1584 #define printable_char(c) \
1585     ({unsigned char __c = c; isascii(__c) && isprint(__c) ? __c : '.'; })
1586             for (j = 0; j < bytesperword; j++)
1587                 *c++ = printable_char(*cp++);
1588             addr += bytesperword;
1589 #undef printable_char
1590         }
1591     }
1592     kdb_printf("%*s %s\n", (int)((num-i)*(2*bytesperword + 1)+1),
1593            " ", cbuf);
1594 }
1595 
1596 static int kdb_md(int argc, const char **argv)
1597 {
1598     static unsigned long last_addr;
1599     static int last_radix, last_bytesperword, last_repeat;
1600     int radix = 16, mdcount = 8, bytesperword = KDB_WORD_SIZE, repeat;
1601     int nosect = 0;
1602     char fmtchar, fmtstr[64];
1603     unsigned long addr;
1604     unsigned long word;
1605     long offset = 0;
1606     int symbolic = 0;
1607     int valid = 0;
1608     int phys = 0;
1609     int raw = 0;
1610 
1611     kdbgetintenv("MDCOUNT", &mdcount);
1612     kdbgetintenv("RADIX", &radix);
1613     kdbgetintenv("BYTESPERWORD", &bytesperword);
1614 
1615     /* Assume 'md <addr>' and start with environment values */
1616     repeat = mdcount * 16 / bytesperword;
1617 
1618     if (strcmp(argv[0], "mdr") == 0) {
1619         if (argc == 2 || (argc == 0 && last_addr != 0))
1620             valid = raw = 1;
1621         else
1622             return KDB_ARGCOUNT;
1623     } else if (isdigit(argv[0][2])) {
1624         bytesperword = (int)(argv[0][2] - '0');
1625         if (bytesperword == 0) {
1626             bytesperword = last_bytesperword;
1627             if (bytesperword == 0)
1628                 bytesperword = 4;
1629         }
1630         last_bytesperword = bytesperword;
1631         repeat = mdcount * 16 / bytesperword;
1632         if (!argv[0][3])
1633             valid = 1;
1634         else if (argv[0][3] == 'c' && argv[0][4]) {
1635             char *p;
1636             repeat = simple_strtoul(argv[0] + 4, &p, 10);
1637             mdcount = ((repeat * bytesperword) + 15) / 16;
1638             valid = !*p;
1639         }
1640         last_repeat = repeat;
1641     } else if (strcmp(argv[0], "md") == 0)
1642         valid = 1;
1643     else if (strcmp(argv[0], "mds") == 0)
1644         valid = 1;
1645     else if (strcmp(argv[0], "mdp") == 0) {
1646         phys = valid = 1;
1647     }
1648     if (!valid)
1649         return KDB_NOTFOUND;
1650 
1651     if (argc == 0) {
1652         if (last_addr == 0)
1653             return KDB_ARGCOUNT;
1654         addr = last_addr;
1655         radix = last_radix;
1656         bytesperword = last_bytesperword;
1657         repeat = last_repeat;
1658         if (raw)
1659             mdcount = repeat;
1660         else
1661             mdcount = ((repeat * bytesperword) + 15) / 16;
1662     }
1663 
1664     if (argc) {
1665         unsigned long val;
1666         int diag, nextarg = 1;
1667         diag = kdbgetaddrarg(argc, argv, &nextarg, &addr,
1668                      &offset, NULL);
1669         if (diag)
1670             return diag;
1671         if (argc > nextarg+2)
1672             return KDB_ARGCOUNT;
1673 
1674         if (argc >= nextarg) {
1675             diag = kdbgetularg(argv[nextarg], &val);
1676             if (!diag) {
1677                 mdcount = (int) val;
1678                 if (raw)
1679                     repeat = mdcount;
1680                 else
1681                     repeat = mdcount * 16 / bytesperword;
1682             }
1683         }
1684         if (argc >= nextarg+1) {
1685             diag = kdbgetularg(argv[nextarg+1], &val);
1686             if (!diag)
1687                 radix = (int) val;
1688         }
1689     }
1690 
1691     if (strcmp(argv[0], "mdr") == 0) {
1692         int ret;
1693         last_addr = addr;
1694         ret = kdb_mdr(addr, mdcount);
1695         last_addr += mdcount;
1696         last_repeat = mdcount;
1697         last_bytesperword = bytesperword; // to make REPEAT happy
1698         return ret;
1699     }
1700 
1701     switch (radix) {
1702     case 10:
1703         fmtchar = 'd';
1704         break;
1705     case 16:
1706         fmtchar = 'x';
1707         break;
1708     case 8:
1709         fmtchar = 'o';
1710         break;
1711     default:
1712         return KDB_BADRADIX;
1713     }
1714 
1715     last_radix = radix;
1716 
1717     if (bytesperword > KDB_WORD_SIZE)
1718         return KDB_BADWIDTH;
1719 
1720     switch (bytesperword) {
1721     case 8:
1722         sprintf(fmtstr, "%%16.16l%c ", fmtchar);
1723         break;
1724     case 4:
1725         sprintf(fmtstr, "%%8.8l%c ", fmtchar);
1726         break;
1727     case 2:
1728         sprintf(fmtstr, "%%4.4l%c ", fmtchar);
1729         break;
1730     case 1:
1731         sprintf(fmtstr, "%%2.2l%c ", fmtchar);
1732         break;
1733     default:
1734         return KDB_BADWIDTH;
1735     }
1736 
1737     last_repeat = repeat;
1738     last_bytesperword = bytesperword;
1739 
1740     if (strcmp(argv[0], "mds") == 0) {
1741         symbolic = 1;
1742         /* Do not save these changes as last_*, they are temporary mds
1743          * overrides.
1744          */
1745         bytesperword = KDB_WORD_SIZE;
1746         repeat = mdcount;
1747         kdbgetintenv("NOSECT", &nosect);
1748     }
1749 
1750     /* Round address down modulo BYTESPERWORD */
1751 
1752     addr &= ~(bytesperword-1);
1753 
1754     while (repeat > 0) {
1755         unsigned long a;
1756         int n, z, num = (symbolic ? 1 : (16 / bytesperword));
1757 
1758         if (KDB_FLAG(CMD_INTERRUPT))
1759             return 0;
1760         for (a = addr, z = 0; z < repeat; a += bytesperword, ++z) {
1761             if (phys) {
1762                 if (kdb_getphysword(&word, a, bytesperword)
1763                         || word)
1764                     break;
1765             } else if (kdb_getword(&word, a, bytesperword) || word)
1766                 break;
1767         }
1768         n = min(num, repeat);
1769         kdb_md_line(fmtstr, addr, symbolic, nosect, bytesperword,
1770                 num, repeat, phys);
1771         addr += bytesperword * n;
1772         repeat -= n;
1773         z = (z + num - 1) / num;
1774         if (z > 2) {
1775             int s = num * (z-2);
1776             kdb_printf(kdb_machreg_fmt0 "-" kdb_machreg_fmt0
1777                    " zero suppressed\n",
1778                 addr, addr + bytesperword * s - 1);
1779             addr += bytesperword * s;
1780             repeat -= s;
1781         }
1782     }
1783     last_addr = addr;
1784 
1785     return 0;
1786 }
1787 
1788 /*
1789  * kdb_mm - This function implements the 'mm' command.
1790  *  mm address-expression new-value
1791  * Remarks:
1792  *  mm works on machine words, mmW works on bytes.
1793  */
1794 static int kdb_mm(int argc, const char **argv)
1795 {
1796     int diag;
1797     unsigned long addr;
1798     long offset = 0;
1799     unsigned long contents;
1800     int nextarg;
1801     int width;
1802 
1803     if (argv[0][2] && !isdigit(argv[0][2]))
1804         return KDB_NOTFOUND;
1805 
1806     if (argc < 2)
1807         return KDB_ARGCOUNT;
1808 
1809     nextarg = 1;
1810     diag = kdbgetaddrarg(argc, argv, &nextarg, &addr, &offset, NULL);
1811     if (diag)
1812         return diag;
1813 
1814     if (nextarg > argc)
1815         return KDB_ARGCOUNT;
1816     diag = kdbgetaddrarg(argc, argv, &nextarg, &contents, NULL, NULL);
1817     if (diag)
1818         return diag;
1819 
1820     if (nextarg != argc + 1)
1821         return KDB_ARGCOUNT;
1822 
1823     width = argv[0][2] ? (argv[0][2] - '0') : (KDB_WORD_SIZE);
1824     diag = kdb_putword(addr, contents, width);
1825     if (diag)
1826         return diag;
1827 
1828     kdb_printf(kdb_machreg_fmt " = " kdb_machreg_fmt "\n", addr, contents);
1829 
1830     return 0;
1831 }
1832 
1833 /*
1834  * kdb_go - This function implements the 'go' command.
1835  *  go [address-expression]
1836  */
1837 static int kdb_go(int argc, const char **argv)
1838 {
1839     unsigned long addr;
1840     int diag;
1841     int nextarg;
1842     long offset;
1843 
1844     if (raw_smp_processor_id() != kdb_initial_cpu) {
1845         kdb_printf("go must execute on the entry cpu, "
1846                "please use \"cpu %d\" and then execute go\n",
1847                kdb_initial_cpu);
1848         return KDB_BADCPUNUM;
1849     }
1850     if (argc == 1) {
1851         nextarg = 1;
1852         diag = kdbgetaddrarg(argc, argv, &nextarg,
1853                      &addr, &offset, NULL);
1854         if (diag)
1855             return diag;
1856     } else if (argc) {
1857         return KDB_ARGCOUNT;
1858     }
1859 
1860     diag = KDB_CMD_GO;
1861     if (KDB_FLAG(CATASTROPHIC)) {
1862         kdb_printf("Catastrophic error detected\n");
1863         kdb_printf("kdb_continue_catastrophic=%d, ",
1864             kdb_continue_catastrophic);
1865         if (kdb_continue_catastrophic == 0 && kdb_go_count++ == 0) {
1866             kdb_printf("type go a second time if you really want "
1867                    "to continue\n");
1868             return 0;
1869         }
1870         if (kdb_continue_catastrophic == 2) {
1871             kdb_printf("forcing reboot\n");
1872             kdb_reboot(0, NULL);
1873         }
1874         kdb_printf("attempting to continue\n");
1875     }
1876     return diag;
1877 }
1878 
1879 /*
1880  * kdb_rd - This function implements the 'rd' command.
1881  */
1882 static int kdb_rd(int argc, const char **argv)
1883 {
1884     int len = kdb_check_regs();
1885 #if DBG_MAX_REG_NUM > 0
1886     int i;
1887     char *rname;
1888     int rsize;
1889     u64 reg64;
1890     u32 reg32;
1891     u16 reg16;
1892     u8 reg8;
1893 
1894     if (len)
1895         return len;
1896 
1897     for (i = 0; i < DBG_MAX_REG_NUM; i++) {
1898         rsize = dbg_reg_def[i].size * 2;
1899         if (rsize > 16)
1900             rsize = 2;
1901         if (len + strlen(dbg_reg_def[i].name) + 4 + rsize > 80) {
1902             len = 0;
1903             kdb_printf("\n");
1904         }
1905         if (len)
1906             len += kdb_printf("  ");
1907         switch(dbg_reg_def[i].size * 8) {
1908         case 8:
1909             rname = dbg_get_reg(i, &reg8, kdb_current_regs);
1910             if (!rname)
1911                 break;
1912             len += kdb_printf("%s: %02x", rname, reg8);
1913             break;
1914         case 16:
1915             rname = dbg_get_reg(i, &reg16, kdb_current_regs);
1916             if (!rname)
1917                 break;
1918             len += kdb_printf("%s: %04x", rname, reg16);
1919             break;
1920         case 32:
1921             rname = dbg_get_reg(i, &reg32, kdb_current_regs);
1922             if (!rname)
1923                 break;
1924             len += kdb_printf("%s: %08x", rname, reg32);
1925             break;
1926         case 64:
1927             rname = dbg_get_reg(i, &reg64, kdb_current_regs);
1928             if (!rname)
1929                 break;
1930             len += kdb_printf("%s: %016llx", rname, reg64);
1931             break;
1932         default:
1933             len += kdb_printf("%s: ??", dbg_reg_def[i].name);
1934         }
1935     }
1936     kdb_printf("\n");
1937 #else
1938     if (len)
1939         return len;
1940 
1941     kdb_dumpregs(kdb_current_regs);
1942 #endif
1943     return 0;
1944 }
1945 
1946 /*
1947  * kdb_rm - This function implements the 'rm' (register modify)  command.
1948  *  rm register-name new-contents
1949  * Remarks:
1950  *  Allows register modification with the same restrictions as gdb
1951  */
1952 static int kdb_rm(int argc, const char **argv)
1953 {
1954 #if DBG_MAX_REG_NUM > 0
1955     int diag;
1956     const char *rname;
1957     int i;
1958     u64 reg64;
1959     u32 reg32;
1960     u16 reg16;
1961     u8 reg8;
1962 
1963     if (argc != 2)
1964         return KDB_ARGCOUNT;
1965     /*
1966      * Allow presence or absence of leading '%' symbol.
1967      */
1968     rname = argv[1];
1969     if (*rname == '%')
1970         rname++;
1971 
1972     diag = kdbgetu64arg(argv[2], &reg64);
1973     if (diag)
1974         return diag;
1975 
1976     diag = kdb_check_regs();
1977     if (diag)
1978         return diag;
1979 
1980     diag = KDB_BADREG;
1981     for (i = 0; i < DBG_MAX_REG_NUM; i++) {
1982         if (strcmp(rname, dbg_reg_def[i].name) == 0) {
1983             diag = 0;
1984             break;
1985         }
1986     }
1987     if (!diag) {
1988         switch(dbg_reg_def[i].size * 8) {
1989         case 8:
1990             reg8 = reg64;
1991             dbg_set_reg(i, &reg8, kdb_current_regs);
1992             break;
1993         case 16:
1994             reg16 = reg64;
1995             dbg_set_reg(i, &reg16, kdb_current_regs);
1996             break;
1997         case 32:
1998             reg32 = reg64;
1999             dbg_set_reg(i, &reg32, kdb_current_regs);
2000             break;
2001         case 64:
2002             dbg_set_reg(i, &reg64, kdb_current_regs);
2003             break;
2004         }
2005     }
2006     return diag;
2007 #else
2008     kdb_printf("ERROR: Register set currently not implemented\n");
2009     return 0;
2010 #endif
2011 }
2012 
2013 #if defined(CONFIG_MAGIC_SYSRQ)
2014 /*
2015  * kdb_sr - This function implements the 'sr' (SYSRQ key) command
2016  *  which interfaces to the soi-disant MAGIC SYSRQ functionality.
2017  *      sr <magic-sysrq-code>
2018  */
2019 static int kdb_sr(int argc, const char **argv)
2020 {
2021     bool check_mask =
2022         !kdb_check_flags(KDB_ENABLE_ALL, kdb_cmd_enabled, false);
2023 
2024     if (argc != 1)
2025         return KDB_ARGCOUNT;
2026 
2027     kdb_trap_printk++;
2028     __handle_sysrq(*argv[1], check_mask);
2029     kdb_trap_printk--;
2030 
2031     return 0;
2032 }
2033 #endif  /* CONFIG_MAGIC_SYSRQ */
2034 
2035 /*
2036  * kdb_ef - This function implements the 'regs' (display exception
2037  *  frame) command.  This command takes an address and expects to
2038  *  find an exception frame at that address, formats and prints
2039  *  it.
2040  *      regs address-expression
2041  * Remarks:
2042  *  Not done yet.
2043  */
2044 static int kdb_ef(int argc, const char **argv)
2045 {
2046     int diag;
2047     unsigned long addr;
2048     long offset;
2049     int nextarg;
2050 
2051     if (argc != 1)
2052         return KDB_ARGCOUNT;
2053 
2054     nextarg = 1;
2055     diag = kdbgetaddrarg(argc, argv, &nextarg, &addr, &offset, NULL);
2056     if (diag)
2057         return diag;
2058     show_regs((struct pt_regs *)addr);
2059     return 0;
2060 }
2061 
2062 /*
2063  * kdb_env - This function implements the 'env' command.  Display the
2064  *  current environment variables.
2065  */
2066 
2067 static int kdb_env(int argc, const char **argv)
2068 {
2069     kdb_printenv();
2070 
2071     if (KDB_DEBUG(MASK))
2072         kdb_printf("KDBDEBUG=0x%x\n",
2073             (kdb_flags & KDB_DEBUG(MASK)) >> KDB_DEBUG_FLAG_SHIFT);
2074 
2075     return 0;
2076 }
2077 
2078 #ifdef CONFIG_PRINTK
2079 /*
2080  * kdb_dmesg - This function implements the 'dmesg' command to display
2081  *  the contents of the syslog buffer.
2082  *      dmesg [lines] [adjust]
2083  */
2084 static int kdb_dmesg(int argc, const char **argv)
2085 {
2086     int diag;
2087     int logging;
2088     int lines = 0;
2089     int adjust = 0;
2090     int n = 0;
2091     int skip = 0;
2092     struct kmsg_dump_iter iter;
2093     size_t len;
2094     char buf[201];
2095 
2096     if (argc > 2)
2097         return KDB_ARGCOUNT;
2098     if (argc) {
2099         char *cp;
2100         lines = simple_strtol(argv[1], &cp, 0);
2101         if (*cp)
2102             lines = 0;
2103         if (argc > 1) {
2104             adjust = simple_strtoul(argv[2], &cp, 0);
2105             if (*cp || adjust < 0)
2106                 adjust = 0;
2107         }
2108     }
2109 
2110     /* disable LOGGING if set */
2111     diag = kdbgetintenv("LOGGING", &logging);
2112     if (!diag && logging) {
2113         const char *setargs[] = { "set", "LOGGING", "0" };
2114         kdb_set(2, setargs);
2115     }
2116 
2117     kmsg_dump_rewind(&iter);
2118     while (kmsg_dump_get_line(&iter, 1, NULL, 0, NULL))
2119         n++;
2120 
2121     if (lines < 0) {
2122         if (adjust >= n)
2123             kdb_printf("buffer only contains %d lines, nothing "
2124                    "printed\n", n);
2125         else if (adjust - lines >= n)
2126             kdb_printf("buffer only contains %d lines, last %d "
2127                    "lines printed\n", n, n - adjust);
2128         skip = adjust;
2129         lines = abs(lines);
2130     } else if (lines > 0) {
2131         skip = n - lines - adjust;
2132         lines = abs(lines);
2133         if (adjust >= n) {
2134             kdb_printf("buffer only contains %d lines, "
2135                    "nothing printed\n", n);
2136             skip = n;
2137         } else if (skip < 0) {
2138             lines += skip;
2139             skip = 0;
2140             kdb_printf("buffer only contains %d lines, first "
2141                    "%d lines printed\n", n, lines);
2142         }
2143     } else {
2144         lines = n;
2145     }
2146 
2147     if (skip >= n || skip < 0)
2148         return 0;
2149 
2150     kmsg_dump_rewind(&iter);
2151     while (kmsg_dump_get_line(&iter, 1, buf, sizeof(buf), &len)) {
2152         if (skip) {
2153             skip--;
2154             continue;
2155         }
2156         if (!lines--)
2157             break;
2158         if (KDB_FLAG(CMD_INTERRUPT))
2159             return 0;
2160 
2161         kdb_printf("%.*s\n", (int)len - 1, buf);
2162     }
2163 
2164     return 0;
2165 }
2166 #endif /* CONFIG_PRINTK */
2167 
2168 /* Make sure we balance enable/disable calls, must disable first. */
2169 static atomic_t kdb_nmi_disabled;
2170 
2171 static int kdb_disable_nmi(int argc, const char *argv[])
2172 {
2173     if (atomic_read(&kdb_nmi_disabled))
2174         return 0;
2175     atomic_set(&kdb_nmi_disabled, 1);
2176     arch_kgdb_ops.enable_nmi(0);
2177     return 0;
2178 }
2179 
2180 static int kdb_param_enable_nmi(const char *val, const struct kernel_param *kp)
2181 {
2182     if (!atomic_add_unless(&kdb_nmi_disabled, -1, 0))
2183         return -EINVAL;
2184     arch_kgdb_ops.enable_nmi(1);
2185     return 0;
2186 }
2187 
2188 static const struct kernel_param_ops kdb_param_ops_enable_nmi = {
2189     .set = kdb_param_enable_nmi,
2190 };
2191 module_param_cb(enable_nmi, &kdb_param_ops_enable_nmi, NULL, 0600);
2192 
2193 /*
2194  * kdb_cpu - This function implements the 'cpu' command.
2195  *  cpu [<cpunum>]
2196  * Returns:
2197  *  KDB_CMD_CPU for success, a kdb diagnostic if error
2198  */
2199 static void kdb_cpu_status(void)
2200 {
2201     int i, start_cpu, first_print = 1;
2202     char state, prev_state = '?';
2203 
2204     kdb_printf("Currently on cpu %d\n", raw_smp_processor_id());
2205     kdb_printf("Available cpus: ");
2206     for (start_cpu = -1, i = 0; i < NR_CPUS; i++) {
2207         if (!cpu_online(i)) {
2208             state = 'F';    /* cpu is offline */
2209         } else if (!kgdb_info[i].enter_kgdb) {
2210             state = 'D';    /* cpu is online but unresponsive */
2211         } else {
2212             state = ' ';    /* cpu is responding to kdb */
2213             if (kdb_task_state_char(KDB_TSK(i)) == '-')
2214                 state = '-';    /* idle task */
2215         }
2216         if (state != prev_state) {
2217             if (prev_state != '?') {
2218                 if (!first_print)
2219                     kdb_printf(", ");
2220                 first_print = 0;
2221                 kdb_printf("%d", start_cpu);
2222                 if (start_cpu < i-1)
2223                     kdb_printf("-%d", i-1);
2224                 if (prev_state != ' ')
2225                     kdb_printf("(%c)", prev_state);
2226             }
2227             prev_state = state;
2228             start_cpu = i;
2229         }
2230     }
2231     /* print the trailing cpus, ignoring them if they are all offline */
2232     if (prev_state != 'F') {
2233         if (!first_print)
2234             kdb_printf(", ");
2235         kdb_printf("%d", start_cpu);
2236         if (start_cpu < i-1)
2237             kdb_printf("-%d", i-1);
2238         if (prev_state != ' ')
2239             kdb_printf("(%c)", prev_state);
2240     }
2241     kdb_printf("\n");
2242 }
2243 
2244 static int kdb_cpu(int argc, const char **argv)
2245 {
2246     unsigned long cpunum;
2247     int diag;
2248 
2249     if (argc == 0) {
2250         kdb_cpu_status();
2251         return 0;
2252     }
2253 
2254     if (argc != 1)
2255         return KDB_ARGCOUNT;
2256 
2257     diag = kdbgetularg(argv[1], &cpunum);
2258     if (diag)
2259         return diag;
2260 
2261     /*
2262      * Validate cpunum
2263      */
2264     if ((cpunum >= CONFIG_NR_CPUS) || !kgdb_info[cpunum].enter_kgdb)
2265         return KDB_BADCPUNUM;
2266 
2267     dbg_switch_cpu = cpunum;
2268 
2269     /*
2270      * Switch to other cpu
2271      */
2272     return KDB_CMD_CPU;
2273 }
2274 
2275 /* The user may not realize that ps/bta with no parameters does not print idle
2276  * or sleeping system daemon processes, so tell them how many were suppressed.
2277  */
2278 void kdb_ps_suppressed(void)
2279 {
2280     int idle = 0, daemon = 0;
2281     unsigned long cpu;
2282     const struct task_struct *p, *g;
2283     for_each_online_cpu(cpu) {
2284         p = kdb_curr_task(cpu);
2285         if (kdb_task_state(p, "-"))
2286             ++idle;
2287     }
2288     for_each_process_thread(g, p) {
2289         if (kdb_task_state(p, "ims"))
2290             ++daemon;
2291     }
2292     if (idle || daemon) {
2293         if (idle)
2294             kdb_printf("%d idle process%s (state -)%s\n",
2295                    idle, idle == 1 ? "" : "es",
2296                    daemon ? " and " : "");
2297         if (daemon)
2298             kdb_printf("%d sleeping system daemon (state [ims]) "
2299                    "process%s", daemon,
2300                    daemon == 1 ? "" : "es");
2301         kdb_printf(" suppressed,\nuse 'ps A' to see all.\n");
2302     }
2303 }
2304 
2305 void kdb_ps1(const struct task_struct *p)
2306 {
2307     int cpu;
2308     unsigned long tmp;
2309 
2310     if (!p ||
2311         copy_from_kernel_nofault(&tmp, (char *)p, sizeof(unsigned long)))
2312         return;
2313 
2314     cpu = kdb_process_cpu(p);
2315     kdb_printf("0x%px %8d %8d  %d %4d   %c  0x%px %c%s\n",
2316            (void *)p, p->pid, p->parent->pid,
2317            kdb_task_has_cpu(p), kdb_process_cpu(p),
2318            kdb_task_state_char(p),
2319            (void *)(&p->thread),
2320            p == kdb_curr_task(raw_smp_processor_id()) ? '*' : ' ',
2321            p->comm);
2322     if (kdb_task_has_cpu(p)) {
2323         if (!KDB_TSK(cpu)) {
2324             kdb_printf("  Error: no saved data for this cpu\n");
2325         } else {
2326             if (KDB_TSK(cpu) != p)
2327                 kdb_printf("  Error: does not match running "
2328                    "process table (0x%px)\n", KDB_TSK(cpu));
2329         }
2330     }
2331 }
2332 
2333 /*
2334  * kdb_ps - This function implements the 'ps' command which shows a
2335  *      list of the active processes.
2336  *
2337  * ps [<state_chars>]   Show processes, optionally selecting only those whose
2338  *                      state character is found in <state_chars>.
2339  */
2340 static int kdb_ps(int argc, const char **argv)
2341 {
2342     struct task_struct *g, *p;
2343     const char *mask;
2344     unsigned long cpu;
2345 
2346     if (argc == 0)
2347         kdb_ps_suppressed();
2348     kdb_printf("%-*s      Pid   Parent [*] cpu State %-*s Command\n",
2349         (int)(2*sizeof(void *))+2, "Task Addr",
2350         (int)(2*sizeof(void *))+2, "Thread");
2351     mask = argc ? argv[1] : kdbgetenv("PS");
2352     /* Run the active tasks first */
2353     for_each_online_cpu(cpu) {
2354         if (KDB_FLAG(CMD_INTERRUPT))
2355             return 0;
2356         p = kdb_curr_task(cpu);
2357         if (kdb_task_state(p, mask))
2358             kdb_ps1(p);
2359     }
2360     kdb_printf("\n");
2361     /* Now the real tasks */
2362     for_each_process_thread(g, p) {
2363         if (KDB_FLAG(CMD_INTERRUPT))
2364             return 0;
2365         if (kdb_task_state(p, mask))
2366             kdb_ps1(p);
2367     }
2368 
2369     return 0;
2370 }
2371 
2372 /*
2373  * kdb_pid - This function implements the 'pid' command which switches
2374  *  the currently active process.
2375  *      pid [<pid> | R]
2376  */
2377 static int kdb_pid(int argc, const char **argv)
2378 {
2379     struct task_struct *p;
2380     unsigned long val;
2381     int diag;
2382 
2383     if (argc > 1)
2384         return KDB_ARGCOUNT;
2385 
2386     if (argc) {
2387         if (strcmp(argv[1], "R") == 0) {
2388             p = KDB_TSK(kdb_initial_cpu);
2389         } else {
2390             diag = kdbgetularg(argv[1], &val);
2391             if (diag)
2392                 return KDB_BADINT;
2393 
2394             p = find_task_by_pid_ns((pid_t)val, &init_pid_ns);
2395             if (!p) {
2396                 kdb_printf("No task with pid=%d\n", (pid_t)val);
2397                 return 0;
2398             }
2399         }
2400         kdb_set_current_task(p);
2401     }
2402     kdb_printf("KDB current process is %s(pid=%d)\n",
2403            kdb_current_task->comm,
2404            kdb_current_task->pid);
2405 
2406     return 0;
2407 }
2408 
2409 static int kdb_kgdb(int argc, const char **argv)
2410 {
2411     return KDB_CMD_KGDB;
2412 }
2413 
2414 /*
2415  * kdb_help - This function implements the 'help' and '?' commands.
2416  */
2417 static int kdb_help(int argc, const char **argv)
2418 {
2419     kdbtab_t *kt;
2420 
2421     kdb_printf("%-15.15s %-20.20s %s\n", "Command", "Usage", "Description");
2422     kdb_printf("-----------------------------"
2423            "-----------------------------\n");
2424     list_for_each_entry(kt, &kdb_cmds_head, list_node) {
2425         char *space = "";
2426         if (KDB_FLAG(CMD_INTERRUPT))
2427             return 0;
2428         if (!kdb_check_flags(kt->flags, kdb_cmd_enabled, true))
2429             continue;
2430         if (strlen(kt->usage) > 20)
2431             space = "\n                                    ";
2432         kdb_printf("%-15.15s %-20s%s%s\n", kt->name,
2433                kt->usage, space, kt->help);
2434     }
2435     return 0;
2436 }
2437 
2438 /*
2439  * kdb_kill - This function implements the 'kill' commands.
2440  */
2441 static int kdb_kill(int argc, const char **argv)
2442 {
2443     long sig, pid;
2444     char *endp;
2445     struct task_struct *p;
2446 
2447     if (argc != 2)
2448         return KDB_ARGCOUNT;
2449 
2450     sig = simple_strtol(argv[1], &endp, 0);
2451     if (*endp)
2452         return KDB_BADINT;
2453     if ((sig >= 0) || !valid_signal(-sig)) {
2454         kdb_printf("Invalid signal parameter.<-signal>\n");
2455         return 0;
2456     }
2457     sig = -sig;
2458 
2459     pid = simple_strtol(argv[2], &endp, 0);
2460     if (*endp)
2461         return KDB_BADINT;
2462     if (pid <= 0) {
2463         kdb_printf("Process ID must be large than 0.\n");
2464         return 0;
2465     }
2466 
2467     /* Find the process. */
2468     p = find_task_by_pid_ns(pid, &init_pid_ns);
2469     if (!p) {
2470         kdb_printf("The specified process isn't found.\n");
2471         return 0;
2472     }
2473     p = p->group_leader;
2474     kdb_send_sig(p, sig);
2475     return 0;
2476 }
2477 
2478 /*
2479  * Most of this code has been lifted from kernel/timer.c::sys_sysinfo().
2480  * I cannot call that code directly from kdb, it has an unconditional
2481  * cli()/sti() and calls routines that take locks which can stop the debugger.
2482  */
2483 static void kdb_sysinfo(struct sysinfo *val)
2484 {
2485     u64 uptime = ktime_get_mono_fast_ns();
2486 
2487     memset(val, 0, sizeof(*val));
2488     val->uptime = div_u64(uptime, NSEC_PER_SEC);
2489     val->loads[0] = avenrun[0];
2490     val->loads[1] = avenrun[1];
2491     val->loads[2] = avenrun[2];
2492     val->procs = nr_threads-1;
2493     si_meminfo(val);
2494 
2495     return;
2496 }
2497 
2498 /*
2499  * kdb_summary - This function implements the 'summary' command.
2500  */
2501 static int kdb_summary(int argc, const char **argv)
2502 {
2503     time64_t now;
2504     struct sysinfo val;
2505 
2506     if (argc)
2507         return KDB_ARGCOUNT;
2508 
2509     kdb_printf("sysname    %s\n", init_uts_ns.name.sysname);
2510     kdb_printf("release    %s\n", init_uts_ns.name.release);
2511     kdb_printf("version    %s\n", init_uts_ns.name.version);
2512     kdb_printf("machine    %s\n", init_uts_ns.name.machine);
2513     kdb_printf("nodename   %s\n", init_uts_ns.name.nodename);
2514     kdb_printf("domainname %s\n", init_uts_ns.name.domainname);
2515 
2516     now = __ktime_get_real_seconds();
2517     kdb_printf("date       %ptTs tz_minuteswest %d\n", &now, sys_tz.tz_minuteswest);
2518     kdb_sysinfo(&val);
2519     kdb_printf("uptime     ");
2520     if (val.uptime > (24*60*60)) {
2521         int days = val.uptime / (24*60*60);
2522         val.uptime %= (24*60*60);
2523         kdb_printf("%d day%s ", days, days == 1 ? "" : "s");
2524     }
2525     kdb_printf("%02ld:%02ld\n", val.uptime/(60*60), (val.uptime/60)%60);
2526 
2527     kdb_printf("load avg   %ld.%02ld %ld.%02ld %ld.%02ld\n",
2528         LOAD_INT(val.loads[0]), LOAD_FRAC(val.loads[0]),
2529         LOAD_INT(val.loads[1]), LOAD_FRAC(val.loads[1]),
2530         LOAD_INT(val.loads[2]), LOAD_FRAC(val.loads[2]));
2531 
2532     /* Display in kilobytes */
2533 #define K(x) ((x) << (PAGE_SHIFT - 10))
2534     kdb_printf("\nMemTotal:       %8lu kB\nMemFree:        %8lu kB\n"
2535            "Buffers:        %8lu kB\n",
2536            K(val.totalram), K(val.freeram), K(val.bufferram));
2537     return 0;
2538 }
2539 
2540 /*
2541  * kdb_per_cpu - This function implements the 'per_cpu' command.
2542  */
2543 static int kdb_per_cpu(int argc, const char **argv)
2544 {
2545     char fmtstr[64];
2546     int cpu, diag, nextarg = 1;
2547     unsigned long addr, symaddr, val, bytesperword = 0, whichcpu = ~0UL;
2548 
2549     if (argc < 1 || argc > 3)
2550         return KDB_ARGCOUNT;
2551 
2552     diag = kdbgetaddrarg(argc, argv, &nextarg, &symaddr, NULL, NULL);
2553     if (diag)
2554         return diag;
2555 
2556     if (argc >= 2) {
2557         diag = kdbgetularg(argv[2], &bytesperword);
2558         if (diag)
2559             return diag;
2560     }
2561     if (!bytesperword)
2562         bytesperword = KDB_WORD_SIZE;
2563     else if (bytesperword > KDB_WORD_SIZE)
2564         return KDB_BADWIDTH;
2565     sprintf(fmtstr, "%%0%dlx ", (int)(2*bytesperword));
2566     if (argc >= 3) {
2567         diag = kdbgetularg(argv[3], &whichcpu);
2568         if (diag)
2569             return diag;
2570         if (whichcpu >= nr_cpu_ids || !cpu_online(whichcpu)) {
2571             kdb_printf("cpu %ld is not online\n", whichcpu);
2572             return KDB_BADCPUNUM;
2573         }
2574     }
2575 
2576     /* Most architectures use __per_cpu_offset[cpu], some use
2577      * __per_cpu_offset(cpu), smp has no __per_cpu_offset.
2578      */
2579 #ifdef  __per_cpu_offset
2580 #define KDB_PCU(cpu) __per_cpu_offset(cpu)
2581 #else
2582 #ifdef  CONFIG_SMP
2583 #define KDB_PCU(cpu) __per_cpu_offset[cpu]
2584 #else
2585 #define KDB_PCU(cpu) 0
2586 #endif
2587 #endif
2588     for_each_online_cpu(cpu) {
2589         if (KDB_FLAG(CMD_INTERRUPT))
2590             return 0;
2591 
2592         if (whichcpu != ~0UL && whichcpu != cpu)
2593             continue;
2594         addr = symaddr + KDB_PCU(cpu);
2595         diag = kdb_getword(&val, addr, bytesperword);
2596         if (diag) {
2597             kdb_printf("%5d " kdb_bfd_vma_fmt0 " - unable to "
2598                    "read, diag=%d\n", cpu, addr, diag);
2599             continue;
2600         }
2601         kdb_printf("%5d ", cpu);
2602         kdb_md_line(fmtstr, addr,
2603             bytesperword == KDB_WORD_SIZE,
2604             1, bytesperword, 1, 1, 0);
2605     }
2606 #undef KDB_PCU
2607     return 0;
2608 }
2609 
2610 /*
2611  * display help for the use of cmd | grep pattern
2612  */
2613 static int kdb_grep_help(int argc, const char **argv)
2614 {
2615     kdb_printf("Usage of  cmd args | grep pattern:\n");
2616     kdb_printf("  Any command's output may be filtered through an ");
2617     kdb_printf("emulated 'pipe'.\n");
2618     kdb_printf("  'grep' is just a key word.\n");
2619     kdb_printf("  The pattern may include a very limited set of "
2620            "metacharacters:\n");
2621     kdb_printf("   pattern or ^pattern or pattern$ or ^pattern$\n");
2622     kdb_printf("  And if there are spaces in the pattern, you may "
2623            "quote it:\n");
2624     kdb_printf("   \"pat tern\" or \"^pat tern\" or \"pat tern$\""
2625            " or \"^pat tern$\"\n");
2626     return 0;
2627 }
2628 
2629 /**
2630  * kdb_register() - This function is used to register a kernel debugger
2631  *                  command.
2632  * @cmd: pointer to kdb command
2633  *
2634  * Note that it's the job of the caller to keep the memory for the cmd
2635  * allocated until unregister is called.
2636  */
2637 int kdb_register(kdbtab_t *cmd)
2638 {
2639     kdbtab_t *kp;
2640 
2641     list_for_each_entry(kp, &kdb_cmds_head, list_node) {
2642         if (strcmp(kp->name, cmd->name) == 0) {
2643             kdb_printf("Duplicate kdb cmd: %s, func %p help %s\n",
2644                    cmd->name, cmd->func, cmd->help);
2645             return 1;
2646         }
2647     }
2648 
2649     list_add_tail(&cmd->list_node, &kdb_cmds_head);
2650     return 0;
2651 }
2652 EXPORT_SYMBOL_GPL(kdb_register);
2653 
2654 /**
2655  * kdb_register_table() - This function is used to register a kdb command
2656  *                        table.
2657  * @kp: pointer to kdb command table
2658  * @len: length of kdb command table
2659  */
2660 void kdb_register_table(kdbtab_t *kp, size_t len)
2661 {
2662     while (len--) {
2663         list_add_tail(&kp->list_node, &kdb_cmds_head);
2664         kp++;
2665     }
2666 }
2667 
2668 /**
2669  * kdb_unregister() - This function is used to unregister a kernel debugger
2670  *                    command. It is generally called when a module which
2671  *                    implements kdb command is unloaded.
2672  * @cmd: pointer to kdb command
2673  */
2674 void kdb_unregister(kdbtab_t *cmd)
2675 {
2676     list_del(&cmd->list_node);
2677 }
2678 EXPORT_SYMBOL_GPL(kdb_unregister);
2679 
2680 static kdbtab_t maintab[] = {
2681     {   .name = "md",
2682         .func = kdb_md,
2683         .usage = "<vaddr>",
2684         .help = "Display Memory Contents, also mdWcN, e.g. md8c1",
2685         .minlen = 1,
2686         .flags = KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS,
2687     },
2688     {   .name = "mdr",
2689         .func = kdb_md,
2690         .usage = "<vaddr> <bytes>",
2691         .help = "Display Raw Memory",
2692         .flags = KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS,
2693     },
2694     {   .name = "mdp",
2695         .func = kdb_md,
2696         .usage = "<paddr> <bytes>",
2697         .help = "Display Physical Memory",
2698         .flags = KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS,
2699     },
2700     {   .name = "mds",
2701         .func = kdb_md,
2702         .usage = "<vaddr>",
2703         .help = "Display Memory Symbolically",
2704         .flags = KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS,
2705     },
2706     {   .name = "mm",
2707         .func = kdb_mm,
2708         .usage = "<vaddr> <contents>",
2709         .help = "Modify Memory Contents",
2710         .flags = KDB_ENABLE_MEM_WRITE | KDB_REPEAT_NO_ARGS,
2711     },
2712     {   .name = "go",
2713         .func = kdb_go,
2714         .usage = "[<vaddr>]",
2715         .help = "Continue Execution",
2716         .minlen = 1,
2717         .flags = KDB_ENABLE_REG_WRITE |
2718                  KDB_ENABLE_ALWAYS_SAFE_NO_ARGS,
2719     },
2720     {   .name = "rd",
2721         .func = kdb_rd,
2722         .usage = "",
2723         .help = "Display Registers",
2724         .flags = KDB_ENABLE_REG_READ,
2725     },
2726     {   .name = "rm",
2727         .func = kdb_rm,
2728         .usage = "<reg> <contents>",
2729         .help = "Modify Registers",
2730         .flags = KDB_ENABLE_REG_WRITE,
2731     },
2732     {   .name = "ef",
2733         .func = kdb_ef,
2734         .usage = "<vaddr>",
2735         .help = "Display exception frame",
2736         .flags = KDB_ENABLE_MEM_READ,
2737     },
2738     {   .name = "bt",
2739         .func = kdb_bt,
2740         .usage = "[<vaddr>]",
2741         .help = "Stack traceback",
2742         .minlen = 1,
2743         .flags = KDB_ENABLE_MEM_READ | KDB_ENABLE_INSPECT_NO_ARGS,
2744     },
2745     {   .name = "btp",
2746         .func = kdb_bt,
2747         .usage = "<pid>",
2748         .help = "Display stack for process <pid>",
2749         .flags = KDB_ENABLE_INSPECT,
2750     },
2751     {   .name = "bta",
2752         .func = kdb_bt,
2753         .usage = "[<state_chars>|A]",
2754         .help = "Backtrace all processes whose state matches",
2755         .flags = KDB_ENABLE_INSPECT,
2756     },
2757     {   .name = "btc",
2758         .func = kdb_bt,
2759         .usage = "",
2760         .help = "Backtrace current process on each cpu",
2761         .flags = KDB_ENABLE_INSPECT,
2762     },
2763     {   .name = "btt",
2764         .func = kdb_bt,
2765         .usage = "<vaddr>",
2766         .help = "Backtrace process given its struct task address",
2767         .flags = KDB_ENABLE_MEM_READ | KDB_ENABLE_INSPECT_NO_ARGS,
2768     },
2769     {   .name = "env",
2770         .func = kdb_env,
2771         .usage = "",
2772         .help = "Show environment variables",
2773         .flags = KDB_ENABLE_ALWAYS_SAFE,
2774     },
2775     {   .name = "set",
2776         .func = kdb_set,
2777         .usage = "",
2778         .help = "Set environment variables",
2779         .flags = KDB_ENABLE_ALWAYS_SAFE,
2780     },
2781     {   .name = "help",
2782         .func = kdb_help,
2783         .usage = "",
2784         .help = "Display Help Message",
2785         .minlen = 1,
2786         .flags = KDB_ENABLE_ALWAYS_SAFE,
2787     },
2788     {   .name = "?",
2789         .func = kdb_help,
2790         .usage = "",
2791         .help = "Display Help Message",
2792         .flags = KDB_ENABLE_ALWAYS_SAFE,
2793     },
2794     {   .name = "cpu",
2795         .func = kdb_cpu,
2796         .usage = "<cpunum>",
2797         .help = "Switch to new cpu",
2798         .flags = KDB_ENABLE_ALWAYS_SAFE_NO_ARGS,
2799     },
2800     {   .name = "kgdb",
2801         .func = kdb_kgdb,
2802         .usage = "",
2803         .help = "Enter kgdb mode",
2804         .flags = 0,
2805     },
2806     {   .name = "ps",
2807         .func = kdb_ps,
2808         .usage = "[<state_chars>|A]",
2809         .help = "Display active task list",
2810         .flags = KDB_ENABLE_INSPECT,
2811     },
2812     {   .name = "pid",
2813         .func = kdb_pid,
2814         .usage = "<pidnum>",
2815         .help = "Switch to another task",
2816         .flags = KDB_ENABLE_INSPECT,
2817     },
2818     {   .name = "reboot",
2819         .func = kdb_reboot,
2820         .usage = "",
2821         .help = "Reboot the machine immediately",
2822         .flags = KDB_ENABLE_REBOOT,
2823     },
2824 #if defined(CONFIG_MODULES)
2825     {   .name = "lsmod",
2826         .func = kdb_lsmod,
2827         .usage = "",
2828         .help = "List loaded kernel modules",
2829         .flags = KDB_ENABLE_INSPECT,
2830     },
2831 #endif
2832 #if defined(CONFIG_MAGIC_SYSRQ)
2833     {   .name = "sr",
2834         .func = kdb_sr,
2835         .usage = "<key>",
2836         .help = "Magic SysRq key",
2837         .flags = KDB_ENABLE_ALWAYS_SAFE,
2838     },
2839 #endif
2840 #if defined(CONFIG_PRINTK)
2841     {   .name = "dmesg",
2842         .func = kdb_dmesg,
2843         .usage = "[lines]",
2844         .help = "Display syslog buffer",
2845         .flags = KDB_ENABLE_ALWAYS_SAFE,
2846     },
2847 #endif
2848     {   .name = "defcmd",
2849         .func = kdb_defcmd,
2850         .usage = "name \"usage\" \"help\"",
2851         .help = "Define a set of commands, down to endefcmd",
2852         /*
2853          * Macros are always safe because when executed each
2854          * internal command re-enters kdb_parse() and is safety
2855          * checked individually.
2856          */
2857         .flags = KDB_ENABLE_ALWAYS_SAFE,
2858     },
2859     {   .name = "kill",
2860         .func = kdb_kill,
2861         .usage = "<-signal> <pid>",
2862         .help = "Send a signal to a process",
2863         .flags = KDB_ENABLE_SIGNAL,
2864     },
2865     {   .name = "summary",
2866         .func = kdb_summary,
2867         .usage = "",
2868         .help = "Summarize the system",
2869         .minlen = 4,
2870         .flags = KDB_ENABLE_ALWAYS_SAFE,
2871     },
2872     {   .name = "per_cpu",
2873         .func = kdb_per_cpu,
2874         .usage = "<sym> [<bytes>] [<cpu>]",
2875         .help = "Display per_cpu variables",
2876         .minlen = 3,
2877         .flags = KDB_ENABLE_MEM_READ,
2878     },
2879     {   .name = "grephelp",
2880         .func = kdb_grep_help,
2881         .usage = "",
2882         .help = "Display help on | grep",
2883         .flags = KDB_ENABLE_ALWAYS_SAFE,
2884     },
2885 };
2886 
2887 static kdbtab_t nmicmd = {
2888     .name = "disable_nmi",
2889     .func = kdb_disable_nmi,
2890     .usage = "",
2891     .help = "Disable NMI entry to KDB",
2892     .flags = KDB_ENABLE_ALWAYS_SAFE,
2893 };
2894 
2895 /* Initialize the kdb command table. */
2896 static void __init kdb_inittab(void)
2897 {
2898     kdb_register_table(maintab, ARRAY_SIZE(maintab));
2899     if (arch_kgdb_ops.enable_nmi)
2900         kdb_register_table(&nmicmd, 1);
2901 }
2902 
2903 /* Execute any commands defined in kdb_cmds.  */
2904 static void __init kdb_cmd_init(void)
2905 {
2906     int i, diag;
2907     for (i = 0; kdb_cmds[i]; ++i) {
2908         diag = kdb_parse(kdb_cmds[i]);
2909         if (diag)
2910             kdb_printf("kdb command %s failed, kdb diag %d\n",
2911                 kdb_cmds[i], diag);
2912     }
2913     if (defcmd_in_progress) {
2914         kdb_printf("Incomplete 'defcmd' set, forcing endefcmd\n");
2915         kdb_parse("endefcmd");
2916     }
2917 }
2918 
2919 /* Initialize kdb_printf, breakpoint tables and kdb state */
2920 void __init kdb_init(int lvl)
2921 {
2922     static int kdb_init_lvl = KDB_NOT_INITIALIZED;
2923     int i;
2924 
2925     if (kdb_init_lvl == KDB_INIT_FULL || lvl <= kdb_init_lvl)
2926         return;
2927     for (i = kdb_init_lvl; i < lvl; i++) {
2928         switch (i) {
2929         case KDB_NOT_INITIALIZED:
2930             kdb_inittab();      /* Initialize Command Table */
2931             kdb_initbptab();    /* Initialize Breakpoints */
2932             break;
2933         case KDB_INIT_EARLY:
2934             kdb_cmd_init();     /* Build kdb_cmds tables */
2935             break;
2936         }
2937     }
2938     kdb_init_lvl = lvl;
2939 }