kernel/debug/debug_core.c
Source file repositories/reference/linux-study-clean/kernel/debug/debug_core.c
File Facts
- System
- Linux kernel
- Corpus path
kernel/debug/debug_core.c- Extension
.c- Size
- 29718 bytes
- Lines
- 1232
- Domain
- Core OS
- Bucket
- Scheduler, Processes, Timers, Sync, And Syscalls
- Inferred role
- Core OS: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/pid_namespace.hlinux/clocksource.hlinux/serial_core.hlinux/interrupt.hlinux/spinlock.hlinux/console.hlinux/threads.hlinux/uaccess.hlinux/kernel.hlinux/module.hlinux/ptrace.hlinux/string.hlinux/delay.hlinux/sched.hlinux/sysrq.hlinux/reboot.hlinux/init.hlinux/kgdb.hlinux/kdb.hlinux/nmi.hlinux/pid.hlinux/smp.hlinux/mm.hlinux/rcupdate.hlinux/irq.hlinux/security.hasm/cacheflush.hasm/byteorder.hlinux/atomic.hdebug_core.h
Detected Declarations
function opt_nokgdbroundupfunction kgdb_arch_set_breakpointfunction kgdb_arch_remove_breakpointfunction kgdb_validate_break_addressfunction kgdb_arch_pcfunction kgdb_arch_initfunction kgdb_skipexceptionfunction Defaultfunction kgdb_roundup_cpusfunction for_each_online_cpufunction kgdb_flush_swbreak_addrfunction dbg_activate_sw_breakpointsfunction dbg_set_sw_breakfunction dbg_deactivate_sw_breakpointsfunction dbg_remove_sw_breakfunction kgdb_isremovedbreakfunction kgdb_has_hit_breakfunction dbg_remove_all_breakfunction kgdb_free_init_memfunction kdb_dump_stack_on_cpufunction kgdb_io_readyfunction kgdb_reenter_checkfunction dbg_touch_watchdogsfunction kgdb_cpu_enterfunction kgdb_handle_exceptionfunction module_eventfunction kgdb_nmicallbackfunction kgdb_nmicallinfunction kgdb_console_writefunction opt_kgdb_confunction sysrq_handle_dbgfunction kgdb_panicfunction kgdb_initial_breakpointfunction kgdb_arch_latefunction dbg_notify_rebootfunction kgdb_register_callbacksfunction kgdb_unregister_callbacksfunction kgdb_register_io_modulefunction kgdb_unregister_io_modulefunction dbg_io_get_charfunction kgdb_breakpointfunction opt_kgdb_waitexport kgdb_connectedexport kgdb_activeexport kgdb_register_io_moduleexport kgdb_unregister_io_moduleexport kgdb_breakpoint
Annotated Snippet
if (error) {
ret = error;
pr_info("BP install failed: %lx\n",
kgdb_break[i].bpt_addr);
continue;
}
kgdb_flush_swbreak_addr(kgdb_break[i].bpt_addr);
kgdb_break[i].state = BP_ACTIVE;
}
return ret;
}
NOKPROBE_SYMBOL(dbg_activate_sw_breakpoints);
int dbg_set_sw_break(unsigned long addr)
{
int err = kgdb_validate_break_address(addr);
int breakno = -1;
int i;
if (err)
return err;
for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
if ((kgdb_break[i].state == BP_SET) &&
(kgdb_break[i].bpt_addr == addr))
return -EEXIST;
}
for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
if (kgdb_break[i].state == BP_REMOVED &&
kgdb_break[i].bpt_addr == addr) {
breakno = i;
break;
}
}
if (breakno == -1) {
for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
if (kgdb_break[i].state == BP_UNDEFINED) {
breakno = i;
break;
}
}
}
if (breakno == -1)
return -E2BIG;
kgdb_break[breakno].state = BP_SET;
kgdb_break[breakno].type = BP_BREAKPOINT;
kgdb_break[breakno].bpt_addr = addr;
return 0;
}
int dbg_deactivate_sw_breakpoints(void)
{
int error;
int ret = 0;
int i;
for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
if (kgdb_break[i].state != BP_ACTIVE)
continue;
error = kgdb_arch_remove_breakpoint(&kgdb_break[i]);
if (error) {
pr_info("BP remove failed: %lx\n",
kgdb_break[i].bpt_addr);
ret = error;
}
kgdb_flush_swbreak_addr(kgdb_break[i].bpt_addr);
kgdb_break[i].state = BP_SET;
}
return ret;
}
NOKPROBE_SYMBOL(dbg_deactivate_sw_breakpoints);
int dbg_remove_sw_break(unsigned long addr)
{
int i;
for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) {
if ((kgdb_break[i].state == BP_SET) &&
(kgdb_break[i].bpt_addr == addr)) {
kgdb_break[i].state = BP_REMOVED;
return 0;
}
}
return -ENOENT;
Annotation
- Immediate include surface: `linux/pid_namespace.h`, `linux/clocksource.h`, `linux/serial_core.h`, `linux/interrupt.h`, `linux/spinlock.h`, `linux/console.h`, `linux/threads.h`, `linux/uaccess.h`.
- Detected declarations: `function opt_nokgdbroundup`, `function kgdb_arch_set_breakpoint`, `function kgdb_arch_remove_breakpoint`, `function kgdb_validate_break_address`, `function kgdb_arch_pc`, `function kgdb_arch_init`, `function kgdb_skipexception`, `function Default`, `function kgdb_roundup_cpus`, `function for_each_online_cpu`.
- Atlas domain: Core OS / Scheduler, Processes, Timers, Sync, And Syscalls.
- Implementation status: integration implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.