aboutsummaryrefslogtreecommitdiff
path: root/kernel/printk.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/printk.c')
-rw-r--r--kernel/printk.c44
1 files changed, 39 insertions, 5 deletions
diff --git a/kernel/printk.c b/kernel/printk.c
index b3c925a..bd2bcab 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -1,4 +1,5 @@
#include <fbos/printk.h>
+#include <fbos/sched.h>
#include <fbos/string.h>
#include <fbos/sbi.h>
@@ -12,8 +13,40 @@ void __noreturn __kernel die(const char *const message)
;
}
+__kernel void write(const char *const message, size_t n)
+{
+ struct sbi_ret ret = sbi_ecall2(DBCN_EXT, DBCN_WRITE, n, (unsigned long)message);
+ if (ret.error != SBI_SUCCESS) {
+ die(nullptr);
+ }
+}
+
+#ifdef __DEBUG__
+__kernel void print_task_prefix(void)
+{
+ register struct task_struct *current asm("tp");
+
+ if (!current) {
+ return;
+ }
+
+ size_t len = strlen(current->name);
+ if (!len) {
+ return;
+ }
+
+ write("[=> ", 4);
+ write(current->name, len);
+ write("] ", 2);
+}
+#endif
+
__kernel void printk(const char *const message)
{
+#ifdef __DEBUG__
+ print_task_prefix();
+#endif
+
size_t len = strlen(message);
if (!len) {
return;
@@ -22,10 +55,11 @@ __kernel void printk(const char *const message)
write(message, len);
}
-__kernel void write(const char *const message, size_t n)
+__kernel void sys_write(const char *const message, size_t n)
{
- struct sbi_ret ret = sbi_ecall2(DBCN_EXT, DBCN_WRITE, n, (unsigned long)message);
- if (ret.error != SBI_SUCCESS) {
- die(nullptr);
- }
+#ifdef __DEBUG__
+ print_task_prefix();
+#endif
+
+ write(message, n);
}