diff --git a/Kernel/Arch/aarch64/Dummy.cpp b/Kernel/Arch/aarch64/Dummy.cpp index d032e21d71..4b5883e487 100644 --- a/Kernel/Arch/aarch64/Dummy.cpp +++ b/Kernel/Arch/aarch64/Dummy.cpp @@ -16,11 +16,6 @@ namespace Kernel { ProcessID g_init_pid { 0 }; -ErrorOr Process::exec(NonnullOwnPtr, NonnullOwnPtrVector, NonnullOwnPtrVector, Thread*&, u32&, int) -{ - TODO_AARCH64(); -} - } // Delay.cpp diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 7b69dc29a8..bc448149ba 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -272,6 +272,7 @@ set(KERNEL_SOURCES Syscalls/disown.cpp Syscalls/dup2.cpp Syscalls/emuctl.cpp + Syscalls/execve.cpp Syscalls/exit.cpp Syscalls/faccessat.cpp Syscalls/fallocate.cpp @@ -402,7 +403,6 @@ if ("${SERENITY_ARCH}" STREQUAL "x86_64") kprintf.cpp Panic.cpp Syscall.cpp - Syscalls/execve.cpp ) set(KERNEL_SOURCES diff --git a/Kernel/Syscalls/execve.cpp b/Kernel/Syscalls/execve.cpp index 3509235c76..c7414b1b35 100644 --- a/Kernel/Syscalls/execve.cpp +++ b/Kernel/Syscalls/execve.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -152,6 +153,10 @@ static ErrorOr make_userspace_context_for_main_thread([[maybe_unused]] regs.rdi = argv_entries.size(); regs.rsi = argv; regs.rdx = envp; +#elif ARCH(AARCH64) + regs.x[0] = argv_entries.size(); + regs.x[1] = argv; + regs.x[2] = envp; #else # error Unknown architecture #endif @@ -717,8 +722,14 @@ static Array generate_auxiliary_vect { ELF::AuxiliaryValue::EGid, (long)egid.value() }, { ELF::AuxiliaryValue::Platform, Processor::platform_string() }, - // FIXME: This is platform specific + // FIXME: This is platform specific +#if ARCH(X86_64) { ELF::AuxiliaryValue::HwCap, (long)CPUID(1).edx() }, +#elif ARCH(AARCH64) + { ELF::AuxiliaryValue::HwCap, (long)0 }, +#else +# error "Unknown architecture" +#endif { ELF::AuxiliaryValue::ClockTick, (long)TimeManagement::the().ticks_per_second() },