Commit f30fed10c440a25937e509860fa207399b26efe5
1 parent
a0d271cbfe
Exists in
master
and in
20 other branches
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(); |