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