root/kernel/debug/debug_core.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. opt_kgdb_con
  2. opt_nokgdbroundup
  3. kgdb_arch_set_breakpoint
  4. kgdb_arch_remove_breakpoint
  5. kgdb_validate_break_address
  6. kgdb_arch_pc
  7. kgdb_arch_init
  8. kgdb_skipexception
  9. kgdb_call_nmi_hook
  10. kgdb_roundup_cpus
  11. kgdb_flush_swbreak_addr
  12. dbg_activate_sw_breakpoints
  13. dbg_set_sw_break
  14. dbg_deactivate_sw_breakpoints
  15. dbg_remove_sw_break
  16. kgdb_isremovedbreak
  17. dbg_remove_all_break
  18. kgdb_io_ready
  19. kgdb_reenter_check
  20. dbg_touch_watchdogs
  21. kgdb_cpu_enter
  22. kgdb_handle_exception
  23. module_event
  24. kgdb_nmicallback
  25. kgdb_nmicallin
  26. kgdb_console_write
  27. sysrq_handle_dbg
  28. kgdb_panic
  29. kgdb_arch_late
  30. dbg_late_init
  31. dbg_notify_reboot
  32. kgdb_register_callbacks
  33. kgdb_unregister_callbacks
  34. kgdb_tasklet_bpt
  35. kgdb_schedule_breakpoint
  36. kgdb_initial_breakpoint
  37. kgdb_register_io_module
  38. kgdb_unregister_io_module
  39. dbg_io_get_char
  40. kgdb_breakpoint
  41. opt_kgdb_wait

   1 /*
   2  * Kernel Debug Core
   3  *
   4  * Maintainer: Jason Wessel <jason.wessel@windriver.com>
   5  *
   6  * Copyright (C) 2000-2001 VERITAS Software Corporation.
   7  * Copyright (C) 2002-2004 Timesys Corporation
   8  * Copyright (C) 2003-2004 Amit S. Kale <amitkale@linsyssoft.com>
   9  * Copyright (C) 2004 Pavel Machek <pavel@ucw.cz>
  10  * Copyright (C) 2004-2006 Tom Rini <trini@kernel.crashing.org>
  11  * Copyright (C) 2004-2006 LinSysSoft Technologies Pvt. Ltd.
  12  * Copyright (C) 2005-2009 Wind River Systems, Inc.
  13  * Copyright (C) 2007 MontaVista Software, Inc.
  14  * Copyright (C) 2008 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
  15  *
  16  * Contributors at various stages not listed above:
  17  *  Jason Wessel ( jason.wessel@windriver.com )
  18  *  George Anzinger <george@mvista.com>
  19  *  Anurekh Saxena (anurekh.saxena@timesys.com)
  20  *  Lake Stevens Instrument Division (Glenn Engel)
  21  *  Jim Kingdon, Cygnus Support.
  22  *
  23  * Original KGDB stub: David Grothe <dave@gcom.com>,
  24  * Tigran Aivazian <tigran@sco.com>
  25  *
  26  * This file is licensed under the terms of the GNU General Public License
  27  * version 2. This program is licensed "as is" without any warranty of any
  28  * kind, whether express or implied.
  29  */
  30 
  31 #define pr_fmt(fmt) "KGDB: " fmt
  32 
  33 #include <linux/pid_namespace.h>
  34 #include <linux/clocksource.h>
  35 #include <linux/serial_core.h>
  36 #include <linux/interrupt.h>
  37 #include <linux/spinlock.h>
  38 #include <linux/console.h>
  39 #include <linux/threads.h>
  40 #include <linux/uaccess.h>
  41 #include <linux/kernel.h>
  42 #include <linux/module.h>
  43 #include <linux/ptrace.h>
  44 #include <linux/string.h>
  45 #include <linux/delay.h>
  46 #include <linux/sched.h>
  47 #include <linux/sysrq.h>
  48 #include <linux/reboot.h>
  49 #include <linux/init.h>
  50 #include <linux/kgdb.h>
  51 #include <linux/kdb.h>
  52 #include <linux/nmi.h>
  53 #include <linux/pid.h>
  54 #include <linux/smp.h>
  55 #include <linux/mm.h>
  56 #include <linux/vmacache.h>
  57 #include <linux/rcupdate.h>
  58 #include <linux/irq.h>
  59 
  60 #include <asm/cacheflush.h>
  61 #include <asm/byteorder.h>
  62 #include <linux/atomic.h>
  63 
  64 #include "debug_core.h"
  65 
  66 static int kgdb_break_asap;
  67 
  68 struct debuggerinfo_struct kgdb_info[NR_CPUS];
  69 
  70 /**
  71  * kgdb_connected - Is a host GDB connected to us?
  72  */
  73 int                             kgdb_connected;
  74 EXPORT_SYMBOL_GPL(kgdb_connected);
  75 
  76 /* All the KGDB handlers are installed */
  77 int                     kgdb_io_module_registered;
  78 
  79 /* Guard for recursive entry */
  80 static int                      exception_level;
  81 
  82 struct kgdb_io          *dbg_io_ops;
  83 static DEFINE_SPINLOCK(kgdb_registration_lock);
  84 
  85 /* Action for the reboot notifiter, a global allow kdb to change it */
  86 static int kgdbreboot;
  87 /* kgdb console driver is loaded */
  88 static int kgdb_con_registered;
  89 /* determine if kgdb console output should be used */
  90 static int kgdb_use_con;
  91 /* Flag for alternate operations for early debugging */
  92 bool dbg_is_early = true;
  93 /* Next cpu to become the master debug core */
  94 int dbg_switch_cpu;
  95 
  96 /* Use kdb or gdbserver mode */
  97 int dbg_kdb_mode = 1;
  98 
  99 static int __init opt_kgdb_con(char *str)
 100 {
 101         kgdb_use_con = 1;
 102         return 0;
 103 }
 104 
 105 early_param("kgdbcon", opt_kgdb_con);
 106 
 107 module_param(kgdb_use_con, int, 0644);
 108 module_param(kgdbreboot, int, 0644);
 109 
 110 /*
 111  * Holds information about breakpoints in a kernel. These breakpoints are
 112  * added and removed by gdb.
 113  */
 114 static struct kgdb_bkpt         kgdb_break[KGDB_MAX_BREAKPOINTS] = {
 115         [0 ... KGDB_MAX_BREAKPOINTS-1] = { .state = BP_UNDEFINED }
 116 };
 117 
 118 /*
 119  * The CPU# of the active CPU, or -1 if none:
 120  */
 121 atomic_t                        kgdb_active = ATOMIC_INIT(-1);
 122 EXPORT_SYMBOL_GPL(kgdb_active);
 123 static DEFINE_RAW_SPINLOCK(dbg_master_lock);
 124 static DEFINE_RAW_SPINLOCK(dbg_slave_lock);
 125 
 126 /*
 127  * We use NR_CPUs not PERCPU, in case kgdb is used to debug early
 128  * bootup code (which might not have percpu set up yet):
 129  */
 130 static atomic_t                 masters_in_kgdb;
 131 static atomic_t                 slaves_in_kgdb;
 132 static atomic_t                 kgdb_break_tasklet_var;
 133 atomic_t                        kgdb_setting_breakpoint;
 134 
 135 struct task_struct              *kgdb_usethread;
 136 struct task_struct              *kgdb_contthread;
 137 
 138 int                             kgdb_single_step;
 139 static pid_t                    kgdb_sstep_pid;
 140 
 141 /* to keep track of the CPU which is doing the single stepping*/
 142 atomic_t                        kgdb_cpu_doing_single_step = ATOMIC_INIT(-1);
 143 
 144 /*
 145  * If you are debugging a problem where roundup (the collection of
 146  * all other CPUs) is a problem [this should be extremely rare],
 147  * then use the nokgdbroundup option to avoid roundup. In that case
 148  * the other CPUs might interfere with your debugging context, so
 149  * use this with care:
 150  */
 151 static int kgdb_do_roundup = 1;
 152 
 153 static int __init opt_nokgdbroundup(char *str)
 154 {
 155         kgdb_do_roundup = 0;
 156 
 157         return 0;
 158 }
 159 
 160 early_param("nokgdbroundup", opt_nokgdbroundup);
 161 
 162 /*
 163  * Finally, some KGDB code :-)
 164  */
 165 
 166 /*
 167  * Weak aliases for breakpoint management,
 168  * can be overriden by architectures when needed:
 169  */
 170 int __weak kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
 171 {
 172         int err;
 173 
 174         err = probe_kernel_read(bpt->saved_instr, (char *)bpt->bpt_addr,
 175                                 BREAK_INSTR_SIZE);
 176         if (err)
 177                 return err;
 178         err = probe_kernel_write((char *)bpt->bpt_addr,
 179                                  arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE);
 180         return err;
 181 }
 182 
 183 int __weak kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt)
 184 {
 185         return probe_kernel_write((char *)bpt->bpt_addr,
 186                                   (char *)bpt->saved_instr, BREAK_INSTR_SIZE);
 187 }
 188 
 189 int __weak kgdb_validate_break_address(unsigned long addr)
 190 {
 191         struct kgdb_bkpt tmp;
 192         int err;
 193         /* Validate setting the breakpoint and then removing it.  If the
 194          * remove fails, the kernel needs to emit a bad message because we
 195          * are deep trouble not being able to put things back the way we
 196          * found them.
 197          */
 198         tmp.bpt_addr = addr;
 199         err = kgdb_arch_set_breakpoint(&tmp);
 200         if (err)
 201                 return err;
 202         err = kgdb_arch_remove_breakpoint(&tmp);
 203         if (err)
 204                 pr_err("Critical breakpoint error, kernel memory destroyed at: %lx\n",
 205                        addr);
 206         return err;
 207 }
 208 
 209 unsigned long __weak kgdb_arch_pc(int exception, struct pt_regs *regs)
 210 {
 211         return instruction_pointer(regs);
 212 }
 213 
 214 int __weak kgdb_arch_init(void)
 215 {
 216         return 0;
 217 }
 218 
 219 int __weak kgdb_skipexception(int exception, struct pt_regs *regs)
 220 {
 221         return 0;
 222 }
 223 
 224 #ifdef CONFIG_SMP
 225 
 226 /*
 227  * Default (weak) implementation for kgdb_roundup_cpus
 228  */
 229 
 230 static DEFINE_PER_CPU(call_single_data_t, kgdb_roundup_csd);
 231 
 232 void __weak kgdb_call_nmi_hook(void *ignored)
 233 {
 234         /*
 235          * NOTE: get_irq_regs() is supposed to get the registers from
 236          * before the IPI interrupt happened and so is supposed to
 237          * show where the processor was.  In some situations it's
 238          * possible we might be called without an IPI, so it might be
 239          * safer to figure out how to make kgdb_breakpoint() work
 240          * properly here.
 241          */
 242         kgdb_nmicallback(raw_smp_processor_id(), get_irq_regs());
 243 }
 244 
 245 void __weak kgdb_roundup_cpus(void)
 246 {
 247         call_single_data_t *csd;
 248         int this_cpu = raw_smp_processor_id();
 249         int cpu;
 250         int ret;
 251 
 252         for_each_online_cpu(cpu) {
 253                 /* No need to roundup ourselves */
 254                 if (cpu == this_cpu)
 255                         continue;
 256 
 257                 csd = &per_cpu(kgdb_roundup_csd, cpu);
 258 
 259                 /*
 260                  * If it didn't round up last time, don't try again
 261                  * since smp_call_function_single_async() will block.
 262                  *
 263                  * If rounding_up is false then we know that the
 264                  * previous call must have at least started and that
 265                  * means smp_call_function_single_async() won't block.
 266                  */
 267                 if (kgdb_info[cpu].rounding_up)
 268                         continue;
 269                 kgdb_info[cpu].rounding_up = true;
 270 
 271                 csd->func = kgdb_call_nmi_hook;
 272                 ret = smp_call_function_single_async(cpu, csd);
 273                 if (ret)
 274                         kgdb_info[cpu].rounding_up = false;
 275         }
 276 }
 277 
 278 #endif
 279 
 280 /*
 281  * Some architectures need cache flushes when we set/clear a
 282  * breakpoint:
 283  */
 284 static void kgdb_flush_swbreak_addr(unsigned long addr)
 285 {
 286         if (!CACHE_FLUSH_IS_SAFE)
 287                 return;
 288 
 289         if (current->mm) {
 290                 int i;
 291 
 292                 for (i = 0; i < VMACACHE_SIZE; i++) {
 293                         if (!current->vmacache.vmas[i])
 294                                 continue;
 295                         flush_cache_range(current->vmacache.vmas[i],
 296                                           addr, addr + BREAK_INSTR_SIZE);
 297                 }
 298         }
 299 
 300         /* Force flush instruction cache if it was outside the mm */
 301         flush_icache_range(addr, addr + BREAK_INSTR_SIZE);
 302 }
 303 
 304 /*
 305  * SW breakpoint management:
 306  */
 307 int dbg_activate_sw_breakpoints(void)
 308 {
 309         int error;
 310         int ret = 0;
 311         int i;
 312 
 313         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
 314                 if (kgdb_break[i].state != BP_SET)
 315                         continue;
 316 
 317                 error = kgdb_arch_set_breakpoint(&kgdb_break[i]);
 318                 if (error) {
 319                         ret = error;
 320                         pr_info("BP install failed: %lx\n",
 321                                 kgdb_break[i].bpt_addr);
 322                         continue;
 323                 }
 324 
 325                 kgdb_flush_swbreak_addr(kgdb_break[i].bpt_addr);
 326                 kgdb_break[i].state = BP_ACTIVE;
 327         }
 328         return ret;
 329 }
 330 
 331 int dbg_set_sw_break(unsigned long addr)
 332 {
 333         int err = kgdb_validate_break_address(addr);
 334         int breakno = -1;
 335         int i;
 336 
 337         if (err)
 338                 return err;
 339 
 340         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
 341                 if ((kgdb_break[i].state == BP_SET) &&
 342                                         (kgdb_break[i].bpt_addr == addr))
 343                         return -EEXIST;
 344         }
 345         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
 346                 if (kgdb_break[i].state == BP_REMOVED &&
 347                                         kgdb_break[i].bpt_addr == addr) {
 348                         breakno = i;
 349                         break;
 350                 }
 351         }
 352 
 353         if (breakno == -1) {
 354                 for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
 355                         if (kgdb_break[i].state == BP_UNDEFINED) {
 356                                 breakno = i;
 357                                 break;
 358                         }
 359                 }
 360         }
 361 
 362         if (breakno == -1)
 363                 return -E2BIG;
 364 
 365         kgdb_break[breakno].state = BP_SET;
 366         kgdb_break[breakno].type = BP_BREAKPOINT;
 367         kgdb_break[breakno].bpt_addr = addr;
 368 
 369         return 0;
 370 }
 371 
 372 int dbg_deactivate_sw_breakpoints(void)
 373 {
 374         int error;
 375         int ret = 0;
 376         int i;
 377 
 378         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
 379                 if (kgdb_break[i].state != BP_ACTIVE)
 380                         continue;
 381                 error = kgdb_arch_remove_breakpoint(&kgdb_break[i]);
 382                 if (error) {
 383                         pr_info("BP remove failed: %lx\n",
 384                                 kgdb_break[i].bpt_addr);
 385                         ret = error;
 386                 }
 387 
 388                 kgdb_flush_swbreak_addr(kgdb_break[i].bpt_addr);
 389                 kgdb_break[i].state = BP_SET;
 390         }
 391         return ret;
 392 }
 393 
 394 int dbg_remove_sw_break(unsigned long addr)
 395 {
 396         int i;
 397 
 398         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
 399                 if ((kgdb_break[i].state == BP_SET) &&
 400                                 (kgdb_break[i].bpt_addr == addr)) {
 401                         kgdb_break[i].state = BP_REMOVED;
 402                         return 0;
 403                 }
 404         }
 405         return -ENOENT;
 406 }
 407 
 408 int kgdb_isremovedbreak(unsigned long addr)
 409 {
 410         int i;
 411 
 412         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
 413                 if ((kgdb_break[i].state == BP_REMOVED) &&
 414                                         (kgdb_break[i].bpt_addr == addr))
 415                         return 1;
 416         }
 417         return 0;
 418 }
 419 
 420 int dbg_remove_all_break(void)
 421 {
 422         int error;
 423         int i;
 424 
 425         /* Clear memory breakpoints. */
 426         for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
 427                 if (kgdb_break[i].state != BP_ACTIVE)
 428                         goto setundefined;
 429                 error = kgdb_arch_remove_breakpoint(&kgdb_break[i]);
 430                 if (error)
 431                         pr_err("breakpoint remove failed: %lx\n",
 432                                kgdb_break[i].bpt_addr);
 433 setundefined:
 434                 kgdb_break[i].state = BP_UNDEFINED;
 435         }
 436 
 437         /* Clear hardware breakpoints. */
 438         if (arch_kgdb_ops.remove_all_hw_break)
 439                 arch_kgdb_ops.remove_all_hw_break();
 440 
 441         return 0;
 442 }
 443 
 444 /*
 445  * Return true if there is a valid kgdb I/O module.  Also if no
 446  * debugger is attached a message can be printed to the console about
 447  * waiting for the debugger to attach.
 448  *
 449  * The print_wait argument is only to be true when called from inside
 450  * the core kgdb_handle_exception, because it will wait for the
 451  * debugger to attach.
 452  */
 453 static int kgdb_io_ready(int print_wait)
 454 {
 455         if (!dbg_io_ops)
 456                 return 0;
 457         if (kgdb_connected)
 458                 return 1;
 459         if (atomic_read(&kgdb_setting_breakpoint))
 460                 return 1;
 461         if (print_wait) {
 462 #ifdef CONFIG_KGDB_KDB
 463                 if (!dbg_kdb_mode)
 464                         pr_crit("waiting... or $3#33 for KDB\n");
 465 #else
 466                 pr_crit("Waiting for remote debugger\n");
 467 #endif
 468         }
 469         return 1;
 470 }
 471 
 472 static int kgdb_reenter_check(struct kgdb_state *ks)
 473 {
 474         unsigned long addr;
 475 
 476         if (atomic_read(&kgdb_active) != raw_smp_processor_id())
 477                 return 0;
 478 
 479         /* Panic on recursive debugger calls: */
 480         exception_level++;
 481         addr = kgdb_arch_pc(ks->ex_vector, ks->linux_regs);
 482         dbg_deactivate_sw_breakpoints();
 483 
 484         /*
 485          * If the break point removed ok at the place exception
 486          * occurred, try to recover and print a warning to the end
 487          * user because the user planted a breakpoint in a place that
 488          * KGDB needs in order to function.
 489          */
 490         if (dbg_remove_sw_break(addr) == 0) {
 491                 exception_level = 0;
 492                 kgdb_skipexception(ks->ex_vector, ks->linux_regs);
 493                 dbg_activate_sw_breakpoints();
 494                 pr_crit("re-enter error: breakpoint removed %lx\n", addr);
 495                 WARN_ON_ONCE(1);
 496 
 497                 return 1;
 498         }
 499         dbg_remove_all_break();
 500         kgdb_skipexception(ks->ex_vector, ks->linux_regs);
 501 
 502         if (exception_level > 1) {
 503                 dump_stack();
 504                 panic("Recursive entry to debugger");
 505         }
 506 
 507         pr_crit("re-enter exception: ALL breakpoints killed\n");
 508 #ifdef CONFIG_KGDB_KDB
 509         /* Allow kdb to debug itself one level */
 510         return 0;
 511 #endif
 512         dump_stack();
 513         panic("Recursive entry to debugger");
 514 
 515         return 1;
 516 }
 517 
 518 static void dbg_touch_watchdogs(void)
 519 {
 520         touch_softlockup_watchdog_sync();
 521         clocksource_touch_watchdog();
 522         rcu_cpu_stall_reset();
 523 }
 524 
 525 static int kgdb_cpu_enter(struct kgdb_state *ks, struct pt_regs *regs,
 526                 int exception_state)
 527 {
 528         unsigned long flags;
 529         int sstep_tries = 100;
 530         int error;
 531         int cpu;
 532         int trace_on = 0;
 533         int online_cpus = num_online_cpus();
 534         u64 time_left;
 535 
 536         kgdb_info[ks->cpu].enter_kgdb++;
 537         kgdb_info[ks->cpu].exception_state |= exception_state;
 538 
 539         if (exception_state == DCPU_WANT_MASTER)
 540                 atomic_inc(&masters_in_kgdb);
 541         else
 542                 atomic_inc(&slaves_in_kgdb);
 543 
 544         if (arch_kgdb_ops.disable_hw_break)
 545                 arch_kgdb_ops.disable_hw_break(regs);
 546 
 547 acquirelock:
 548         /*
 549          * Interrupts will be restored by the 'trap return' code, except when
 550          * single stepping.
 551          */
 552         local_irq_save(flags);
 553 
 554         cpu = ks->cpu;
 555         kgdb_info[cpu].debuggerinfo = regs;
 556         kgdb_info[cpu].task = current;
 557         kgdb_info[cpu].ret_state = 0;
 558         kgdb_info[cpu].irq_depth = hardirq_count() >> HARDIRQ_SHIFT;
 559 
 560         /* Make sure the above info reaches the primary CPU */
 561         smp_mb();
 562 
 563         if (exception_level == 1) {
 564                 if (raw_spin_trylock(&dbg_master_lock))
 565                         atomic_xchg(&kgdb_active, cpu);
 566                 goto cpu_master_loop;
 567         }
 568 
 569         /*
 570          * CPU will loop if it is a slave or request to become a kgdb
 571          * master cpu and acquire the kgdb_active lock:
 572          */
 573         while (1) {
 574 cpu_loop:
 575                 if (kgdb_info[cpu].exception_state & DCPU_NEXT_MASTER) {
 576                         kgdb_info[cpu].exception_state &= ~DCPU_NEXT_MASTER;
 577                         goto cpu_master_loop;
 578                 } else if (kgdb_info[cpu].exception_state & DCPU_WANT_MASTER) {
 579                         if (raw_spin_trylock(&dbg_master_lock)) {
 580                                 atomic_xchg(&kgdb_active, cpu);
 581                                 break;
 582                         }
 583                 } else if (kgdb_info[cpu].exception_state & DCPU_IS_SLAVE) {
 584                         if (!raw_spin_is_locked(&dbg_slave_lock))
 585                                 goto return_normal;
 586                 } else {
 587 return_normal:
 588                         /* Return to normal operation by executing any
 589                          * hw breakpoint fixup.
 590                          */
 591                         if (arch_kgdb_ops.correct_hw_break)
 592                                 arch_kgdb_ops.correct_hw_break();
 593                         if (trace_on)
 594                                 tracing_on();
 595                         kgdb_info[cpu].debuggerinfo = NULL;
 596                         kgdb_info[cpu].task = NULL;
 597                         kgdb_info[cpu].exception_state &=
 598                                 ~(DCPU_WANT_MASTER | DCPU_IS_SLAVE);
 599                         kgdb_info[cpu].enter_kgdb--;
 600                         smp_mb__before_atomic();
 601                         atomic_dec(&slaves_in_kgdb);
 602                         dbg_touch_watchdogs();
 603                         local_irq_restore(flags);
 604                         return 0;
 605                 }
 606                 cpu_relax();
 607         }
 608 
 609         /*
 610          * For single stepping, try to only enter on the processor
 611          * that was single stepping.  To guard against a deadlock, the
 612          * kernel will only try for the value of sstep_tries before
 613          * giving up and continuing on.
 614          */
 615         if (atomic_read(&kgdb_cpu_doing_single_step) != -1 &&
 616             (kgdb_info[cpu].task &&
 617              kgdb_info[cpu].task->pid != kgdb_sstep_pid) && --sstep_tries) {
 618                 atomic_set(&kgdb_active, -1);
 619                 raw_spin_unlock(&dbg_master_lock);
 620                 dbg_touch_watchdogs();
 621                 local_irq_restore(flags);
 622 
 623                 goto acquirelock;
 624         }
 625 
 626         if (!kgdb_io_ready(1)) {
 627                 kgdb_info[cpu].ret_state = 1;
 628                 goto kgdb_restore; /* No I/O connection, resume the system */
 629         }
 630 
 631         /*
 632          * Don't enter if we have hit a removed breakpoint.
 633          */
 634         if (kgdb_skipexception(ks->ex_vector, ks->linux_regs))
 635                 goto kgdb_restore;
 636 
 637         /* Call the I/O driver's pre_exception routine */
 638         if (dbg_io_ops->pre_exception)
 639                 dbg_io_ops->pre_exception();
 640 
 641         /*
 642          * Get the passive CPU lock which will hold all the non-primary
 643          * CPU in a spin state while the debugger is active
 644          */
 645         if (!kgdb_single_step)
 646                 raw_spin_lock(&dbg_slave_lock);
 647 
 648 #ifdef CONFIG_SMP
 649         /* If send_ready set, slaves are already waiting */
 650         if (ks->send_ready)
 651                 atomic_set(ks->send_ready, 1);
 652 
 653         /* Signal the other CPUs to enter kgdb_wait() */
 654         else if ((!kgdb_single_step) && kgdb_do_roundup)
 655                 kgdb_roundup_cpus();
 656 #endif
 657 
 658         /*
 659          * Wait for the other CPUs to be notified and be waiting for us:
 660          */
 661         time_left = MSEC_PER_SEC;
 662         while (kgdb_do_roundup && --time_left &&
 663                (atomic_read(&masters_in_kgdb) + atomic_read(&slaves_in_kgdb)) !=
 664                    online_cpus)
 665                 udelay(1000);
 666         if (!time_left)
 667                 pr_crit("Timed out waiting for secondary CPUs.\n");
 668 
 669         /*
 670          * At this point the primary processor is completely
 671          * in the debugger and all secondary CPUs are quiescent
 672          */
 673         dbg_deactivate_sw_breakpoints();
 674         kgdb_single_step = 0;
 675         kgdb_contthread = current;
 676         exception_level = 0;
 677         trace_on = tracing_is_on();
 678         if (trace_on)
 679                 tracing_off();
 680 
 681         while (1) {
 682 cpu_master_loop:
 683                 if (dbg_kdb_mode) {
 684                         kgdb_connected = 1;
 685                         error = kdb_stub(ks);
 686                         if (error == -1)
 687                                 continue;
 688                         kgdb_connected = 0;
 689                 } else {
 690                         error = gdb_serial_stub(ks);
 691                 }
 692 
 693                 if (error == DBG_PASS_EVENT) {
 694                         dbg_kdb_mode = !dbg_kdb_mode;
 695                 } else if (error == DBG_SWITCH_CPU_EVENT) {
 696                         kgdb_info[dbg_switch_cpu].exception_state |=
 697                                 DCPU_NEXT_MASTER;
 698                         goto cpu_loop;
 699                 } else {
 700                         kgdb_info[cpu].ret_state = error;
 701                         break;
 702                 }
 703         }
 704 
 705         /* Call the I/O driver's post_exception routine */
 706         if (dbg_io_ops->post_exception)
 707                 dbg_io_ops->post_exception();
 708 
 709         if (!kgdb_single_step) {
 710                 raw_spin_unlock(&dbg_slave_lock);
 711                 /* Wait till all the CPUs have quit from the debugger. */
 712                 while (kgdb_do_roundup && atomic_read(&slaves_in_kgdb))
 713                         cpu_relax();
 714         }
 715 
 716 kgdb_restore:
 717         if (atomic_read(&kgdb_cpu_doing_single_step) != -1) {
 718                 int sstep_cpu = atomic_read(&kgdb_cpu_doing_single_step);
 719                 if (kgdb_info[sstep_cpu].task)
 720                         kgdb_sstep_pid = kgdb_info[sstep_cpu].task->pid;
 721                 else
 722                         kgdb_sstep_pid = 0;
 723         }
 724         if (arch_kgdb_ops.correct_hw_break)
 725                 arch_kgdb_ops.correct_hw_break();
 726         if (trace_on)
 727                 tracing_on();
 728 
 729         kgdb_info[cpu].debuggerinfo = NULL;
 730         kgdb_info[cpu].task = NULL;
 731         kgdb_info[cpu].exception_state &=
 732                 ~(DCPU_WANT_MASTER | DCPU_IS_SLAVE);
 733         kgdb_info[cpu].enter_kgdb--;
 734         smp_mb__before_atomic();
 735         atomic_dec(&masters_in_kgdb);
 736         /* Free kgdb_active */
 737         atomic_set(&kgdb_active, -1);
 738         raw_spin_unlock(&dbg_master_lock);
 739         dbg_touch_watchdogs();
 740         local_irq_restore(flags);
 741 
 742         return kgdb_info[cpu].ret_state;
 743 }
 744 
 745 /*
 746  * kgdb_handle_exception() - main entry point from a kernel exception
 747  *
 748  * Locking hierarchy:
 749  *      interface locks, if any (begin_session)
 750  *      kgdb lock (kgdb_active)
 751  */
 752 int
 753 kgdb_handle_exception(int evector, int signo, int ecode, struct pt_regs *regs)
 754 {
 755         struct kgdb_state kgdb_var;
 756         struct kgdb_state *ks = &kgdb_var;
 757         int ret = 0;
 758 
 759         if (arch_kgdb_ops.enable_nmi)
 760                 arch_kgdb_ops.enable_nmi(0);
 761         /*
 762          * Avoid entering the debugger if we were triggered due to an oops
 763          * but panic_timeout indicates the system should automatically
 764          * reboot on panic. We don't want to get stuck waiting for input
 765          * on such systems, especially if its "just" an oops.
 766          */
 767         if (signo != SIGTRAP && panic_timeout)
 768                 return 1;
 769 
 770         memset(ks, 0, sizeof(struct kgdb_state));
 771         ks->cpu                 = raw_smp_processor_id();
 772         ks->ex_vector           = evector;
 773         ks->signo               = signo;
 774         ks->err_code            = ecode;
 775         ks->linux_regs          = regs;
 776 
 777         if (kgdb_reenter_check(ks))
 778                 goto out; /* Ouch, double exception ! */
 779         if (kgdb_info[ks->cpu].enter_kgdb != 0)
 780                 goto out;
 781 
 782         ret = kgdb_cpu_enter(ks, regs, DCPU_WANT_MASTER);
 783 out:
 784         if (arch_kgdb_ops.enable_nmi)
 785                 arch_kgdb_ops.enable_nmi(1);
 786         return ret;
 787 }
 788 
 789 /*
 790  * GDB places a breakpoint at this function to know dynamically loaded objects.
 791  */
 792 static int module_event(struct notifier_block *self, unsigned long val,
 793         void *data)
 794 {
 795         return 0;
 796 }
 797 
 798 static struct notifier_block dbg_module_load_nb = {
 799         .notifier_call  = module_event,
 800 };
 801 
 802 int kgdb_nmicallback(int cpu, void *regs)
 803 {
 804 #ifdef CONFIG_SMP
 805         struct kgdb_state kgdb_var;
 806         struct kgdb_state *ks = &kgdb_var;
 807 
 808         kgdb_info[cpu].rounding_up = false;
 809 
 810         memset(ks, 0, sizeof(struct kgdb_state));
 811         ks->cpu                 = cpu;
 812         ks->linux_regs          = regs;
 813 
 814         if (kgdb_info[ks->cpu].enter_kgdb == 0 &&
 815                         raw_spin_is_locked(&dbg_master_lock)) {
 816                 kgdb_cpu_enter(ks, regs, DCPU_IS_SLAVE);
 817                 return 0;
 818         }
 819 #endif
 820         return 1;
 821 }
 822 
 823 int kgdb_nmicallin(int cpu, int trapnr, void *regs, int err_code,
 824                                                         atomic_t *send_ready)
 825 {
 826 #ifdef CONFIG_SMP
 827         if (!kgdb_io_ready(0) || !send_ready)
 828                 return 1;
 829 
 830         if (kgdb_info[cpu].enter_kgdb == 0) {
 831                 struct kgdb_state kgdb_var;
 832                 struct kgdb_state *ks = &kgdb_var;
 833 
 834                 memset(ks, 0, sizeof(struct kgdb_state));
 835                 ks->cpu                 = cpu;
 836                 ks->ex_vector           = trapnr;
 837                 ks->signo               = SIGTRAP;
 838                 ks->err_code            = err_code;
 839                 ks->linux_regs          = regs;
 840                 ks->send_ready          = send_ready;
 841                 kgdb_cpu_enter(ks, regs, DCPU_WANT_MASTER);
 842                 return 0;
 843         }
 844 #endif
 845         return 1;
 846 }
 847 
 848 static void kgdb_console_write(struct console *co, const char *s,
 849    unsigned count)
 850 {
 851         unsigned long flags;
 852 
 853         /* If we're debugging, or KGDB has not connected, don't try
 854          * and print. */
 855         if (!kgdb_connected || atomic_read(&kgdb_active) != -1 || dbg_kdb_mode)
 856                 return;
 857 
 858         local_irq_save(flags);
 859         gdbstub_msg_write(s, count);
 860         local_irq_restore(flags);
 861 }
 862 
 863 static struct console kgdbcons = {
 864         .name           = "kgdb",
 865         .write          = kgdb_console_write,
 866         .flags          = CON_PRINTBUFFER | CON_ENABLED,
 867         .index          = -1,
 868 };
 869 
 870 #ifdef CONFIG_MAGIC_SYSRQ
 871 static void sysrq_handle_dbg(int key)
 872 {
 873         if (!dbg_io_ops) {
 874                 pr_crit("ERROR: No KGDB I/O module available\n");
 875                 return;
 876         }
 877         if (!kgdb_connected) {
 878 #ifdef CONFIG_KGDB_KDB
 879                 if (!dbg_kdb_mode)
 880                         pr_crit("KGDB or $3#33 for KDB\n");
 881 #else
 882                 pr_crit("Entering KGDB\n");
 883 #endif
 884         }
 885 
 886         kgdb_breakpoint();
 887 }
 888 
 889 static struct sysrq_key_op sysrq_dbg_op = {
 890         .handler        = sysrq_handle_dbg,
 891         .help_msg       = "debug(g)",
 892         .action_msg     = "DEBUG",
 893 };
 894 #endif
 895 
 896 void kgdb_panic(const char *msg)
 897 {
 898         if (!kgdb_io_module_registered)
 899                 return;
 900 
 901         /*
 902          * We don't want to get stuck waiting for input from user if
 903          * "panic_timeout" indicates the system should automatically
 904          * reboot on panic.
 905          */
 906         if (panic_timeout)
 907                 return;
 908 
 909         if (dbg_kdb_mode)
 910                 kdb_printf("PANIC: %s\n", msg);
 911 
 912         kgdb_breakpoint();
 913 }
 914 
 915 void __weak kgdb_arch_late(void)
 916 {
 917 }
 918 
 919 void __init dbg_late_init(void)
 920 {
 921         dbg_is_early = false;
 922         if (kgdb_io_module_registered)
 923                 kgdb_arch_late();
 924         kdb_init(KDB_INIT_FULL);
 925 }
 926 
 927 static int
 928 dbg_notify_reboot(struct notifier_block *this, unsigned long code, void *x)
 929 {
 930         /*
 931          * Take the following action on reboot notify depending on value:
 932          *    1 == Enter debugger
 933          *    0 == [the default] detatch debug client
 934          *   -1 == Do nothing... and use this until the board resets
 935          */
 936         switch (kgdbreboot) {
 937         case 1:
 938                 kgdb_breakpoint();
 939         case -1:
 940                 goto done;
 941         }
 942         if (!dbg_kdb_mode)
 943                 gdbstub_exit(code);
 944 done:
 945         return NOTIFY_DONE;
 946 }
 947 
 948 static struct notifier_block dbg_reboot_notifier = {
 949         .notifier_call          = dbg_notify_reboot,
 950         .next                   = NULL,
 951         .priority               = INT_MAX,
 952 };
 953 
 954 static void kgdb_register_callbacks(void)
 955 {
 956         if (!kgdb_io_module_registered) {
 957                 kgdb_io_module_registered = 1;
 958                 kgdb_arch_init();
 959                 if (!dbg_is_early)
 960                         kgdb_arch_late();
 961                 register_module_notifier(&dbg_module_load_nb);
 962                 register_reboot_notifier(&dbg_reboot_notifier);
 963 #ifdef CONFIG_MAGIC_SYSRQ
 964                 register_sysrq_key('g', &sysrq_dbg_op);
 965 #endif
 966                 if (kgdb_use_con && !kgdb_con_registered) {
 967                         register_console(&kgdbcons);
 968                         kgdb_con_registered = 1;
 969                 }
 970         }
 971 }
 972 
 973 static void kgdb_unregister_callbacks(void)
 974 {
 975         /*
 976          * When this routine is called KGDB should unregister from
 977          * handlers and clean up, making sure it is not handling any
 978          * break exceptions at the time.
 979          */
 980         if (kgdb_io_module_registered) {
 981                 kgdb_io_module_registered = 0;
 982                 unregister_reboot_notifier(&dbg_reboot_notifier);
 983                 unregister_module_notifier(&dbg_module_load_nb);
 984                 kgdb_arch_exit();
 985 #ifdef CONFIG_MAGIC_SYSRQ
 986                 unregister_sysrq_key('g', &sysrq_dbg_op);
 987 #endif
 988                 if (kgdb_con_registered) {
 989                         unregister_console(&kgdbcons);
 990                         kgdb_con_registered = 0;
 991                 }
 992         }
 993 }
 994 
 995 /*
 996  * There are times a tasklet needs to be used vs a compiled in
 997  * break point so as to cause an exception outside a kgdb I/O module,
 998  * such as is the case with kgdboe, where calling a breakpoint in the
 999  * I/O driver itself would be fatal.
1000  */
1001 static void kgdb_tasklet_bpt(unsigned long ing)
1002 {
1003         kgdb_breakpoint();
1004         atomic_set(&kgdb_break_tasklet_var, 0);
1005 }
1006 
1007 static DECLARE_TASKLET(kgdb_tasklet_breakpoint, kgdb_tasklet_bpt, 0);
1008 
1009 void kgdb_schedule_breakpoint(void)
1010 {
1011         if (atomic_read(&kgdb_break_tasklet_var) ||
1012                 atomic_read(&kgdb_active) != -1 ||
1013                 atomic_read(&kgdb_setting_breakpoint))
1014                 return;
1015         atomic_inc(&kgdb_break_tasklet_var);
1016         tasklet_schedule(&kgdb_tasklet_breakpoint);
1017 }
1018 EXPORT_SYMBOL_GPL(kgdb_schedule_breakpoint);
1019 
1020 static void kgdb_initial_breakpoint(void)
1021 {
1022         kgdb_break_asap = 0;
1023 
1024         pr_crit("Waiting for connection from remote gdb...\n");
1025         kgdb_breakpoint();
1026 }
1027 
1028 /**
1029  *      kgdb_register_io_module - register KGDB IO module
1030  *      @new_dbg_io_ops: the io ops vector
1031  *
1032  *      Register it with the KGDB core.
1033  */
1034 int kgdb_register_io_module(struct kgdb_io *new_dbg_io_ops)
1035 {
1036         int err;
1037 
1038         spin_lock(&kgdb_registration_lock);
1039 
1040         if (dbg_io_ops) {
1041                 spin_unlock(&kgdb_registration_lock);
1042 
1043                 pr_err("Another I/O driver is already registered with KGDB\n");
1044                 return -EBUSY;
1045         }
1046 
1047         if (new_dbg_io_ops->init) {
1048                 err = new_dbg_io_ops->init();
1049                 if (err) {
1050                         spin_unlock(&kgdb_registration_lock);
1051                         return err;
1052                 }
1053         }
1054 
1055         dbg_io_ops = new_dbg_io_ops;
1056 
1057         spin_unlock(&kgdb_registration_lock);
1058 
1059         pr_info("Registered I/O driver %s\n", new_dbg_io_ops->name);
1060 
1061         /* Arm KGDB now. */
1062         kgdb_register_callbacks();
1063 
1064         if (kgdb_break_asap)
1065                 kgdb_initial_breakpoint();
1066 
1067         return 0;
1068 }
1069 EXPORT_SYMBOL_GPL(kgdb_register_io_module);
1070 
1071 /**
1072  *      kkgdb_unregister_io_module - unregister KGDB IO module
1073  *      @old_dbg_io_ops: the io ops vector
1074  *
1075  *      Unregister it with the KGDB core.
1076  */
1077 void kgdb_unregister_io_module(struct kgdb_io *old_dbg_io_ops)
1078 {
1079         BUG_ON(kgdb_connected);
1080 
1081         /*
1082          * KGDB is no longer able to communicate out, so
1083          * unregister our callbacks and reset state.
1084          */
1085         kgdb_unregister_callbacks();
1086 
1087         spin_lock(&kgdb_registration_lock);
1088 
1089         WARN_ON_ONCE(dbg_io_ops != old_dbg_io_ops);
1090         dbg_io_ops = NULL;
1091 
1092         spin_unlock(&kgdb_registration_lock);
1093 
1094         pr_info("Unregistered I/O driver %s, debugger disabled\n",
1095                 old_dbg_io_ops->name);
1096 }
1097 EXPORT_SYMBOL_GPL(kgdb_unregister_io_module);
1098 
1099 int dbg_io_get_char(void)
1100 {
1101         int ret = dbg_io_ops->read_char();
1102         if (ret == NO_POLL_CHAR)
1103                 return -1;
1104         if (!dbg_kdb_mode)
1105                 return ret;
1106         if (ret == 127)
1107                 return 8;
1108         return ret;
1109 }
1110 
1111 /**
1112  * kgdb_breakpoint - generate breakpoint exception
1113  *
1114  * This function will generate a breakpoint exception.  It is used at the
1115  * beginning of a program to sync up with a debugger and can be used
1116  * otherwise as a quick means to stop program execution and "break" into
1117  * the debugger.
1118  */
1119 noinline void kgdb_breakpoint(void)
1120 {
1121         atomic_inc(&kgdb_setting_breakpoint);
1122         wmb(); /* Sync point before breakpoint */
1123         arch_kgdb_breakpoint();
1124         wmb(); /* Sync point after breakpoint */
1125         atomic_dec(&kgdb_setting_breakpoint);
1126 }
1127 EXPORT_SYMBOL_GPL(kgdb_breakpoint);
1128 
1129 static int __init opt_kgdb_wait(char *str)
1130 {
1131         kgdb_break_asap = 1;
1132 
1133         kdb_init(KDB_INIT_EARLY);
1134         if (kgdb_io_module_registered)
1135                 kgdb_initial_breakpoint();
1136 
1137         return 0;
1138 }
1139 
1140 early_param("kgdbwait", opt_kgdb_wait);

/* [<][>][^][v][top][bottom][index][help] */