From 858a52c06a4615bd58a6a906333f2ad707d41c0a Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Tue, 19 Aug 2025 15:04:04 -0400 Subject: usermode pager --- lib/libjove/syscall/invoke-objdir.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'lib/libjove/syscall') diff --git a/lib/libjove/syscall/invoke-objdir.c b/lib/libjove/syscall/invoke-objdir.c index 462c282..6ee39e4 100644 --- a/lib/libjove/syscall/invoke-objdir.c +++ b/lib/libjove/syscall/invoke-objdir.c @@ -22,18 +22,39 @@ _syscall_invoke_objdir_getmemb(KernelObjectDirectory *dir, uint8_t member, obj_t } int -_syscall_invoke_objdir_nmemb(KernelObjectDirectory *dir, uint8_t *result) +_syscall_invoke_objdir_lastmemb(KernelObjectDirectory *dir, uint8_t *result) { uint8_t *syscallData = _syscall_message_ptr; int syscall_at = 0; uint8_t *syscall_result; SYSCALL_PAYLOAD_PUTOBJ(syscallData, syscall_at, dir); - SYSCALL_PAYLOAD_PUTL(syscallData, syscall_at, INVOKE_OBJDIR_NMEMB, uint8_t); + SYSCALL_PAYLOAD_PUTL(syscallData, syscall_at, INVOKE_OBJDIR_LASTMEMB, uint8_t); SYSCALL_PAYLOAD_SAVEPTR(syscallData, syscall_at, uint8_t, syscall_result); int status = _syscall_invoke(); *result = *syscall_result; - return status; } + +int +_syscall_invoke_objdir_move( + KernelObjectDirectory *dir, + uint8_t memb, + KernelObjectDirectory *dest_dir, + uint8_t dest_memb) +{ + uint8_t *syscallData = _syscall_message_ptr; + int syscall_at = 0; + + SYSCALL_PAYLOAD_PUTOBJ(syscallData, syscall_at, dir); + SYSCALL_PAYLOAD_PUTL(syscallData, syscall_at, INVOKE_OBJDIR_MOVE, uint8_t); + SYSCALL_PAYLOAD_PUTL(syscallData, syscall_at, memb, uint8_t); + + size_t *dest_pathw = (size_t*)(syscallData + syscall_at); + SYSCALL_PAYLOAD_PUTOBJ(syscallData, syscall_at, dest_dir); + (*dest_pathw)++; + SYSCALL_PAYLOAD_PUTL(syscallData, syscall_at, dest_memb, uint8_t); + + return _syscall_invoke(); +} -- cgit v1.2.1