summaryrefslogtreecommitdiff
path: root/src/kernel/arch/i386/debug.c
blob: b1920db03db231eef0714aa113c54e9e6858795c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <kernel/arch/generic.h>

void *debug_caller(size_t depth) {
	void **ebp;
	asm("mov %%ebp, %0" 
	    : "=r" (ebp));
	while (depth--) {
		if (!ebp) return NULL;
		ebp = *ebp;
	}
	return ebp[1];
}

void debug_stacktrace(void) {
	for (size_t i = 0; i < 16; i++) {
		kprintf("  k/%08x\n", (uintptr_t)debug_caller(i));
	}
}