diff options
author | Vincent <vincent.stehle@laposte.net> | 2013-02-12 05:34:15 -0500 |
---|---|---|
committer | Jason Wessel <jason.wessel@windriver.com> | 2013-03-02 09:52:20 -0500 |
commit | 36dfea42cc35509b481377980338cc3b89d79256 (patch) | |
tree | 0f01cb90bf908844ab855c155421c083f654d383 /kernel/debug | |
parent | a37372f6c3c03dc7613eaae8bb3458c8068f5fff (diff) |
kdb: Remove unhandled ssb command
The 'ssb' command can only be handled when we have a disassembler, to check for
branches, so remove the 'ssb' command for now.
Signed-off-by: Vincent Stehlé <vincent.stehle@laposte.net>
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Diffstat (limited to 'kernel/debug')
-rw-r--r-- | kernel/debug/kdb/kdb_bp.c | 20 | ||||
-rw-r--r-- | kernel/debug/kdb/kdb_debugger.c | 1 | ||||
-rw-r--r-- | kernel/debug/kdb/kdb_main.c | 16 | ||||
-rw-r--r-- | kernel/debug/kdb/kdb_private.h | 4 |
4 files changed, 2 insertions, 39 deletions
diff --git a/kernel/debug/kdb/kdb_bp.c b/kernel/debug/kdb/kdb_bp.c index 8418c2f8ec5d..70a504601dc3 100644 --- a/kernel/debug/kdb/kdb_bp.c +++ b/kernel/debug/kdb/kdb_bp.c | |||
@@ -486,11 +486,9 @@ static int kdb_bc(int argc, const char **argv) | |||
486 | /* | 486 | /* |
487 | * kdb_ss | 487 | * kdb_ss |
488 | * | 488 | * |
489 | * Process the 'ss' (Single Step) and 'ssb' (Single Step to Branch) | 489 | * Process the 'ss' (Single Step) command. |
490 | * commands. | ||
491 | * | 490 | * |
492 | * ss | 491 | * ss |
493 | * ssb | ||
494 | * | 492 | * |
495 | * Parameters: | 493 | * Parameters: |
496 | * argc Argument count | 494 | * argc Argument count |
@@ -498,35 +496,23 @@ static int kdb_bc(int argc, const char **argv) | |||
498 | * Outputs: | 496 | * Outputs: |
499 | * None. | 497 | * None. |
500 | * Returns: | 498 | * Returns: |
501 | * KDB_CMD_SS[B] for success, a kdb error if failure. | 499 | * KDB_CMD_SS for success, a kdb error if failure. |
502 | * Locking: | 500 | * Locking: |
503 | * None. | 501 | * None. |
504 | * Remarks: | 502 | * Remarks: |
505 | * | 503 | * |
506 | * Set the arch specific option to trigger a debug trap after the next | 504 | * Set the arch specific option to trigger a debug trap after the next |
507 | * instruction. | 505 | * instruction. |
508 | * | ||
509 | * For 'ssb', set the trace flag in the debug trap handler | ||
510 | * after printing the current insn and return directly without | ||
511 | * invoking the kdb command processor, until a branch instruction | ||
512 | * is encountered. | ||
513 | */ | 506 | */ |
514 | 507 | ||
515 | static int kdb_ss(int argc, const char **argv) | 508 | static int kdb_ss(int argc, const char **argv) |
516 | { | 509 | { |
517 | int ssb = 0; | ||
518 | |||
519 | ssb = (strcmp(argv[0], "ssb") == 0); | ||
520 | if (argc != 0) | 510 | if (argc != 0) |
521 | return KDB_ARGCOUNT; | 511 | return KDB_ARGCOUNT; |
522 | /* | 512 | /* |
523 | * Set trace flag and go. | 513 | * Set trace flag and go. |
524 | */ | 514 | */ |
525 | KDB_STATE_SET(DOING_SS); | 515 | KDB_STATE_SET(DOING_SS); |
526 | if (ssb) { | ||
527 | KDB_STATE_SET(DOING_SSB); | ||
528 | return KDB_CMD_SSB; | ||
529 | } | ||
530 | return KDB_CMD_SS; | 516 | return KDB_CMD_SS; |
531 | } | 517 | } |
532 | 518 | ||
@@ -561,8 +547,6 @@ void __init kdb_initbptab(void) | |||
561 | 547 | ||
562 | kdb_register_repeat("ss", kdb_ss, "", | 548 | kdb_register_repeat("ss", kdb_ss, "", |
563 | "Single Step", 1, KDB_REPEAT_NO_ARGS); | 549 | "Single Step", 1, KDB_REPEAT_NO_ARGS); |
564 | kdb_register_repeat("ssb", kdb_ss, "", | ||
565 | "Single step to branch/call", 0, KDB_REPEAT_NO_ARGS); | ||
566 | /* | 550 | /* |
567 | * Architecture dependent initialization. | 551 | * Architecture dependent initialization. |
568 | */ | 552 | */ |
diff --git a/kernel/debug/kdb/kdb_debugger.c b/kernel/debug/kdb/kdb_debugger.c index d04a6ce2d3b7..328d18ef31e4 100644 --- a/kernel/debug/kdb/kdb_debugger.c +++ b/kernel/debug/kdb/kdb_debugger.c | |||
@@ -114,7 +114,6 @@ int kdb_stub(struct kgdb_state *ks) | |||
114 | /* Remove any breakpoints as needed by kdb and clear single step */ | 114 | /* Remove any breakpoints as needed by kdb and clear single step */ |
115 | kdb_bp_remove(); | 115 | kdb_bp_remove(); |
116 | KDB_STATE_CLEAR(DOING_SS); | 116 | KDB_STATE_CLEAR(DOING_SS); |
117 | KDB_STATE_CLEAR(DOING_SSB); | ||
118 | KDB_STATE_SET(PAGER); | 117 | KDB_STATE_SET(PAGER); |
119 | /* zero out any offline cpu data */ | 118 | /* zero out any offline cpu data */ |
120 | for_each_present_cpu(i) { | 119 | for_each_present_cpu(i) { |
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c index 496f596aa807..00eb8f7fbf41 100644 --- a/kernel/debug/kdb/kdb_main.c +++ b/kernel/debug/kdb/kdb_main.c | |||
@@ -1128,7 +1128,6 @@ void kdb_set_current_task(struct task_struct *p) | |||
1128 | * KDB_CMD_GO User typed 'go'. | 1128 | * KDB_CMD_GO User typed 'go'. |
1129 | * KDB_CMD_CPU User switched to another cpu. | 1129 | * KDB_CMD_CPU User switched to another cpu. |
1130 | * KDB_CMD_SS Single step. | 1130 | * KDB_CMD_SS Single step. |
1131 | * KDB_CMD_SSB Single step until branch. | ||
1132 | */ | 1131 | */ |
1133 | static int kdb_local(kdb_reason_t reason, int error, struct pt_regs *regs, | 1132 | static int kdb_local(kdb_reason_t reason, int error, struct pt_regs *regs, |
1134 | kdb_dbtrap_t db_result) | 1133 | kdb_dbtrap_t db_result) |
@@ -1167,14 +1166,6 @@ static int kdb_local(kdb_reason_t reason, int error, struct pt_regs *regs, | |||
1167 | kdb_printf("due to Debug @ " kdb_machreg_fmt "\n", | 1166 | kdb_printf("due to Debug @ " kdb_machreg_fmt "\n", |
1168 | instruction_pointer(regs)); | 1167 | instruction_pointer(regs)); |
1169 | break; | 1168 | break; |
1170 | case KDB_DB_SSB: | ||
1171 | /* | ||
1172 | * In the midst of ssb command. Just return. | ||
1173 | */ | ||
1174 | KDB_DEBUG_STATE("kdb_local 3", reason); | ||
1175 | return KDB_CMD_SSB; /* Continue with SSB command */ | ||
1176 | |||
1177 | break; | ||
1178 | case KDB_DB_SS: | 1169 | case KDB_DB_SS: |
1179 | break; | 1170 | break; |
1180 | case KDB_DB_SSBPT: | 1171 | case KDB_DB_SSBPT: |
@@ -1297,7 +1288,6 @@ do_full_getstr: | |||
1297 | if (diag == KDB_CMD_GO | 1288 | if (diag == KDB_CMD_GO |
1298 | || diag == KDB_CMD_CPU | 1289 | || diag == KDB_CMD_CPU |
1299 | || diag == KDB_CMD_SS | 1290 | || diag == KDB_CMD_SS |
1300 | || diag == KDB_CMD_SSB | ||
1301 | || diag == KDB_CMD_KGDB) | 1291 | || diag == KDB_CMD_KGDB) |
1302 | break; | 1292 | break; |
1303 | 1293 | ||
@@ -1384,12 +1374,6 @@ int kdb_main_loop(kdb_reason_t reason, kdb_reason_t reason2, int error, | |||
1384 | break; | 1374 | break; |
1385 | } | 1375 | } |
1386 | 1376 | ||
1387 | if (result == KDB_CMD_SSB) { | ||
1388 | KDB_STATE_SET(DOING_SS); | ||
1389 | KDB_STATE_SET(DOING_SSB); | ||
1390 | break; | ||
1391 | } | ||
1392 | |||
1393 | if (result == KDB_CMD_KGDB) { | 1377 | if (result == KDB_CMD_KGDB) { |
1394 | if (!KDB_STATE(DOING_KGDB)) | 1378 | if (!KDB_STATE(DOING_KGDB)) |
1395 | kdb_printf("Entering please attach debugger " | 1379 | kdb_printf("Entering please attach debugger " |
diff --git a/kernel/debug/kdb/kdb_private.h b/kernel/debug/kdb/kdb_private.h index 392ec6a25844..7afd3c8c41d5 100644 --- a/kernel/debug/kdb/kdb_private.h +++ b/kernel/debug/kdb/kdb_private.h | |||
@@ -19,7 +19,6 @@ | |||
19 | #define KDB_CMD_GO (-1001) | 19 | #define KDB_CMD_GO (-1001) |
20 | #define KDB_CMD_CPU (-1002) | 20 | #define KDB_CMD_CPU (-1002) |
21 | #define KDB_CMD_SS (-1003) | 21 | #define KDB_CMD_SS (-1003) |
22 | #define KDB_CMD_SSB (-1004) | ||
23 | #define KDB_CMD_KGDB (-1005) | 22 | #define KDB_CMD_KGDB (-1005) |
24 | 23 | ||
25 | /* Internal debug flags */ | 24 | /* Internal debug flags */ |
@@ -125,8 +124,6 @@ extern int kdb_state; | |||
125 | * kdb control */ | 124 | * kdb control */ |
126 | #define KDB_STATE_HOLD_CPU 0x00000010 /* Hold this cpu inside kdb */ | 125 | #define KDB_STATE_HOLD_CPU 0x00000010 /* Hold this cpu inside kdb */ |
127 | #define KDB_STATE_DOING_SS 0x00000020 /* Doing ss command */ | 126 | #define KDB_STATE_DOING_SS 0x00000020 /* Doing ss command */ |
128 | #define KDB_STATE_DOING_SSB 0x00000040 /* Doing ssb command, | ||
129 | * DOING_SS is also set */ | ||
130 | #define KDB_STATE_SSBPT 0x00000080 /* Install breakpoint | 127 | #define KDB_STATE_SSBPT 0x00000080 /* Install breakpoint |
131 | * after one ss, independent of | 128 | * after one ss, independent of |
132 | * DOING_SS */ | 129 | * DOING_SS */ |
@@ -191,7 +188,6 @@ extern void kdb_bp_remove(void); | |||
191 | typedef enum { | 188 | typedef enum { |
192 | KDB_DB_BPT, /* Breakpoint */ | 189 | KDB_DB_BPT, /* Breakpoint */ |
193 | KDB_DB_SS, /* Single-step trap */ | 190 | KDB_DB_SS, /* Single-step trap */ |
194 | KDB_DB_SSB, /* Single step to branch */ | ||
195 | KDB_DB_SSBPT, /* Single step over breakpoint */ | 191 | KDB_DB_SSBPT, /* Single step over breakpoint */ |
196 | KDB_DB_NOBPT /* Spurious breakpoint */ | 192 | KDB_DB_NOBPT /* Spurious breakpoint */ |
197 | } kdb_dbtrap_t; | 193 | } kdb_dbtrap_t; |