#include #include #include #include #include #include errno_t syscall_log(struct arch_context* ctx) { __user const char* msg = (__user const char*)ctx->ARCH_CTX_A0; size_t len = ctx->ARCH_CTX_A1; char* buf = mem_alloc(len, ALLOC_NOZERO); if (!buf) { return ENOMEM; } if (usercopy_read(buf, msg, len)) { console_write(buf, len); mem_free(buf); return 0; } mem_free(buf); return ZN_ERR_BAD_BUFFER; } errno_t syscall_page_size(struct arch_context* ctx) { __user size_t* out = (__user size_t*)ctx->ARCH_CTX_A0; size_t size = arch_mem_page_size(); if (!usercopy_write(out, &size, sizeof(size))) return ZN_ERR_BAD_BUFFER; return 0; } errno_t syscall_time(struct arch_context* ctx) { __user uint64_t* out = (__user uint64_t*)ctx->ARCH_CTX_A0; uint64_t time = clock_get_elapsed_ns(); if (!usercopy_write(out, &time, sizeof(time))) return ZN_ERR_BAD_BUFFER; return 0; }