Linux Audio

Check our new training course

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