diff options
| author | Miquel Sabaté Solà <mikisabate@gmail.com> | 2024-12-02 20:47:19 +0100 |
|---|---|---|
| committer | Miquel Sabaté Solà <mikisabate@gmail.com> | 2024-12-02 20:47:19 +0100 |
| commit | 32e880127366fabc3e8b4fecb642f1cc06b8fd71 (patch) | |
| tree | df11bd7d7895ac0dde245383b4a10a51f83fc659 /kernel/printk.c | |
| parent | a7287a7891d9ead98221c3de79d46d487e0d68ac (diff) | |
| download | fbos-32e880127366.tar.gz fbos-32e880127366.zip | |
Prepend the name of the task on debug
On 'printk' and 'sys_write' calls, prepend the name of the task that is
being executed for each message. This is an easy way to show off that we
are doing the right thing with the 'tp' register, even if we don't do
much with it.
Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'kernel/printk.c')
| -rw-r--r-- | kernel/printk.c | 44 |
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); } |
