summaryrefslogtreecommitdiff
path: root/kernel/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/log.c')
-rw-r--r--kernel/log.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/kernel/log.c b/kernel/log.c
new file mode 100644
index 0000000..56d38e8
--- /dev/null
+++ b/kernel/log.c
@@ -0,0 +1,40 @@
+#include "log.h"
+#include <sched/scheduler.h>
+
+struct stackframe {
+ struct stackframe *ebp;
+ uint32_t eip;
+};
+
+void dump_backtrace(uint32_t max_frames) {
+ struct stackframe *stk;
+ asm("mov %%ebp,%0" : "=r"(stk)::);
+ kprintf("Stack trace:\n");
+ for (uint32_t frame = 0; stk && frame < max_frames; ++frame) {
+ kprintf(" 0x%x\n", stk->eip);
+ stk = stk->ebp;
+ }
+ if (get_current_task()) {
+ kprintf(" PID: %x\n", get_current_task()->pid);
+ }
+}
+
+void klog(char *str, int code) {
+ switch (code) {
+ case LOG_NOTE:
+ kprintf("[NOTE] ");
+ break;
+ case LOG_WARN:
+ kprintf("[WARN] ");
+ break;
+ case LOG_ERROR:
+ kprintf("[ERROR] ");
+ break;
+ default:
+ case LOG_SUCCESS:
+ kprintf("[SUCCESS] ");
+ break;
+ }
+
+ puts(str);
+}