38 lines
1006 B
C
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);
|