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