Linux Audio

Check our new training course

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