Commit f30fed10c440a25937e509860fa207399b26efe5

Authored by Jason Wessel
1 parent a0d271cbfe

kgdb: Add module event hooks

Allow gdb to auto load kernel modules when it is attached,
which makes it trivially easy to debug module init functions
or pre-set breakpoints in a kernel module that has not loaded yet.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>

Showing 1 changed file with 18 additions and 0 deletions Side-by-side Diff

kernel/debug/debug_core.c
... ... @@ -688,6 +688,22 @@
688 688 return kgdb_cpu_enter(ks, regs, DCPU_WANT_MASTER);
689 689 }
690 690  
  691 +/*
  692 + * GDB places a breakpoint at this function to know dynamically
  693 + * loaded objects. It's not defined static so that only one instance with this
  694 + * name exists in the kernel.
  695 + */
  696 +
  697 +static int module_event(struct notifier_block *self, unsigned long val,
  698 + void *data)
  699 +{
  700 + return 0;
  701 +}
  702 +
  703 +static struct notifier_block dbg_module_load_nb = {
  704 + .notifier_call = module_event,
  705 +};
  706 +
691 707 int kgdb_nmicallback(int cpu, void *regs)
692 708 {
693 709 #ifdef CONFIG_SMP
... ... @@ -816,6 +832,7 @@
816 832 kgdb_arch_init();
817 833 if (!dbg_is_early)
818 834 kgdb_arch_late();
  835 + register_module_notifier(&dbg_module_load_nb);
819 836 register_reboot_notifier(&dbg_reboot_notifier);
820 837 atomic_notifier_chain_register(&panic_notifier_list,
821 838 &kgdb_panic_event_nb);
... ... @@ -839,6 +856,7 @@
839 856 if (kgdb_io_module_registered) {
840 857 kgdb_io_module_registered = 0;
841 858 unregister_reboot_notifier(&dbg_reboot_notifier);
  859 + unregister_module_notifier(&dbg_module_load_nb);
842 860 atomic_notifier_chain_unregister(&panic_notifier_list,
843 861 &kgdb_panic_event_nb);
844 862 kgdb_arch_exit();