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