mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-11 21:00:40 +02:00
This is very tricky to handle and it has a bunch of rough edges. One of the major problems that we can't workaround is that if we receive a clone flag that pthreads can't support with THREAD, then we are required to fall down the pthreads code path. This is because threads going down the clone path will break TLS and we don't have a way to work around it currently. So this adds a clone path, a clone3 path, and keeps the legacy path as well. Which makes this fairly convoluted but it gets pressure-vessel working on x86-64 host. It's a bit tricky to setup but it does work. Still some work necessary to get pressure-vessel working on AArch64 host, but I'm working on that.
21 lines
736 B
C++
21 lines
736 B
C++
/*
|
|
$info$
|
|
tags: LinuxSyscalls|syscalls-shared
|
|
$end_info$
|
|
*/
|
|
|
|
#pragma once
|
|
#include <stdint.h>
|
|
#include <sys/types.h>
|
|
|
|
namespace FEXCore::Core {
|
|
struct InternalThreadState;
|
|
struct CPUState;
|
|
}
|
|
|
|
namespace FEX::HLE {
|
|
FEXCore::Core::InternalThreadState *CreateNewThread(FEXCore::Context::Context *CTX, FEXCore::Core::CpuStateFrame *Frame, FEX::HLE::kernel_clone3_args *args);
|
|
uint64_t HandleNewClone(FEXCore::Core::InternalThreadState *Thread, FEXCore::Context::Context *CTX, FEXCore::Core::CpuStateFrame *Frame, FEX::HLE::kernel_clone3_args *GuestArgs);
|
|
uint64_t ForkGuest(FEXCore::Core::InternalThreadState *Thread, FEXCore::Core::CpuStateFrame *Frame, uint32_t flags, void *stack, pid_t *parent_tid, pid_t *child_tid, void *tls);
|
|
}
|