summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Lee <me@nwlee.tech>2026-08-30 20:23:28 -0500
committerNathan Lee <me@nwlee.tech>2026-08-30 20:23:28 -0500
commitdd825ef769c107d86b80ede076e90cca3cf303b2 (patch)
tree274a56fa6b980c79ace60b06f48f186c7b0b9e55
parentb62815bfb6b05e90eef04d2021305b6f5b335f53 (diff)
add support for printk printers in the formatter
- todo: add support for size_t (currently, you can just cast to uintptr_t)
-rw-r--r--kernel/common/log.c28
-rw-r--r--kernel/riscv/kernel.c3
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;
}