diff options
| author | Nathan Lee <me@nwlee.tech> | 2026-08-30 20:23:28 -0500 |
|---|---|---|
| committer | Nathan Lee <me@nwlee.tech> | 2026-08-30 20:23:28 -0500 |
| commit | dd825ef769c107d86b80ede076e90cca3cf303b2 (patch) | |
| tree | 274a56fa6b980c79ace60b06f48f186c7b0b9e55 /kernel | |
| parent | b62815bfb6b05e90eef04d2021305b6f5b335f53 (diff) | |
add support for printk printers in the formatter
- todo: add support for size_t (currently, you can just cast to
uintptr_t)
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/common/log.c | 28 | ||||
| -rw-r--r-- | kernel/riscv/kernel.c | 3 |
2 files changed, 31 insertions, 0 deletions
diff --git a/kernel/common/log.c b/kernel/common/log.c index d75daeb..f65c165 100644 --- a/kernel/common/log.c +++ b/kernel/common/log.c @@ -1,3 +1,4 @@ +#include <sys/stddef.h> #include <sys/log.h> __attribute__((section(".ringbuf"), aligned(64))) @@ -35,6 +36,29 @@ void put_uint(unsigned int value, unsigned int radix) { put_char(tmp[i]); } + +void put_ptr(uintptr_t value) { + char tmp[16]; + const char digits[] = "0123456789abcdef"; + int i = 0; + + if (value == 0) { + put_char('0'); + return; + } + + while (value) { + tmp[i++] = digits[value % 16]; + value /= 16; + } + + put_char('0'); + put_char('x'); + + while (i--) + put_char(tmp[i]); +} + void put_int(int value) { if (value < 0) { put_char('-'); @@ -79,6 +103,10 @@ void vprintk(const char *fmt, __builtin_va_list args) { put_uint(__builtin_va_arg(args, unsigned int), 16); break; + case 'p': + put_ptr(__builtin_va_arg(args, uintptr_t)); + break; + default: put_char('%'); put_char(*fmt); diff --git a/kernel/riscv/kernel.c b/kernel/riscv/kernel.c index 665d7f4..46de696 100644 --- a/kernel/riscv/kernel.c +++ b/kernel/riscv/kernel.c @@ -49,6 +49,8 @@ struct kernel_info *discover_arch(void *fdt) { kernel_info->mem_start = (void *)base; kernel_info->mem_size = size; + printk("[I] DTB provided memory block addr %p size %p\n", base, (uintptr_t)size); + uint8_t *initrd_reg = dt_get_prop(head, "initrd", &len); if (!initrd_reg || len < sizeof(uintptr_t) + sizeof(size_t)) { @@ -62,6 +64,7 @@ struct kernel_info *discover_arch(void *fdt) { kernel_info->initrd_start = (void *)base; kernel_info->initrd_size = size; + printk("[I] DTB provided init ramdisk addr %p size %p\n", base, (uintptr_t)size); return kernel_info; } |
