aboutsummaryrefslogtreecommitdiff
path: root/kernel/printk.c
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mikisabate@gmail.com>2024-11-22 23:00:46 +0100
committerMiquel Sabaté Solà <mikisabate@gmail.com>2024-11-22 23:00:46 +0100
commit7f6b234625a53d2ceb9ec80dc0172aac1cedb358 (patch)
tree4fe10fcbe2d5e90a0e673259dc895f48a76e06cd /kernel/printk.c
parent224ed7b13ceadd05d27e61d3a0fdd34beb0c7745 (diff)
downloadfbos-7f6b234625a53d2ceb9ec80dc0172aac1cedb358.tar.gz
fbos-7f6b234625a53d2ceb9ec80dc0172aac1cedb358.zip
Enable exception handling from user mode
This allows us to actually catch system calls and start to run user space programs. That being said, the whole thing is still pretty brittle, and the scheduler is not quite there yet. Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'kernel/printk.c')
-rw-r--r--kernel/printk.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/kernel/printk.c b/kernel/printk.c
index 51c1a7a..b3c925a 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -12,14 +12,19 @@ void __noreturn __kernel die(const char *const message)
;
}
-void __kernel printk(const char *const message)
+__kernel void printk(const char *const message)
{
size_t len = strlen(message);
if (!len) {
return;
}
- struct sbi_ret ret = sbi_ecall2(DBCN_EXT, DBCN_WRITE, len, (unsigned long)message);
+ write(message, len);
+}
+
+__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);
}