mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-02-24 15:43:14 +01:00
156 lines
3.7 KiB
D
156 lines
3.7 KiB
D
/**
|
|
* D header file for POSIX.
|
|
*
|
|
* Copyright: Public Domain
|
|
* License: Public Domain
|
|
* Authors: Sean Kelly
|
|
* Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
|
|
*/
|
|
module stdc.posix.ucontext;
|
|
|
|
private import stdc.posix.config;
|
|
public import stdc.posix.signal; // for sigset_t, stack_t
|
|
|
|
extern (C):
|
|
|
|
//
|
|
// XOpen (XSI)
|
|
//
|
|
/*
|
|
mcontext_t
|
|
|
|
struct ucontext_t
|
|
{
|
|
ucontext_t* uc_link;
|
|
sigset_t uc_sigmask;
|
|
stack_t uc_stack;
|
|
mcontext_t uc_mcontext;
|
|
}
|
|
*/
|
|
|
|
version( linux )
|
|
{
|
|
|
|
version( X86_64 )
|
|
{
|
|
private
|
|
{
|
|
struct _libc_fpxreg
|
|
{
|
|
ushort[4] significand;
|
|
ushort exponent;
|
|
ushort[3] padding;
|
|
}
|
|
|
|
struct _libc_xmmreg
|
|
{
|
|
uint[4] element;
|
|
}
|
|
|
|
struct _libc_fpstate
|
|
{
|
|
ushort cwd;
|
|
ushort swd;
|
|
ushort ftw;
|
|
ushort fop;
|
|
ulong rip;
|
|
ulong rdp;
|
|
uint mxcsr;
|
|
uint mxcr_mask;
|
|
_libc_fpxreg[8] _st;
|
|
_libc_xmmreg[16] _xmm;
|
|
uint[24] padding;
|
|
}
|
|
|
|
const NGREG = 23;
|
|
|
|
alias c_long greg_t;
|
|
alias greg_t[NGREG] gregset_t;
|
|
alias _libc_fpstate* fpregset_t;
|
|
}
|
|
|
|
struct mcontext_t
|
|
{
|
|
gregset_t gregs;
|
|
fpregset_t fpregs;
|
|
c_ulong[8] __reserved1;
|
|
}
|
|
|
|
struct ucontext_t
|
|
{
|
|
c_ulong uc_flags;
|
|
ucontext_t* uc_link;
|
|
stack_t uc_stack;
|
|
mcontext_t uc_mcontext;
|
|
sigset_t uc_sigmask;
|
|
_libc_fpstate __fpregs_mem;
|
|
}
|
|
}
|
|
else version( X86 )
|
|
{
|
|
private
|
|
{
|
|
struct _libc_fpreg
|
|
{
|
|
ushort[4] significand;
|
|
ushort exponent;
|
|
}
|
|
|
|
struct _libc_fpstate
|
|
{
|
|
c_ulong cw;
|
|
c_ulong sw;
|
|
c_ulong tag;
|
|
c_ulong ipoff;
|
|
c_ulong cssel;
|
|
c_ulong dataoff;
|
|
c_ulong datasel;
|
|
_libc_fpreg[8] _st;
|
|
c_ulong status;
|
|
}
|
|
|
|
const NGREG = 19;
|
|
|
|
alias int greg_t;
|
|
alias greg_t[NGREG] gregset_t;
|
|
alias _libc_fpstate* fpregset_t;
|
|
}
|
|
|
|
struct mcontext_t
|
|
{
|
|
gregset_t gregs;
|
|
fpregset_t fpregs;
|
|
c_ulong oldmask;
|
|
c_ulong cr2;
|
|
}
|
|
|
|
struct ucontext_t
|
|
{
|
|
c_ulong uc_flags;
|
|
ucontext_t* uc_link;
|
|
stack_t uc_stack;
|
|
mcontext_t uc_mcontext;
|
|
sigset_t uc_sigmask;
|
|
_libc_fpstate __fpregs_mem;
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// Obsolescent (OB)
|
|
//
|
|
/*
|
|
int getcontext(ucontext_t*);
|
|
void makecontext(ucontext_t*, void function(), int, ...);
|
|
int setcontext(in ucontext_t*);
|
|
int swapcontext(ucontext_t*, in ucontext_t*);
|
|
*/
|
|
|
|
static if( is( ucontext_t ) )
|
|
{
|
|
int getcontext(ucontext_t*);
|
|
void makecontext(ucontext_t*, void function(), int, ...);
|
|
int setcontext(in ucontext_t*);
|
|
int swapcontext(ucontext_t*, in ucontext_t*);
|
|
}
|