// Shared layout for the x64 vfork continuation context. #pragma once #include #include #include #include "posix_internal.h" typedef struct POSIX_VFORK_CONTEXT { uint64_t ReturnAddress; uint64_t ParentRsp; uint64_t Rbx; uint64_t Rbp; uint64_t Rsi; uint64_t Rdi; uint64_t R12; uint64_t R13; uint64_t R14; uint64_t R15; uint8_t Xmm[10][16]; uint32_t Mxcsr; uint16_t X87Control; uint16_t Reserved; POSIX_VFORK_CHILD_STATE* Child; SYS_HANDLE ThreadHandle; uint32_t ChildPid; uint32_t PreviousSuspendCount; volatile uint32_t ChildAttached; volatile KSTATUS ChildAttachStatus; uint32_t Reserved2; } POSIX_VFORK_CONTEXT; POSIX_VFORK_CONTEXT* PosixVforkPrepare(const POSIX_VFORK_CONTEXT* captured); void PosixVforkChildBootstrap(uintptr_t argument); int PosixVforkParentFinish(POSIX_VFORK_CONTEXT* context, KSTATUS waitStatus); void PosixVforkEnterChild(POSIX_VFORK_CONTEXT* context);