Kernel+LibC: Introduce new archctl syscall

This syscall will be used for architecture-specific operations.
This commit is contained in:
Sönke Holz 2024-04-12 13:24:23 +02:00 committed by Andrew Kaster
parent 5e1d678bae
commit 57f4f8caf8
10 changed files with 117 additions and 0 deletions

View file

@ -50,6 +50,7 @@ enum class NeedsBigProcessLock {
S(adjtime, NeedsBigProcessLock::No) \
S(alarm, NeedsBigProcessLock::No) \
S(allocate_tls, NeedsBigProcessLock::No) \
S(archctl, NeedsBigProcessLock::No) \
S(anon_create, NeedsBigProcessLock::No) \
S(annotate_mapping, NeedsBigProcessLock::No) \
S(bind, NeedsBigProcessLock::No) \

View file

@ -0,0 +1,7 @@
/*
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once

View file

@ -0,0 +1,20 @@
/*
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <Kernel/Tasks/Process.h>
namespace Kernel {
ErrorOr<FlatPtr> Process::sys$archctl(int option, FlatPtr arg1)
{
(void)option;
(void)arg1;
VERIFY_NO_PROCESS_BIG_LOCK(this);
return ENOSYS;
}
}

View file

@ -0,0 +1,20 @@
/*
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <Kernel/Tasks/Process.h>
namespace Kernel {
ErrorOr<FlatPtr> Process::sys$archctl(int option, FlatPtr arg1)
{
(void)option;
(void)arg1;
VERIFY_NO_PROCESS_BIG_LOCK(this);
return ENOSYS;
}
}

View file

@ -0,0 +1,20 @@
/*
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <Kernel/Tasks/Process.h>
namespace Kernel {
ErrorOr<FlatPtr> Process::sys$archctl(int option, FlatPtr arg1)
{
(void)option;
(void)arg1;
VERIFY_NO_PROCESS_BIG_LOCK(this);
return ENOSYS;
}
}

View file

@ -386,6 +386,8 @@ if ("${SERENITY_ARCH}" STREQUAL "x86_64")
set(KERNEL_SOURCES
${KERNEL_SOURCES}
Arch/x86_64/archctl.cpp
Arch/x86_64/CMOS.cpp
Arch/x86_64/DebugOutput.cpp
Arch/x86_64/Delay.cpp
@ -485,6 +487,7 @@ elseif("${SERENITY_ARCH}" STREQUAL "aarch64")
Arch/aarch64/Firmware/ACPI/StaticParsing.cpp
Arch/aarch64/archctl.cpp
Arch/aarch64/boot.S
Arch/aarch64/BootPPMParser.cpp
Arch/aarch64/CPUID.cpp
@ -528,6 +531,7 @@ elseif("${SERENITY_ARCH}" STREQUAL "riscv64")
Arch/riscv64/Firmware/ACPI/StaticParsing.cpp
Arch/riscv64/archctl.cpp
Arch/riscv64/boot.S
Arch/riscv64/CPU.cpp
Arch/riscv64/CurrentTime.cpp

View file

@ -482,6 +482,7 @@ public:
ErrorOr<FlatPtr> sys$get_root_session_id(pid_t force_sid);
ErrorOr<FlatPtr> sys$remount(Userspace<Syscall::SC_remount_params const*> user_params);
ErrorOr<FlatPtr> sys$bindmount(Userspace<Syscall::SC_bindmount_params const*> user_params);
ErrorOr<FlatPtr> sys$archctl(int option, FlatPtr arg1);
enum SockOrPeerName {
SockName,

View file

@ -52,6 +52,7 @@ set(LIBC_SOURCES
string.cpp
strings.cpp
stubs.cpp
sys/archctl.cpp
sys/auxv.cpp
sys/file.cpp
sys/mman.cpp

View file

@ -0,0 +1,26 @@
/*
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <errno.h>
#include <stdarg.h>
#include <sys/archctl.h>
#include <syscall.h>
extern "C" {
int archctl(int option, ...)
{
va_list args;
va_start(args, option);
uintptr_t arg1 = va_arg(args, uintptr_t);
va_end(args);
int rc = syscall(SC_archctl, option, arg1);
__RETURN_WITH_ERRNO(rc, rc, -1);
}
}

View file

@ -0,0 +1,17 @@
/*
* Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <Kernel/API/archctl_numbers.h>
#include <sys/cdefs.h>
#include <sys/types.h>
__BEGIN_DECLS
int archctl(int option, ...);
__END_DECLS