Files
nt-lite/code/user/personalities/posix/posix_vfork_asm.h
T

38 lines
1006 B
C

// Shared layout for the x64 vfork continuation context.
#pragma once
#include <stdint.h>
#include <stddef.h>
#include <ntlite/syscall.h>
#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);