1 /* 2 * kgdbts is a test suite for kgdb for the sole purpose of validating 3 * that key pieces of the kgdb internals are working properly such as 4 * HW/SW breakpoints, single stepping, and NMI. 5 * 6 * Created by: Jason Wessel <jason.wessel@windriver.com> 7 * 8 * Copyright (c) 2008 Wind River Systems, Inc. 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License version 2 as 12 * published by the Free Software Foundation. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 * See the GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 22 */ 23 /* Information about the kgdb test suite. 24 * ------------------------------------- 25 * 26 * The kgdb test suite is designed as a KGDB I/O module which 27 * simulates the communications that a debugger would have with kgdb. 28 * The tests are broken up in to a line by line and referenced here as 29 * a "get" which is kgdb requesting input and "put" which is kgdb 30 * sending a response. 31 * 32 * The kgdb suite can be invoked from the kernel command line 33 * arguments system or executed dynamically at run time. The test 34 * suite uses the variable "kgdbts" to obtain the information about 35 * which tests to run and to configure the verbosity level. The 36 * following are the various characters you can use with the kgdbts= 37 * line: 38 * 39 * When using the "kgdbts=" you only choose one of the following core 40 * test types: 41 * A = Run all the core tests silently 42 * V1 = Run all the core tests with minimal output 43 * V2 = Run all the core tests in debug mode 44 * 45 * You can also specify optional tests: 46 * N## = Go to sleep with interrupts of for ## seconds 47 * to test the HW NMI watchdog 48 * F## = Break at do_fork for ## iterations 49 * S## = Break at sys_open for ## iterations 50 * I## = Run the single step test ## iterations 51 * 52 * NOTE: that the do_fork and sys_open tests are mutually exclusive. 53 * 54 * To invoke the kgdb test suite from boot you use a kernel start 55 * argument as follows: 56 * kgdbts=V1 kgdbwait 57 * Or if you wanted to perform the NMI test for 6 seconds and do_fork 58 * test for 100 forks, you could use: 59 * kgdbts=V1N6F100 kgdbwait 60 * 61 * The test suite can also be invoked at run time with: 62 * echo kgdbts=V1N6F100 > /sys/module/kgdbts/parameters/kgdbts 63 * Or as another example: 64 * echo kgdbts=V2 > /sys/module/kgdbts/parameters/kgdbts 65 * 66 * When developing a new kgdb arch specific implementation or 67 * using these tests for the purpose of regression testing, 68 * several invocations are required. 69 * 70 * 1) Boot with the test suite enabled by using the kernel arguments 71 * "kgdbts=V1F100 kgdbwait" 72 * ## If kgdb arch specific implementation has NMI use 73 * "kgdbts=V1N6F100 74 * 75 * 2) After the system boot run the basic test. 76 * echo kgdbts=V1 > /sys/module/kgdbts/parameters/kgdbts 77 * 78 * 3) Run the concurrency tests. It is best to use n+1 79 * while loops where n is the number of cpus you have 80 * in your system. The example below uses only two 81 * loops. 82 * 83 * ## This tests break points on sys_open 84 * while [ 1 ] ; do find / > /dev/null 2>&1 ; done & 85 * while [ 1 ] ; do find / > /dev/null 2>&1 ; done & 86 * echo kgdbts=V1S10000 > /sys/module/kgdbts/parameters/kgdbts 87 * fg # and hit control-c 88 * fg # and hit control-c 89 * ## This tests break points on do_fork 90 * while [ 1 ] ; do date > /dev/null ; done & 91 * while [ 1 ] ; do date > /dev/null ; done & 92 * echo kgdbts=V1F1000 > /sys/module/kgdbts/parameters/kgdbts 93 * fg # and hit control-c 94 * 95 */ 96 97 #include <linux/kernel.h> 98 #include <linux/kgdb.h> 99 #include <linux/ctype.h> 100 #include <linux/uaccess.h> 101 #include <linux/syscalls.h> 102 #include <linux/nmi.h> 103 #include <linux/delay.h> 104 #include <linux/kthread.h> 105 #include <linux/module.h> 106 #include <linux/sched/task.h> 107 108 #include <asm/sections.h> 109 110 #define v1printk(a...) do { \ 111 if (verbose) \ 112 printk(KERN_INFO a); \ 113 } while (0) 114 #define v2printk(a...) do { \ 115 if (verbose > 1) \ 116 printk(KERN_INFO a); \ 117 touch_nmi_watchdog(); \ 118 } while (0) 119 #define eprintk(a...) do { \ 120 printk(KERN_ERR a); \ 121 WARN_ON(1); \ 122 } while (0) 123 #define MAX_CONFIG_LEN 40 124 125 static struct kgdb_io kgdbts_io_ops; 126 static char get_buf[BUFMAX]; 127 static int get_buf_cnt; 128 static char put_buf[BUFMAX]; 129 static int put_buf_cnt; 130 static char scratch_buf[BUFMAX]; 131 static int verbose; 132 static int repeat_test; 133 static int test_complete; 134 static int send_ack; 135 static int final_ack; 136 static int force_hwbrks; 137 static int hwbreaks_ok; 138 static int hw_break_val; 139 static int hw_break_val2; 140 static int cont_instead_of_sstep; 141 static unsigned long cont_thread_id; 142 static unsigned long sstep_thread_id; 143 #if defined(CONFIG_ARM) || defined(CONFIG_MIPS) || defined(CONFIG_SPARC) 144 static int arch_needs_sstep_emulation = 1; 145 #else 146 static int arch_needs_sstep_emulation; 147 #endif 148 static unsigned long cont_addr; 149 static unsigned long sstep_addr; 150 static int restart_from_top_after_write; 151 static int sstep_state; 152 153 /* Storage for the registers, in GDB format. */ 154 static unsigned long kgdbts_gdb_regs[(NUMREGBYTES + 155 sizeof(unsigned long) - 1) / 156 sizeof(unsigned long)]; 157 static struct pt_regs kgdbts_regs; 158 159 /* -1 = init not run yet, 0 = unconfigured, 1 = configured. */ 160 static int configured = -1; 161 162 #ifdef CONFIG_KGDB_TESTS_BOOT_STRING 163 static char config[MAX_CONFIG_LEN] = CONFIG_KGDB_TESTS_BOOT_STRING; 164 #else 165 static char config[MAX_CONFIG_LEN]; 166 #endif 167 static struct kparam_string kps = { 168 .string = config, 169 .maxlen = MAX_CONFIG_LEN, 170 }; 171 172 static void fill_get_buf(char *buf); 173 174 struct test_struct { 175 char *get; 176 char *put; 177 void (*get_handler)(char *); 178 int (*put_handler)(char *, char *); 179 }; 180 181 struct test_state { 182 char *name; 183 struct test_struct *tst; 184 int idx; 185 int (*run_test) (int, int); 186 int (*validate_put) (char *); 187 }; 188 189 static struct test_state ts; 190 191 static int kgdbts_unreg_thread(void *ptr) 192 { 193 /* Wait until the tests are complete and then ungresiter the I/O 194 * driver. 195 */ 196 while (!final_ack) 197 msleep_interruptible(1500); 198 /* Pause for any other threads to exit after final ack. */ 199 msleep_interruptible(1000); 200 if (configured) 201 kgdb_unregister_io_module(&kgdbts_io_ops); 202 configured = 0; 203 204 return 0; 205 } 206 207 /* This is noinline such that it can be used for a single location to 208 * place a breakpoint 209 */ 210 static noinline void kgdbts_break_test(void) 211 { 212 v2printk("kgdbts: breakpoint complete\n"); 213 } 214 215 /* Lookup symbol info in the kernel */ 216 static unsigned long lookup_addr(char *arg) 217 { 218 unsigned long addr = 0; 219 220 if (!strcmp(arg, "kgdbts_break_test")) 221 addr = (unsigned long)kgdbts_break_test; 222 else if (!strcmp(arg, "sys_open")) 223 addr = (unsigned long)do_sys_open; 224 else if (!strcmp(arg, "do_fork")) 225 addr = (unsigned long)_do_fork; 226 else if (!strcmp(arg, "hw_break_val")) 227 addr = (unsigned long)&hw_break_val; 228 addr = (unsigned long) dereference_function_descriptor((void *)addr); 229 return addr; 230 } 231 232 static void break_helper(char *bp_type, char *arg, unsigned long vaddr) 233 { 234 unsigned long addr; 235 236 if (arg) 237 addr = lookup_addr(arg); 238 else 239 addr = vaddr; 240 241 sprintf(scratch_buf, "%s,%lx,%i", bp_type, addr, 242 BREAK_INSTR_SIZE); 243 fill_get_buf(scratch_buf); 244 } 245 246 static void sw_break(char *arg) 247 { 248 break_helper(force_hwbrks ? "Z1" : "Z0", arg, 0); 249 } 250 251 static void sw_rem_break(char *arg) 252 { 253 break_helper(force_hwbrks ? "z1" : "z0", arg, 0); 254 } 255 256 static void hw_break(char *arg) 257 { 258 break_helper("Z1", arg, 0); 259 } 260 261 static void hw_rem_break(char *arg) 262 { 263 break_helper("z1", arg, 0); 264 } 265 266 static void hw_write_break(char *arg) 267 { 268 break_helper("Z2", arg, 0); 269 } 270 271 static void hw_rem_write_break(char *arg) 272 { 273 break_helper("z2", arg, 0); 274 } 275 276 static void hw_access_break(char *arg) 277 { 278 break_helper("Z4", arg, 0); 279 } 280 281 static void hw_rem_access_break(char *arg) 282 { 283 break_helper("z4", arg, 0); 284 } 285 286 static void hw_break_val_access(void) 287 { 288 hw_break_val2 = hw_break_val; 289 } 290 291 static void hw_break_val_write(void) 292 { 293 hw_break_val++; 294 } 295 296 static int get_thread_id_continue(char *put_str, char *arg) 297 { 298 char *ptr = &put_str[11]; 299 300 if (put_str[1] != 'T' || put_str[2] != '0') 301 return 1; 302 kgdb_hex2long(&ptr, &cont_thread_id); 303 return 0; 304 } 305 306 static int check_and_rewind_pc(char *put_str, char *arg) 307 { 308 unsigned long addr = lookup_addr(arg); 309 unsigned long ip; 310 int offset = 0; 311 312 kgdb_hex2mem(&put_str[1], (char *)kgdbts_gdb_regs, 313 NUMREGBYTES); 314 gdb_regs_to_pt_regs(kgdbts_gdb_regs, &kgdbts_regs); 315 ip = instruction_pointer(&kgdbts_regs); 316 v2printk("Stopped at IP: %lx\n", ip); 317 #ifdef GDB_ADJUSTS_BREAK_OFFSET 318 /* On some arches, a breakpoint stop requires it to be decremented */ 319 if (addr + BREAK_INSTR_SIZE == ip) 320 offset = -BREAK_INSTR_SIZE; 321 #endif 322 323 if (arch_needs_sstep_emulation && sstep_addr && 324 ip + offset == sstep_addr && 325 ((!strcmp(arg, "sys_open") || !strcmp(arg, "do_fork")))) { 326 /* This is special case for emulated single step */ 327 v2printk("Emul: rewind hit single step bp\n"); 328 restart_from_top_after_write = 1; 329 } else if (strcmp(arg, "silent") && ip + offset != addr) { 330 eprintk("kgdbts: BP mismatch %lx expected %lx\n", 331 ip + offset, addr); 332 return 1; 333 } 334 /* Readjust the instruction pointer if needed */ 335 ip += offset; 336 cont_addr = ip; 337 #ifdef GDB_ADJUSTS_BREAK_OFFSET 338 instruction_pointer_set(&kgdbts_regs, ip); 339 #endif 340 return 0; 341 } 342 343 static int check_single_step(char *put_str, char *arg) 344 { 345 unsigned long addr = lookup_addr(arg); 346 static int matched_id; 347 348 /* 349 * From an arch indepent point of view the instruction pointer 350 * should be on a different instruction 351 */ 352 kgdb_hex2mem(&put_str[1], (char *)kgdbts_gdb_regs, 353 NUMREGBYTES); 354 gdb_regs_to_pt_regs(kgdbts_gdb_regs, &kgdbts_regs); 355 v2printk("Singlestep stopped at IP: %lx\n", 356 instruction_pointer(&kgdbts_regs)); 357 358 if (sstep_thread_id != cont_thread_id) { 359 /* 360 * Ensure we stopped in the same thread id as before, else the 361 * debugger should continue until the original thread that was 362 * single stepped is scheduled again, emulating gdb's behavior. 363 */ 364 v2printk("ThrID does not match: %lx\n", cont_thread_id); 365 if (arch_needs_sstep_emulation) { 366 if (matched_id && 367 instruction_pointer(&kgdbts_regs) != addr) 368 goto continue_test; 369 matched_id++; 370 ts.idx -= 2; 371 sstep_state = 0; 372 return 0; 373 } 374 cont_instead_of_sstep = 1; 375 ts.idx -= 4; 376 return 0; 377 } 378 continue_test: 379 matched_id = 0; 380 if (instruction_pointer(&kgdbts_regs) == addr) { 381 eprintk("kgdbts: SingleStep failed at %lx\n", 382 instruction_pointer(&kgdbts_regs)); 383 return 1; 384 } 385 386 return 0; 387 } 388 389 static void write_regs(char *arg) 390 { 391 memset(scratch_buf, 0, sizeof(scratch_buf)); 392 scratch_buf[0] = 'G'; 393 pt_regs_to_gdb_regs(kgdbts_gdb_regs, &kgdbts_regs); 394 kgdb_mem2hex((char *)kgdbts_gdb_regs, &scratch_buf[1], NUMREGBYTES); 395 fill_get_buf(scratch_buf); 396 } 397 398 static void skip_back_repeat_test(char *arg) 399 { 400 int go_back = simple_strtol(arg, NULL, 10); 401 402 repeat_test--; 403 if (repeat_test <= 0) { 404 ts.idx++; 405 } else { 406 if (repeat_test % 100 == 0) 407 v1printk("kgdbts:RUN ... %d remaining\n", repeat_test); 408 409 ts.idx -= go_back; 410 } 411 fill_get_buf(ts.tst[ts.idx].get); 412 } 413 414 static int got_break(char *put_str, char *arg) 415 { 416 test_complete = 1; 417 if (!strncmp(put_str+1, arg, 2)) { 418 if (!strncmp(arg, "T0", 2)) 419 test_complete = 2; 420 return 0; 421 } 422 return 1; 423 } 424 425 static void get_cont_catch(char *arg) 426 { 427 /* Always send detach because the test is completed at this point */ 428 fill_get_buf("D"); 429 } 430 431 static int put_cont_catch(char *put_str, char *arg) 432 { 433 /* This is at the end of the test and we catch any and all input */ 434 v2printk("kgdbts: cleanup task: %lx\n", sstep_thread_id); 435 ts.idx--; 436 return 0; 437 } 438 439 static int emul_reset(char *put_str, char *arg) 440 { 441 if (strncmp(put_str, "$OK", 3)) 442 return 1; 443 if (restart_from_top_after_write) { 444 restart_from_top_after_write = 0; 445 ts.idx = -1; 446 } 447 return 0; 448 } 449 450 static void emul_sstep_get(char *arg) 451 { 452 if (!arch_needs_sstep_emulation) { 453 if (cont_instead_of_sstep) { 454 cont_instead_of_sstep = 0; 455 fill_get_buf("c"); 456 } else { 457 fill_get_buf(arg); 458 } 459 return; 460 } 461 switch (sstep_state) { 462 case 0: 463 v2printk("Emulate single step\n"); 464 /* Start by looking at the current PC */ 465 fill_get_buf("g"); 466 break; 467 case 1: 468 /* set breakpoint */ 469 break_helper("Z0", NULL, sstep_addr); 470 break; 471 case 2: 472 /* Continue */ 473 fill_get_buf("c"); 474 break; 475 case 3: 476 /* Clear breakpoint */ 477 break_helper("z0", NULL, sstep_addr); 478 break; 479 default: 480 eprintk("kgdbts: ERROR failed sstep get emulation\n"); 481 } 482 sstep_state++; 483 } 484 485 static int emul_sstep_put(char *put_str, char *arg) 486 { 487 if (!arch_needs_sstep_emulation) { 488 char *ptr = &put_str[11]; 489 if (put_str[1] != 'T' || put_str[2] != '0') 490 return 1; 491 kgdb_hex2long(&ptr, &sstep_thread_id); 492 return 0; 493 } 494 switch (sstep_state) { 495 case 1: 496 /* validate the "g" packet to get the IP */ 497 kgdb_hex2mem(&put_str[1], (char *)kgdbts_gdb_regs, 498 NUMREGBYTES); 499 gdb_regs_to_pt_regs(kgdbts_gdb_regs, &kgdbts_regs); 500 v2printk("Stopped at IP: %lx\n", 501 instruction_pointer(&kgdbts_regs)); 502 /* Want to stop at IP + break instruction size by default */ 503 sstep_addr = cont_addr + BREAK_INSTR_SIZE; 504 break; 505 case 2: 506 if (strncmp(put_str, "$OK", 3)) { 507 eprintk("kgdbts: failed sstep break set\n"); 508 return 1; 509 } 510 break; 511 case 3: 512 if (strncmp(put_str, "$T0", 3)) { 513 eprintk("kgdbts: failed continue sstep\n"); 514 return 1; 515 } else { 516 char *ptr = &put_str[11]; 517 kgdb_hex2long(&ptr, &sstep_thread_id); 518 } 519 break; 520 case 4: 521 if (strncmp(put_str, "$OK", 3)) { 522 eprintk("kgdbts: failed sstep break unset\n"); 523 return 1; 524 } 525 /* Single step is complete so continue on! */ 526 sstep_state = 0; 527 return 0; 528 default: 529 eprintk("kgdbts: ERROR failed sstep put emulation\n"); 530 } 531 532 /* Continue on the same test line until emulation is complete */ 533 ts.idx--; 534 return 0; 535 } 536 537 static int final_ack_set(char *put_str, char *arg) 538 { 539 if (strncmp(put_str+1, arg, 2)) 540 return 1; 541 final_ack = 1; 542 return 0; 543 } 544 /* 545 * Test to plant a breakpoint and detach, which should clear out the 546 * breakpoint and restore the original instruction. 547 */ 548 static struct test_struct plant_and_detach_test[] = { 549 { "?", "S0*" }, /* Clear break points */ 550 { "kgdbts_break_test", "OK", sw_break, }, /* set sw breakpoint */ 551 { "D", "OK" }, /* Detach */ 552 { "", "" }, 553 }; 554 555 /* 556 * Simple test to write in a software breakpoint, check for the 557 * correct stop location and detach. 558 */ 559 static struct test_struct sw_breakpoint_test[] = { 560 { "?", "S0*" }, /* Clear break points */ 561 { "kgdbts_break_test", "OK", sw_break, }, /* set sw breakpoint */ 562 { "c", "T0*", }, /* Continue */ 563 { "g", "kgdbts_break_test", NULL, check_and_rewind_pc }, 564 { "write", "OK", write_regs }, 565 { "kgdbts_break_test", "OK", sw_rem_break }, /*remove breakpoint */ 566 { "D", "OK" }, /* Detach */ 567 { "D", "OK", NULL, got_break }, /* On success we made it here */ 568 { "", "" }, 569 }; 570 571 /* 572 * Test a known bad memory read location to test the fault handler and 573 * read bytes 1-8 at the bad address 574 */ 575 static struct test_struct bad_read_test[] = { 576 { "?", "S0*" }, /* Clear break points */ 577 { "m0,1", "E*" }, /* read 1 byte at address 1 */ 578 { "m0,2", "E*" }, /* read 1 byte at address 2 */ 579 { "m0,3", "E*" }, /* read 1 byte at address 3 */ 580 { "m0,4", "E*" }, /* read 1 byte at address 4 */ 581 { "m0,5", "E*" }, /* read 1 byte at address 5 */ 582 { "m0,6", "E*" }, /* read 1 byte at address 6 */ 583 { "m0,7", "E*" }, /* read 1 byte at address 7 */ 584 { "m0,8", "E*" }, /* read 1 byte at address 8 */ 585 { "D", "OK" }, /* Detach which removes all breakpoints and continues */ 586 { "", "" }, 587 }; 588 589 /* 590 * Test for hitting a breakpoint, remove it, single step, plant it 591 * again and detach. 592 */ 593 static struct test_struct singlestep_break_test[] = { 594 { "?", "S0*" }, /* Clear break points */ 595 { "kgdbts_break_test", "OK", sw_break, }, /* set sw breakpoint */ 596 { "c", "T0*", NULL, get_thread_id_continue }, /* Continue */ 597 { "kgdbts_break_test", "OK", sw_rem_break }, /*remove breakpoint */ 598 { "g", "kgdbts_break_test", NULL, check_and_rewind_pc }, 599 { "write", "OK", write_regs }, /* Write registers */ 600 { "s", "T0*", emul_sstep_get, emul_sstep_put }, /* Single step */ 601 { "g", "kgdbts_break_test", NULL, check_single_step }, 602 { "kgdbts_break_test", "OK", sw_break, }, /* set sw breakpoint */ 603 { "c", "T0*", }, /* Continue */ 604 { "g", "kgdbts_break_test", NULL, check_and_rewind_pc }, 605 { "write", "OK", write_regs }, /* Write registers */ 606 { "D", "OK" }, /* Remove all breakpoints and continues */ 607 { "", "" }, 608 }; 609 610 /* 611 * Test for hitting a breakpoint at do_fork for what ever the number 612 * of iterations required by the variable repeat_test. 613 */ 614 static struct test_struct do_fork_test[] = { 615 { "?", "S0*" }, /* Clear break points */ 616 { "do_fork", "OK", sw_break, }, /* set sw breakpoint */ 617 { "c", "T0*", NULL, get_thread_id_continue }, /* Continue */ 618 { "do_fork", "OK", sw_rem_break }, /*remove breakpoint */ 619 { "g", "do_fork", NULL, check_and_rewind_pc }, /* check location */ 620 { "write", "OK", write_regs, emul_reset }, /* Write registers */ 621 { "s", "T0*", emul_sstep_get, emul_sstep_put }, /* Single step */ 622 { "g", "do_fork", NULL, check_single_step }, 623 { "do_fork", "OK", sw_break, }, /* set sw breakpoint */ 624 { "7", "T0*", skip_back_repeat_test }, /* Loop based on repeat_test */ 625 { "D", "OK", NULL, final_ack_set }, /* detach and unregister I/O */ 626 { "", "", get_cont_catch, put_cont_catch }, 627 }; 628 629 /* Test for hitting a breakpoint at sys_open for what ever the number 630 * of iterations required by the variable repeat_test. 631 */ 632 static struct test_struct sys_open_test[] = { 633 { "?", "S0*" }, /* Clear break points */ 634 { "sys_open", "OK", sw_break, }, /* set sw breakpoint */ 635 { "c", "T0*", NULL, get_thread_id_continue }, /* Continue */ 636 { "sys_open", "OK", sw_rem_break }, /*remove breakpoint */ 637 { "g", "sys_open", NULL, check_and_rewind_pc }, /* check location */ 638 { "write", "OK", write_regs, emul_reset }, /* Write registers */ 639 { "s", "T0*", emul_sstep_get, emul_sstep_put }, /* Single step */ 640 { "g", "sys_open", NULL, check_single_step }, 641 { "sys_open", "OK", sw_break, }, /* set sw breakpoint */ 642 { "7", "T0*", skip_back_repeat_test }, /* Loop based on repeat_test */ 643 { "D", "OK", NULL, final_ack_set }, /* detach and unregister I/O */ 644 { "", "", get_cont_catch, put_cont_catch }, 645 }; 646 647 /* 648 * Test for hitting a simple hw breakpoint 649 */ 650 static struct test_struct hw_breakpoint_test[] = { 651 { "?", "S0*" }, /* Clear break points */ 652 { "kgdbts_break_test", "OK", hw_break, }, /* set hw breakpoint */ 653 { "c", "T0*", }, /* Continue */ 654 { "g", "kgdbts_break_test", NULL, check_and_rewind_pc }, 655 { "write", "OK", write_regs }, 656 { "kgdbts_break_test", "OK", hw_rem_break }, /*remove breakpoint */ 657 { "D", "OK" }, /* Detach */ 658 { "D", "OK", NULL, got_break }, /* On success we made it here */ 659 { "", "" }, 660 }; 661 662 /* 663 * Test for hitting a hw write breakpoint 664 */ 665 static struct test_struct hw_write_break_test[] = { 666 { "?", "S0*" }, /* Clear break points */ 667 { "hw_break_val", "OK", hw_write_break, }, /* set hw breakpoint */ 668 { "c", "T0*", NULL, got_break }, /* Continue */ 669 { "g", "silent", NULL, check_and_rewind_pc }, 670 { "write", "OK", write_regs }, 671 { "hw_break_val", "OK", hw_rem_write_break }, /*remove breakpoint */ 672 { "D", "OK" }, /* Detach */ 673 { "D", "OK", NULL, got_break }, /* On success we made it here */ 674 { "", "" }, 675 }; 676 677 /* 678 * Test for hitting a hw access breakpoint 679 */ 680 static struct test_struct hw_access_break_test[] = { 681 { "?", "S0*" }, /* Clear break points */ 682 { "hw_break_val", "OK", hw_access_break, }, /* set hw breakpoint */ 683 { "c", "T0*", NULL, got_break }, /* Continue */ 684 { "g", "silent", NULL, check_and_rewind_pc }, 685 { "write", "OK", write_regs }, 686 { "hw_break_val", "OK", hw_rem_access_break }, /*remove breakpoint */ 687 { "D", "OK" }, /* Detach */ 688 { "D", "OK", NULL, got_break }, /* On success we made it here */ 689 { "", "" }, 690 }; 691 692 /* 693 * Test for hitting a hw access breakpoint 694 */ 695 static struct test_struct nmi_sleep_test[] = { 696 { "?", "S0*" }, /* Clear break points */ 697 { "c", "T0*", NULL, got_break }, /* Continue */ 698 { "D", "OK" }, /* Detach */ 699 { "D", "OK", NULL, got_break }, /* On success we made it here */ 700 { "", "" }, 701 }; 702 703 static void fill_get_buf(char *buf) 704 { 705 unsigned char checksum = 0; 706 int count = 0; 707 char ch; 708 709 strcpy(get_buf, "$"); 710 strcat(get_buf, buf); 711 while ((ch = buf[count])) { 712 checksum += ch; 713 count++; 714 } 715 strcat(get_buf, "#"); 716 get_buf[count + 2] = hex_asc_hi(checksum); 717 get_buf[count + 3] = hex_asc_lo(checksum); 718 get_buf[count + 4] = '\0'; 719 v2printk("get%i: %s\n", ts.idx, get_buf); 720 } 721 722 static int validate_simple_test(char *put_str) 723 { 724 char *chk_str; 725 726 if (ts.tst[ts.idx].put_handler) 727 return ts.tst[ts.idx].put_handler(put_str, 728 ts.tst[ts.idx].put); 729 730 chk_str = ts.tst[ts.idx].put; 731 if (*put_str == '$') 732 put_str++; 733 734 while (*chk_str != '\0' && *put_str != '\0') { 735 /* If someone does a * to match the rest of the string, allow 736 * it, or stop if the received string is complete. 737 */ 738 if (*put_str == '#' || *chk_str == '*') 739 return 0; 740 if (*put_str != *chk_str) 741 return 1; 742 743 chk_str++; 744 put_str++; 745 } 746 if (*chk_str == '\0' && (*put_str == '\0' || *put_str == '#')) 747 return 0; 748 749 return 1; 750 } 751 752 static int run_simple_test(int is_get_char, int chr) 753 { 754 int ret = 0; 755 if (is_get_char) { 756 /* Send an ACK on the get if a prior put completed and set the 757 * send ack variable 758 */ 759 if (send_ack) { 760 send_ack = 0; 761 return '+'; 762 } 763 /* On the first get char, fill the transmit buffer and then 764 * take from the get_string. 765 */ 766 if (get_buf_cnt == 0) { 767 if (ts.tst[ts.idx].get_handler) 768 ts.tst[ts.idx].get_handler(ts.tst[ts.idx].get); 769 else 770 fill_get_buf(ts.tst[ts.idx].get); 771 } 772 773 if (get_buf[get_buf_cnt] == '\0') { 774 eprintk("kgdbts: ERROR GET: EOB on '%s' at %i\n", 775 ts.name, ts.idx); 776 get_buf_cnt = 0; 777 fill_get_buf("D"); 778 } 779 ret = get_buf[get_buf_cnt]; 780 get_buf_cnt++; 781 return ret; 782 } 783 784 /* This callback is a put char which is when kgdb sends data to 785 * this I/O module. 786 */ 787 if (ts.tst[ts.idx].get[0] == '\0' && ts.tst[ts.idx].put[0] == '\0' && 788 !ts.tst[ts.idx].get_handler) { 789 eprintk("kgdbts: ERROR: beyond end of test on" 790 " '%s' line %i\n", ts.name, ts.idx); 791 return 0; 792 } 793 794 if (put_buf_cnt >= BUFMAX) { 795 eprintk("kgdbts: ERROR: put buffer overflow on" 796 " '%s' line %i\n", ts.name, ts.idx); 797 put_buf_cnt = 0; 798 return 0; 799 } 800 /* Ignore everything until the first valid packet start '$' */ 801 if (put_buf_cnt == 0 && chr != '$') 802 return 0; 803 804 put_buf[put_buf_cnt] = chr; 805 put_buf_cnt++; 806 807 /* End of packet == #XX so look for the '#' */ 808 if (put_buf_cnt > 3 && put_buf[put_buf_cnt - 3] == '#') { 809 if (put_buf_cnt >= BUFMAX) { 810 eprintk("kgdbts: ERROR: put buffer overflow on" 811 " '%s' line %i\n", ts.name, ts.idx); 812 put_buf_cnt = 0; 813 return 0; 814 } 815 put_buf[put_buf_cnt] = '\0'; 816 v2printk("put%i: %s\n", ts.idx, put_buf); 817 /* Trigger check here */ 818 if (ts.validate_put && ts.validate_put(put_buf)) { 819 eprintk("kgdbts: ERROR PUT: end of test " 820 "buffer on '%s' line %i expected %s got %s\n", 821 ts.name, ts.idx, ts.tst[ts.idx].put, put_buf); 822 } 823 ts.idx++; 824 put_buf_cnt = 0; 825 get_buf_cnt = 0; 826 send_ack = 1; 827 } 828 return 0; 829 } 830 831 static void init_simple_test(void) 832 { 833 memset(&ts, 0, sizeof(ts)); 834 ts.run_test = run_simple_test; 835 ts.validate_put = validate_simple_test; 836 } 837 838 static void run_plant_and_detach_test(int is_early) 839 { 840 char before[BREAK_INSTR_SIZE]; 841 char after[BREAK_INSTR_SIZE]; 842 843 probe_kernel_read(before, (char *)kgdbts_break_test, 844 BREAK_INSTR_SIZE); 845 init_simple_test(); 846 ts.tst = plant_and_detach_test; 847 ts.name = "plant_and_detach_test"; 848 /* Activate test with initial breakpoint */ 849 if (!is_early) 850 kgdb_breakpoint(); 851 probe_kernel_read(after, (char *)kgdbts_break_test, 852 BREAK_INSTR_SIZE); 853 if (memcmp(before, after, BREAK_INSTR_SIZE)) { 854 printk(KERN_CRIT "kgdbts: ERROR kgdb corrupted memory\n"); 855 panic("kgdb memory corruption"); 856 } 857 858 /* complete the detach test */ 859 if (!is_early) 860 kgdbts_break_test(); 861 } 862 863 static void run_breakpoint_test(int is_hw_breakpoint) 864 { 865 test_complete = 0; 866 init_simple_test(); 867 if (is_hw_breakpoint) { 868 ts.tst = hw_breakpoint_test; 869 ts.name = "hw_breakpoint_test"; 870 } else { 871 ts.tst = sw_breakpoint_test; 872 ts.name = "sw_breakpoint_test"; 873 } 874 /* Activate test with initial breakpoint */ 875 kgdb_breakpoint(); 876 /* run code with the break point in it */ 877 kgdbts_break_test(); 878 kgdb_breakpoint(); 879 880 if (test_complete) 881 return; 882 883 eprintk("kgdbts: ERROR %s test failed\n", ts.name); 884 if (is_hw_breakpoint) 885 hwbreaks_ok = 0; 886 } 887 888 static void run_hw_break_test(int is_write_test) 889 { 890 test_complete = 0; 891 init_simple_test(); 892 if (is_write_test) { 893 ts.tst = hw_write_break_test; 894 ts.name = "hw_write_break_test"; 895 } else { 896 ts.tst = hw_access_break_test; 897 ts.name = "hw_access_break_test"; 898 } 899 /* Activate test with initial breakpoint */ 900 kgdb_breakpoint(); 901 hw_break_val_access(); 902 if (is_write_test) { 903 if (test_complete == 2) { 904 eprintk("kgdbts: ERROR %s broke on access\n", 905 ts.name); 906 hwbreaks_ok = 0; 907 } 908 hw_break_val_write(); 909 } 910 kgdb_breakpoint(); 911 912 if (test_complete == 1) 913 return; 914 915 eprintk("kgdbts: ERROR %s test failed\n", ts.name); 916 hwbreaks_ok = 0; 917 } 918 919 static void run_nmi_sleep_test(int nmi_sleep) 920 { 921 unsigned long flags; 922 923 init_simple_test(); 924 ts.tst = nmi_sleep_test; 925 ts.name = "nmi_sleep_test"; 926 /* Activate test with initial breakpoint */ 927 kgdb_breakpoint(); 928 local_irq_save(flags); 929 mdelay(nmi_sleep*1000); 930 touch_nmi_watchdog(); 931 local_irq_restore(flags); 932 if (test_complete != 2) 933 eprintk("kgdbts: ERROR nmi_test did not hit nmi\n"); 934 kgdb_breakpoint(); 935 if (test_complete == 1) 936 return; 937 938 eprintk("kgdbts: ERROR %s test failed\n", ts.name); 939 } 940 941 static void run_bad_read_test(void) 942 { 943 init_simple_test(); 944 ts.tst = bad_read_test; 945 ts.name = "bad_read_test"; 946 /* Activate test with initial breakpoint */ 947 kgdb_breakpoint(); 948 } 949 950 static void run_do_fork_test(void) 951 { 952 init_simple_test(); 953 ts.tst = do_fork_test; 954 ts.name = "do_fork_test"; 955 /* Activate test with initial breakpoint */ 956 kgdb_breakpoint(); 957 } 958 959 static void run_sys_open_test(void) 960 { 961 init_simple_test(); 962 ts.tst = sys_open_test; 963 ts.name = "sys_open_test"; 964 /* Activate test with initial breakpoint */ 965 kgdb_breakpoint(); 966 } 967 968 static void run_singlestep_break_test(void) 969 { 970 init_simple_test(); 971 ts.tst = singlestep_break_test; 972 ts.name = "singlestep_breakpoint_test"; 973 /* Activate test with initial breakpoint */ 974 kgdb_breakpoint(); 975 kgdbts_break_test(); 976 kgdbts_break_test(); 977 } 978 979 static void kgdbts_run_tests(void) 980 { 981 char *ptr; 982 int fork_test = 0; 983 int do_sys_open_test = 0; 984 int sstep_test = 1000; 985 int nmi_sleep = 0; 986 int i; 987 988 verbose = 0; 989 if (strstr(config, "V1")) 990 verbose = 1; 991 if (strstr(config, "V2")) 992 verbose = 2; 993 994 ptr = strchr(config, 'F'); 995 if (ptr) 996 fork_test = simple_strtol(ptr + 1, NULL, 10); 997 ptr = strchr(config, 'S'); 998 if (ptr) 999 do_sys_open_test = simple_strtol(ptr + 1, NULL, 10); 1000 ptr = strchr(config, 'N'); 1001 if (ptr) 1002 nmi_sleep = simple_strtol(ptr+1, NULL, 10); 1003 ptr = strchr(config, 'I'); 1004 if (ptr) 1005 sstep_test = simple_strtol(ptr+1, NULL, 10); 1006 1007 /* All HW break point tests */ 1008 if (arch_kgdb_ops.flags & KGDB_HW_BREAKPOINT) { 1009 hwbreaks_ok = 1; 1010 v1printk("kgdbts:RUN hw breakpoint test\n"); 1011 run_breakpoint_test(1); 1012 v1printk("kgdbts:RUN hw write breakpoint test\n"); 1013 run_hw_break_test(1); 1014 v1printk("kgdbts:RUN access write breakpoint test\n"); 1015 run_hw_break_test(0); 1016 } 1017 1018 /* required internal KGDB tests */ 1019 v1printk("kgdbts:RUN plant and detach test\n"); 1020 run_plant_and_detach_test(0); 1021 v1printk("kgdbts:RUN sw breakpoint test\n"); 1022 run_breakpoint_test(0); 1023 v1printk("kgdbts:RUN bad memory access test\n"); 1024 run_bad_read_test(); 1025 v1printk("kgdbts:RUN singlestep test %i iterations\n", sstep_test); 1026 for (i = 0; i < sstep_test; i++) { 1027 run_singlestep_break_test(); 1028 if (i % 100 == 0) 1029 v1printk("kgdbts:RUN singlestep [%i/%i]\n", 1030 i, sstep_test); 1031 } 1032 1033 /* ===Optional tests=== */ 1034 1035 if (nmi_sleep) { 1036 v1printk("kgdbts:RUN NMI sleep %i seconds test\n", nmi_sleep); 1037 run_nmi_sleep_test(nmi_sleep); 1038 } 1039 1040 /* If the do_fork test is run it will be the last test that is 1041 * executed because a kernel thread will be spawned at the very 1042 * end to unregister the debug hooks. 1043 */ 1044 if (fork_test) { 1045 repeat_test = fork_test; 1046 printk(KERN_INFO "kgdbts:RUN do_fork for %i breakpoints\n", 1047 repeat_test); 1048 kthread_run(kgdbts_unreg_thread, NULL, "kgdbts_unreg"); 1049 run_do_fork_test(); 1050 return; 1051 } 1052 1053 /* If the sys_open test is run it will be the last test that is 1054 * executed because a kernel thread will be spawned at the very 1055 * end to unregister the debug hooks. 1056 */ 1057 if (do_sys_open_test) { 1058 repeat_test = do_sys_open_test; 1059 printk(KERN_INFO "kgdbts:RUN sys_open for %i breakpoints\n", 1060 repeat_test); 1061 kthread_run(kgdbts_unreg_thread, NULL, "kgdbts_unreg"); 1062 run_sys_open_test(); 1063 return; 1064 } 1065 /* Shutdown and unregister */ 1066 kgdb_unregister_io_module(&kgdbts_io_ops); 1067 configured = 0; 1068 } 1069 1070 static int kgdbts_option_setup(char *opt) 1071 { 1072 if (strlen(opt) >= MAX_CONFIG_LEN) { 1073 printk(KERN_ERR "kgdbts: config string too long\n"); 1074 return -ENOSPC; 1075 } 1076 strcpy(config, opt); 1077 return 0; 1078 } 1079 1080 __setup("kgdbts=", kgdbts_option_setup); 1081 1082 static int configure_kgdbts(void) 1083 { 1084 int err = 0; 1085 1086 if (!strlen(config) || isspace(config[0])) 1087 goto noconfig; 1088 1089 final_ack = 0; 1090 run_plant_and_detach_test(1); 1091 1092 err = kgdb_register_io_module(&kgdbts_io_ops); 1093 if (err) { 1094 configured = 0; 1095 return err; 1096 } 1097 configured = 1; 1098 kgdbts_run_tests(); 1099 1100 return err; 1101 1102 noconfig: 1103 config[0] = 0; 1104 configured = 0; 1105 1106 return err; 1107 } 1108 1109 static int __init init_kgdbts(void) 1110 { 1111 /* Already configured? */ 1112 if (configured == 1) 1113 return 0; 1114 1115 return configure_kgdbts(); 1116 } 1117 device_initcall(init_kgdbts); 1118 1119 static int kgdbts_get_char(void) 1120 { 1121 int val = 0; 1122 1123 if (ts.run_test) 1124 val = ts.run_test(1, 0); 1125 1126 return val; 1127 } 1128 1129 static void kgdbts_put_char(u8 chr) 1130 { 1131 if (ts.run_test) 1132 ts.run_test(0, chr); 1133 } 1134 1135 static int param_set_kgdbts_var(const char *kmessage, 1136 const struct kernel_param *kp) 1137 { 1138 size_t len = strlen(kmessage); 1139 1140 if (len >= MAX_CONFIG_LEN) { 1141 printk(KERN_ERR "kgdbts: config string too long\n"); 1142 return -ENOSPC; 1143 } 1144 1145 /* Only copy in the string if the init function has not run yet */ 1146 if (configured < 0) { 1147 strcpy(config, kmessage); 1148 return 0; 1149 } 1150 1151 if (configured == 1) { 1152 printk(KERN_ERR "kgdbts: ERROR: Already configured and running.\n"); 1153 return -EBUSY; 1154 } 1155 1156 strcpy(config, kmessage); 1157 /* Chop out \n char as a result of echo */ 1158 if (len && config[len - 1] == '\n') 1159 config[len - 1] = '\0'; 1160 1161 /* Go and configure with the new params. */ 1162 return configure_kgdbts(); 1163 } 1164 1165 static void kgdbts_pre_exp_handler(void) 1166 { 1167 /* Increment the module count when the debugger is active */ 1168 if (!kgdb_connected) 1169 try_module_get(THIS_MODULE); 1170 } 1171 1172 static void kgdbts_post_exp_handler(void) 1173 { 1174 /* decrement the module count when the debugger detaches */ 1175 if (!kgdb_connected) 1176 module_put(THIS_MODULE); 1177 } 1178 1179 static struct kgdb_io kgdbts_io_ops = { 1180 .name = "kgdbts", 1181 .read_char = kgdbts_get_char, 1182 .write_char = kgdbts_put_char, 1183 .pre_exception = kgdbts_pre_exp_handler, 1184 .post_exception = kgdbts_post_exp_handler, 1185 }; 1186 1187 /* 1188 * not really modular, but the easiest way to keep compat with existing 1189 * bootargs behaviour is to continue using module_param here. 1190 */ 1191 module_param_call(kgdbts, param_set_kgdbts_var, param_get_string, &kps, 0644); 1192 MODULE_PARM_DESC(kgdbts, "<A|V1|V2>[F#|S#][N#]"); 1193