[COMMIT osv master] syscall: expose getrlimit and implement rt_sigtimedwait

3 views
Skip to first unread message

Commit Bot

unread,
Dec 18, 2023, 9:29:28 AM12/18/23
to osv...@googlegroups.com, Waldemar Kozaczuk
From: Waldemar Kozaczuk <jwkoz...@gmail.com>
Committer: Waldemar Kozaczuk <jwkoz...@gmail.com>
Branch: master

syscall: expose getrlimit and implement rt_sigtimedwait

This patch exposes getrlimit and adds limited implementation
of rt_sigtimedwait system call. The latter only supports calls without
the timeout parameter.

Signed-off-by: Waldemar Kozaczuk <jwkoz...@gmail.com>

---
diff --git a/linux.cc b/linux.cc
--- a/linux.cc
+++ b/linux.cc
@@ -373,8 +373,17 @@ int rt_sigprocmask(int how, sigset_t * nset, sigset_t * oset, size_t sigsetsize)
return sigprocmask(how, nset, oset);
}

-#define __NR_sys_exit __NR_exit
+int rt_sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout, size_t sigsetsize)
+{
+ if (!timeout || (!timeout->tv_sec && !timeout->tv_nsec)) {
+ return sigwaitinfo(set, info);
+ } else {
+ errno = ENOSYS;
+ return -1;
+ }
+}

+#define __NR_sys_exit __NR_exit
static int sys_exit(int ret)
{
sched::thread::current()->exit();
@@ -720,6 +729,8 @@ TRACEPOINT(trace_syscall_shmctl, "%d <= %d %d %p", int, int, int, struct shmid_d
TRACEPOINT(trace_syscall_shmdt, "%d <= 0x%x", int, const void *)
TRACEPOINT(trace_syscall_shmget, "%d <= %d %lu %d", int, key_t, size_t, int);
TRACEPOINT(trace_syscall_rename, "%d <= %s %s", int, const char *, const char *);
+TRACEPOINT(trace_syscall_rt_sigtimedwait, "%d <= %p %p %p %lu", int, const sigset_t *, siginfo_t *, const struct timespec *, size_t);
+TRACEPOINT(trace_syscall_getrlimit, "%d <= %d %p", int, int, struct rlimit *);

OSV_LIBC_API long syscall(long number, ...)
{
@@ -873,6 +884,8 @@ OSV_LIBC_API long syscall(long number, ...)
SYSCALL1(shmdt, const void *);
SYSCALL3(shmget, key_t, size_t, int);
SYSCALL2(rename, const char *, const char *);
+ SYSCALL4(rt_sigtimedwait, const sigset_t *, siginfo_t *, const struct timespec *, size_t);
+ SYSCALL2(getrlimit, int, struct rlimit *);
}

debug_always("syscall(): unimplemented system call %d\n", number);
Reply all
Reply to author
Forward
0 new messages