root/kernel/debug/kdb/kdb_main.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. kdb_curr_task
  2. kdb_check_flags
  3. kdbgetenv
  4. kdballocenv
  5. kdbgetulenv
  6. kdbgetintenv
  7. kdbgetularg
  8. kdbgetu64arg
  9. kdb_set
  10. kdb_check_regs
  11. kdbgetaddrarg
  12. kdb_cmderror
  13. kdb_defcmd2
  14. kdb_defcmd
  15. kdb_exec_defcmd
  16. parse_grep
  17. kdb_parse
  18. handle_ctrl_cmd
  19. kdb_reboot
  20. kdb_dumpregs
  21. kdb_set_current_task
  22. drop_newline
  23. kdb_local
  24. kdb_print_state
  25. kdb_main_loop
  26. kdb_mdr
  27. kdb_md_line
  28. kdb_md
  29. kdb_mm
  30. kdb_go
  31. kdb_rd
  32. kdb_rm
  33. kdb_sr
  34. kdb_ef
  35. kdb_lsmod
  36. kdb_env
  37. kdb_dmesg
  38. kdb_disable_nmi
  39. kdb_param_enable_nmi
  40. kdb_cpu_status
  41. kdb_cpu
  42. kdb_ps_suppressed
  43. kdb_ps1
  44. kdb_ps
  45. kdb_pid
  46. kdb_kgdb
  47. kdb_help
  48. kdb_kill
  49. kdb_sysinfo
  50. kdb_summary
  51. kdb_per_cpu
  52. kdb_grep_help
  53. kdb_register_flags
  54. kdb_register
  55. kdb_unregister
  56. kdb_inittab
  57. kdb_cmd_init
  58. kdb_init

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

/* [<][>][^][v][top][bottom][index][help] */