diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-09-14 23:34:58 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-09-14 23:34:58 +0300 |
| commit | 30055ec1753b5f8cfc2940dba5d4188475fdbf7f (patch) | |
| tree | 5497eb92f0f7083755589ca5a31755166a739522 /common/uapi/dispatch.c | |
| parent | cabbf335824db0df835e4c541c19d3803ce38454 (diff) | |
| download | kmi-30055ec1753b5f8cfc2940dba5d4188475fdbf7f.tar.gz kmi-30055ec1753b5f8cfc2940dba5d4188475fdbf7f.zip | |
add putch syscall for easier userspace debugging
+ Note that it is NOT intended for end user usage, just for debugging.
Diffstat (limited to 'common/uapi/dispatch.c')
| -rw-r--r-- | common/uapi/dispatch.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/common/uapi/dispatch.c b/common/uapi/dispatch.c index 73e037a..b16b255 100644 --- a/common/uapi/dispatch.c +++ b/common/uapi/dispatch.c @@ -14,6 +14,10 @@ static const sys_t syscall_table[] = { /* noop */ [SYS_NOOP] = sys_noop, + + /* debugging */ + [SYS_PUTCH] = sys_putch, + /* mem */ [SYS_REQ_MEM] = sys_req_mem, [SYS_REQ_PMEM] = sys_req_pmem, @@ -55,6 +59,18 @@ SYSCALL_DEFINE0(noop)(){ return (struct sys_ret){ OK, 0 }; } +/** + * Putch syscall handler. + * + * @param a Character to put. + * @return \ref OK and 0. + */ +SYSCALL_DEFINE1(putch)(sys_arg_t a){ + const char c[2] = {a, 0}; + dbg((const char *)&c); + return (struct sys_ret){ OK, 0 }; +} + struct sys_ret syscall_dispatch(sys_arg_t syscall, sys_arg_t a, sys_arg_t b, sys_arg_t c, sys_arg_t d) { @@ -67,9 +83,13 @@ struct sys_ret syscall_dispatch(sys_arg_t syscall, sys_arg_t a, sys_arg_t b, return (struct sys_ret){ ERR_INVAL, 0 }; } - /* the syscall must be a valid number, as they're numbered in a linear - * fashion */ - struct sys_ret r = syscall_table[syscall](a, b, c, d); + sys_t call = syscall_table[sc]; + if (!call) { + error("Syscall %zu not legitimate value\n", sc); + return (struct sys_ret){ ERR_INVAL, 0 }; + } + + struct sys_ret r = call(a, b, c, d); if (check_canary(t)) { bug("Syscall %zu overwrote stack canary\n", syscall); |
