diff options
author | dzwdz | 2022-07-01 20:36:59 +0200 |
---|---|---|
committer | dzwdz | 2022-07-01 20:36:59 +0200 |
commit | 58c44c9a8feb8c258dcd85209149c16342995ec7 (patch) | |
tree | f3a3d61291beada2c3f9e7c773d42c202054263c /src/init | |
parent | 5b9f1ea3911a6e972263d00ea2ec04a56f56166d (diff) |
kernel: add the debug_klog syscall for tracking down process ids
Diffstat (limited to 'src/init')
-rw-r--r-- | src/init/fs/misc.h | 5 | ||||
-rw-r--r-- | src/init/stdlib.c | 14 | ||||
-rw-r--r-- | src/init/stdlib.h | 2 | ||||
-rw-r--r-- | src/init/syscalls.c | 4 |
4 files changed, 23 insertions, 2 deletions
diff --git a/src/init/fs/misc.h b/src/init/fs/misc.h index e360a25..879be32 100644 --- a/src/init/fs/misc.h +++ b/src/init/fs/misc.h @@ -1,4 +1,5 @@ #pragma once +#include <init/stdlib.h> #include <stdbool.h> bool fork2_n_mount(const char *path); @@ -10,5 +11,5 @@ void fs_dir_inject(const char *path); /** Mounts something and injects its path into the fs */ // TODO path needs to have a trailing slash #define MOUNT(path, impl) \ - if (!fork2_n_mount(path)) {impl;} \ - if (!fork2_n_mount("/")) fs_dir_inject(path); + if (!fork2_n_mount(path)) {_klogf("impl %s", path); impl;} \ + if (!fork2_n_mount("/")) {_klogf("dir for %s", path); fs_dir_inject(path);} diff --git a/src/init/stdlib.c b/src/init/stdlib.c index cbaed61..d9d882d 100644 --- a/src/init/stdlib.c +++ b/src/init/stdlib.c @@ -37,6 +37,20 @@ int snprintf(char *str, size_t len, const char *fmt, ...) { return ret; } +int _klogf(const char *fmt, ...) { + // idiotic. however, this hack won't matter anyways + char buf[256]; + int ret = 0; + char *ptrs[2] = {buf, buf + sizeof buf}; + va_list argp; + va_start(argp, fmt); + ret = __printf_internal(fmt, argp, backend_buf, &ptrs); + va_end(argp); + if (ptrs[0] < ptrs[1]) *ptrs[0] = '\0'; + _syscall_debug_klog(buf, ret); + return ret; +} + int file_open(libc_file *f, const char *path, int flags) { f->pos = 0; diff --git a/src/init/stdlib.h b/src/init/stdlib.h index 03e1717..a48391c 100644 --- a/src/init/stdlib.h +++ b/src/init/stdlib.h @@ -7,6 +7,8 @@ int printf(const char *fmt, ...); int snprintf(char *str, size_t len, const char *fmt, ...); +int _klogf(const char *fmt, ...); // for kernel debugging only + typedef struct { int fd; int pos; diff --git a/src/init/syscalls.c b/src/init/syscalls.c index 5b8950b..6e4c2dc 100644 --- a/src/init/syscalls.c +++ b/src/init/syscalls.c @@ -50,3 +50,7 @@ void __user *_syscall_memflag(void __user *addr, size_t len, int flags) { return (void __user *)_syscall(_SYSCALL_MEMFLAG, (int)addr, (int)len, flags, 0); } +void _syscall_debug_klog(const void __user *buf, size_t len) { + return (void)_syscall(_SYSCALL_DEBUG_KLOG, (int)buf, (int)len, 0, 0); +} + |