summaryrefslogtreecommitdiff
path: root/src/kernel/arch/amd64/debug.c
blob: c17c90646cbc12f6e85d35714668ff4143266d9e (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 **rbp;
	asm("mov %%rbp, %0"
	    : "=r" (rbp));
	while (depth--) {
		if (!rbp) return NULL;
		rbp = *rbp;
	}
	return rbp[1];
}

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