Linux Audio

Check our new training course

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