From a146a1963622cb36b962a9a39dc4fb5e78d1b0c0 Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Wed, 25 Jan 2023 16:12:08 +0100 Subject: [PATCH] Kernel: Make Syscalls/ptrace.cpp buildable for aarch64 --- Kernel/Arch/aarch64/Dummy.cpp | 5 ----- Kernel/CMakeLists.txt | 2 +- Kernel/Syscalls/ptrace.cpp | 17 ++++++++++++++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Kernel/Arch/aarch64/Dummy.cpp b/Kernel/Arch/aarch64/Dummy.cpp index 51324592f6..d032e21d71 100644 --- a/Kernel/Arch/aarch64/Dummy.cpp +++ b/Kernel/Arch/aarch64/Dummy.cpp @@ -16,11 +16,6 @@ namespace Kernel { ProcessID g_init_pid { 0 }; -bool Process::has_tracee_thread(ProcessID) -{ - TODO_AARCH64(); -} - ErrorOr Process::exec(NonnullOwnPtr, NonnullOwnPtrVector, NonnullOwnPtrVector, Thread*&, u32&, int) { TODO_AARCH64(); diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 6f0109f5ed..b750ed7e2b 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -301,6 +301,7 @@ set(KERNEL_SOURCES Syscalls/prctl.cpp Syscalls/process.cpp Syscalls/profiling.cpp + Syscalls/ptrace.cpp Syscalls/purge.cpp Syscalls/read.cpp Syscalls/readlink.cpp @@ -401,7 +402,6 @@ if ("${SERENITY_ARCH}" STREQUAL "x86_64") Syscalls/execve.cpp Syscalls/fork.cpp Syscalls/mmap.cpp - Syscalls/ptrace.cpp Syscalls/sigaction.cpp ) diff --git a/Kernel/Syscalls/ptrace.cpp b/Kernel/Syscalls/ptrace.cpp index 68842ac9d0..3d513a7e4f 100644 --- a/Kernel/Syscalls/ptrace.cpp +++ b/Kernel/Syscalls/ptrace.cpp @@ -107,7 +107,7 @@ static ErrorOr handle_ptrace(Kernel::Syscall::SC_ptrace_params const& p auto& peer_saved_registers = peer->get_register_dump_from_stack(); // Verify that the saved registers are in usermode context - if ((peer_saved_registers.cs & 0x03) != 3) + if (peer_saved_registers.previous_mode() == ExecutionMode::User) return EFAULT; tracer->set_regs(regs); @@ -229,6 +229,7 @@ ErrorOr Process::poke_user_data(Userspace address, FlatPtr data) ErrorOr Thread::peek_debug_register(u32 register_index) { +#if ARCH(X86_64) FlatPtr data; switch (register_index) { case 0: @@ -253,10 +254,17 @@ ErrorOr Thread::peek_debug_register(u32 register_index) return EINVAL; } return data; +#elif ARCH(AARCH64) + (void)register_index; + TODO_AARCH64(); +#else +# error "Unknown architecture" +#endif } ErrorOr Thread::poke_debug_register(u32 register_index, FlatPtr data) { +#if ARCH(X86_64) switch (register_index) { case 0: m_debug_register_state.dr0 = data; @@ -277,6 +285,13 @@ ErrorOr Thread::poke_debug_register(u32 register_index, FlatPtr data) return EINVAL; } return {}; +#elif ARCH(AARCH64) + (void)register_index; + (void)data; + TODO_AARCH64(); +#else +# error "Unknown architecture" +#endif } }