From 4f2b650534c5ec6bb16c8d4162cf42eb8374cb48 Mon Sep 17 00:00:00 2001 From: Andrew Hyatt Date: Thu, 13 Apr 2017 19:09:10 -0700 Subject: [PATCH] Implement the getpriority(2) syscall --- src/kernel/emulation/linux/CMakeLists.txt | 1 + .../emulation/linux/process/getpriority.c | 7 +++++ .../emulation/linux/process/getpriority.h | 29 +++++++++++++++++++ src/kernel/emulation/linux/syscalls.c | 2 ++ 4 files changed, 39 insertions(+) create mode 100644 src/kernel/emulation/linux/process/getpriority.c create mode 100644 src/kernel/emulation/linux/process/getpriority.h diff --git a/src/kernel/emulation/linux/CMakeLists.txt b/src/kernel/emulation/linux/CMakeLists.txt index 518ef1aae..91fb0057d 100644 --- a/src/kernel/emulation/linux/CMakeLists.txt +++ b/src/kernel/emulation/linux/CMakeLists.txt @@ -112,6 +112,7 @@ set(emulation_sources process/waitid.c process/execve.c process/posix_spawn.c + process/getpriority.c signal/duct_signals.c signal/kill.c signal/sigaltstack.c diff --git a/src/kernel/emulation/linux/process/getpriority.c b/src/kernel/emulation/linux/process/getpriority.c new file mode 100644 index 000000000..4bf7fec70 --- /dev/null +++ b/src/kernel/emulation/linux/process/getpriority.c @@ -0,0 +1,7 @@ +#include "getpriority.h" + +int sys_getpriority(int which, id_t who) { + return LINUX_SYSCALL(__NR_getpriority, which, who); + + // TODO: Errors +} diff --git a/src/kernel/emulation/linux/process/getpriority.h b/src/kernel/emulation/linux/process/getpriority.h new file mode 100644 index 000000000..db5862344 --- /dev/null +++ b/src/kernel/emulation/linux/process/getpriority.h @@ -0,0 +1,29 @@ +#ifndef LINUX_GETPRIORITY_H +#define LINUX_GETPRIORITY_H + +#include +#include +#include "../errno.h" +#include "../base.h" +#include + +int sys_getpriority(int which, id_t who); + +// Same on BSD and Linux +#define PRIO_PROCESS 0 +#define PRIO_PGRP 1 +#define PRIO_USER 2 + +// Unique to Darwin +#define PRIO_DARWIN_THREAD 3 +#define PRIO_DARWIN_PROCESS 4 + +// Same on BSD and Linux +#define PRIO_MIN -20 +#define PRIO_MAX 20 + +// Unique to Darwin +#define PRIO_DARWIN_BG 0x1000 +#define PRIO_DARWIN_NONUI 0x1001 + +#endif diff --git a/src/kernel/emulation/linux/syscalls.c b/src/kernel/emulation/linux/syscalls.c index 9998091a1..ea8d5f3b2 100644 --- a/src/kernel/emulation/linux/syscalls.c +++ b/src/kernel/emulation/linux/syscalls.c @@ -86,6 +86,7 @@ #include "process/wait4.h" #include "process/waitid.h" #include "process/execve.h" +#include "process/getpriority.h" #include "misc/getentropy.h" #include "misc/getlogin.h" #include "misc/shared_region_check_np.h" @@ -238,6 +239,7 @@ void* __bsd_syscall_table[600] = { [95] = sys_fsync, [97] = sys_socket, [98] = sys_connect, + [100] = sys_getpriority, [104] = sys_bind, [105] = sys_setsockopt, [106] = sys_listen, -- 2.51.2