mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-08 10:00:22 +02:00
This is an interesting vdso implementation because it only exists in x86-64 with kernel v6.11. For Arm64 the implementation is likely to land in a couple kernel versions from now. Some differences with vdso_getrandom versus the regular getrandom syscall - Has two additional arguments, opaque_state and opaque_len - Expects the userspace to mmap/munmap this opaque state structure - Lets userspace query information about this structure upfront - If the opaque data structure isn't provided then it falls back to regular SYS_getrandom With the "glibc" implementation, we can tell the interface to allocate a single page that gets unused (otherwise glibc ends up not using the interface), and fallback to the regular SYS_getrandom. In the case of the vdso interface, currently the arguments just get passed through. Keeping this as a WIP until the ARM64 kernel patches land and I can actually test the things. Running the "glibc" path works today with the selftest, but the vdso path is currently completely untested.
29 lines
839 B
C++
29 lines
839 B
C++
// SPDX-License-Identifier: MIT
|
|
#pragma once
|
|
#include <FEXCore/IR/IR.h>
|
|
#include <FEXCore/fextl/vector.h>
|
|
|
|
#include "LinuxSyscalls/Syscalls.h"
|
|
|
|
namespace FEX::VDSO {
|
|
using MapperFn = std::function<void*(void* addr, size_t length, int prot, int flags, int fd, off_t offset)>;
|
|
struct VDSOMapping {
|
|
void* VDSOBase {};
|
|
size_t VDSOSize {};
|
|
void* OptionalSigReturnMapping {};
|
|
size_t OptionalMappingSize {};
|
|
};
|
|
|
|
struct VDSOSigReturn {
|
|
void* VDSO_kernel_sigreturn;
|
|
void* VDSO_kernel_rt_sigreturn;
|
|
};
|
|
VDSOMapping LoadVDSOThunks(bool Is64Bit, FEX::HLE::SyscallHandler* const Handler);
|
|
void UnloadVDSOMapping(const VDSOMapping& Mapping);
|
|
|
|
uint64_t GetVSyscallEntry(const void* VDSOBase);
|
|
|
|
const std::span<FEXCore::IR::ThunkDefinition> GetVDSOThunkDefinitions(bool Is64Bit);
|
|
const VDSOSigReturn& GetVDSOSymbols();
|
|
} // namespace FEX::VDSO
|