Linux Audio

Check our new training course

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