//// Definitions used within VX environments// to invoke VX system calls and parent calls.//#ifndef _VXSYS_H_#define _VXSYS_H_// VX parent-calls take the parent-call code and flags in EAX,// If the VXPC_SENDBUF flag is set, EBX points to a message to send// and EDX contains the message's length in bytes.// The ECX register cannot be used for call or return arguments,// as it is used as a temporary by the SYSCALL instruction.// All other registers are simple register arguments to the parent.#define VXPCALL(a, s1, s2, r1, r2) \ asm volatile("syscall" \ : "=a" (a), "=b" (s1), "=d" (s2) \ : "a" (a), "b" (s1), "d" (s2), "S" (r1), "D" (r2) \ : "ecx");static inline void vxsetperm(void *addr, size_t size, int perm){ asm volatile("syscall" : : "a" (VXSYS_SETPERM), "b" (addr), "d" (size), "S" (perm) : "ecx");}#endif // _VXSYS_H_
//
// Definitions used within VX environments
// to invoke VX system calls and parent calls.
//
#ifndef _VXSYS_H_
#define _VXSYS_H_
// VX parent-calls take the parent-call code and flags in EAX,
// If the VXPC_SENDBUF flag is set, EBX points to a message to send
// and EDX contains the message's length in bytes.
// The ECX register cannot be used for call or return arguments,
// as it is used as a temporary by the SYSCALL instruction.
// All other registers are simple register arguments to the parent.
#define VXPCALL(a, s1, s2, r1, r2) \
asm volatile("syscall" \
: "=a" (a), "=b" (s1), "=d" (s2) \
: "a" (a), "b" (s1), "d" (s2), "S" (r1), "D" (r2) \
: "ecx");
static inline void vxsetperm(void *addr, size_t size, int perm)
{
asm volatile("syscall"
:
: "a" (VXSYS_SETPERM), "b" (addr), "d" (size), "S" (perm)
: "ecx");
}
#endif // _VXSYS_H_