void mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx) { #if defined(__native_client__) || defined(__native_client_codegen__) printf("WARNING: mono_arch_monoctx_to_sigctx() called!\n"); #endif #if defined(MONO_SIGNAL_USE_SIGACTION) ucontext_t *ctx = (ucontext_t*)sigctx; UCONTEXT_REG_RAX (ctx) = mctx->rax; UCONTEXT_REG_RBX (ctx) = mctx->rbx; UCONTEXT_REG_RCX (ctx) = mctx->rcx; UCONTEXT_REG_RDX (ctx) = mctx->rdx; UCONTEXT_REG_RBP (ctx) = mctx->rbp; UCONTEXT_REG_RSP (ctx) = mctx->rsp; UCONTEXT_REG_RSI (ctx) = mctx->rsi; UCONTEXT_REG_RDI (ctx) = mctx->rdi; UCONTEXT_REG_R8 (ctx) = mctx->r8; UCONTEXT_REG_R9 (ctx) = mctx->r9; UCONTEXT_REG_R10 (ctx) = mctx->r10; UCONTEXT_REG_R11 (ctx) = mctx->r11; UCONTEXT_REG_R12 (ctx) = mctx->r12; UCONTEXT_REG_R13 (ctx) = mctx->r13; UCONTEXT_REG_R14 (ctx) = mctx->r14; UCONTEXT_REG_R15 (ctx) = mctx->r15; UCONTEXT_REG_RIP (ctx) = mctx->rip; #else MonoContext *ctx = (MonoContext *)sigctx; ctx->rax = mctx->rax; ctx->rbx = mctx->rbx; ctx->rcx = mctx->rcx; ctx->rdx = mctx->rdx; ctx->rbp = mctx->rbp; ctx->rsp = mctx->rsp; ctx->rsi = mctx->rsi; ctx->rdi = mctx->rdi; ctx->r8 = mctx->r8; ctx->r9 = mctx->r9; ctx->r10 = mctx->r10; ctx->r11 = mctx->r11; ctx->r12 = mctx->r12; ctx->r13 = mctx->r13; ctx->r14 = mctx->r14; ctx->r15 = mctx->r15; ctx->rip = mctx->rip; #endif }
void mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx) { #if defined(__native_client_codegen__) || defined(__native_client__) printf("WARNING: mono_arch_sigctx_to_monoctx() called!\n"); #endif #if defined(MONO_SIGNAL_USE_SIGACTION) ucontext_t *ctx = (ucontext_t*)sigctx; mctx->rax = UCONTEXT_REG_RAX (ctx); mctx->rbx = UCONTEXT_REG_RBX (ctx); mctx->rcx = UCONTEXT_REG_RCX (ctx); mctx->rdx = UCONTEXT_REG_RDX (ctx); mctx->rbp = UCONTEXT_REG_RBP (ctx); mctx->rsp = UCONTEXT_REG_RSP (ctx); mctx->rsi = UCONTEXT_REG_RSI (ctx); mctx->rdi = UCONTEXT_REG_RDI (ctx); mctx->r8 = UCONTEXT_REG_R8 (ctx); mctx->r9 = UCONTEXT_REG_R9 (ctx); mctx->r10 = UCONTEXT_REG_R10 (ctx); mctx->r11 = UCONTEXT_REG_R11 (ctx); mctx->r12 = UCONTEXT_REG_R12 (ctx); mctx->r13 = UCONTEXT_REG_R13 (ctx); mctx->r14 = UCONTEXT_REG_R14 (ctx); mctx->r15 = UCONTEXT_REG_R15 (ctx); mctx->rip = UCONTEXT_REG_RIP (ctx); #else MonoContext *ctx = (MonoContext *)sigctx; mctx->rax = ctx->rax; mctx->rbx = ctx->rbx; mctx->rcx = ctx->rcx; mctx->rdx = ctx->rdx; mctx->rbp = ctx->rbp; mctx->rsp = ctx->rsp; mctx->rsi = ctx->rsi; mctx->rdi = ctx->rdi; mctx->r8 = ctx->r8; mctx->r9 = ctx->r9; mctx->r10 = ctx->r10; mctx->r11 = ctx->r11; mctx->r12 = ctx->r12; mctx->r13 = ctx->r13; mctx->r14 = ctx->r14; mctx->r15 = ctx->r15; mctx->rip = ctx->rip; #endif }
void mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx) { #if defined(__native_client__) || defined(__native_client_codegen__) printf("WARNING: mono_arch_monoctx_to_sigctx() called!\n"); #endif #ifdef MONO_CROSS_COMPILE g_assert_not_reached (); #elif defined(MONO_SIGNAL_USE_UCONTEXT_T) ucontext_t *ctx = (ucontext_t*)sigctx; UCONTEXT_REG_RAX (ctx) = mctx->gregs [AMD64_RAX]; UCONTEXT_REG_RBX (ctx) = mctx->gregs [AMD64_RBX]; UCONTEXT_REG_RCX (ctx) = mctx->gregs [AMD64_RCX]; UCONTEXT_REG_RDX (ctx) = mctx->gregs [AMD64_RDX]; UCONTEXT_REG_RBP (ctx) = mctx->gregs [AMD64_RBP]; UCONTEXT_REG_RSP (ctx) = mctx->gregs [AMD64_RSP]; UCONTEXT_REG_RSI (ctx) = mctx->gregs [AMD64_RSI]; UCONTEXT_REG_RDI (ctx) = mctx->gregs [AMD64_RDI]; UCONTEXT_REG_R8 (ctx) = mctx->gregs [AMD64_R8]; UCONTEXT_REG_R9 (ctx) = mctx->gregs [AMD64_R9]; UCONTEXT_REG_R10 (ctx) = mctx->gregs [AMD64_R10]; UCONTEXT_REG_R11 (ctx) = mctx->gregs [AMD64_R11]; UCONTEXT_REG_R12 (ctx) = mctx->gregs [AMD64_R12]; UCONTEXT_REG_R13 (ctx) = mctx->gregs [AMD64_R13]; UCONTEXT_REG_R14 (ctx) = mctx->gregs [AMD64_R14]; UCONTEXT_REG_R15 (ctx) = mctx->gregs [AMD64_R15]; UCONTEXT_REG_RIP (ctx) = mctx->gregs [AMD64_RIP]; #ifdef UCONTEXT_REG_XMM UCONTEXT_REG_XMM0 (ctx) = mctx->fregs [0]; UCONTEXT_REG_XMM1 (ctx) = mctx->fregs [1]; UCONTEXT_REG_XMM2 (ctx) = mctx->fregs [2]; UCONTEXT_REG_XMM3 (ctx) = mctx->fregs [3]; UCONTEXT_REG_XMM4 (ctx) = mctx->fregs [4]; UCONTEXT_REG_XMM5 (ctx) = mctx->fregs [5]; UCONTEXT_REG_XMM6 (ctx) = mctx->fregs [6]; UCONTEXT_REG_XMM7 (ctx) = mctx->fregs [7]; UCONTEXT_REG_XMM8 (ctx) = mctx->fregs [8]; UCONTEXT_REG_XMM9 (ctx) = mctx->fregs [9]; UCONTEXT_REG_XMM10 (ctx) = mctx->fregs [10]; UCONTEXT_REG_XMM11 (ctx) = mctx->fregs [11]; UCONTEXT_REG_XMM12 (ctx) = mctx->fregs [12]; UCONTEXT_REG_XMM13 (ctx) = mctx->fregs [13]; UCONTEXT_REG_XMM14 (ctx) = mctx->fregs [14]; UCONTEXT_REG_XMM15 (ctx) = mctx->fregs [15]; #endif #elif defined(HOST_WIN32) CONTEXT *context = (CONTEXT*)sigctx; context->Rip = mctx->gregs [AMD64_RIP]; context->Rax = mctx->gregs [AMD64_RAX]; context->Rcx = mctx->gregs [AMD64_RCX]; context->Rdx = mctx->gregs [AMD64_RDX]; context->Rbx = mctx->gregs [AMD64_RBX]; context->Rsp = mctx->gregs [AMD64_RSP]; context->Rbp = mctx->gregs [AMD64_RBP]; context->Rsi = mctx->gregs [AMD64_RSI]; context->Rdi = mctx->gregs [AMD64_RDI]; context->R8 = mctx->gregs [AMD64_R8]; context->R9 = mctx->gregs [AMD64_R9]; context->R10 = mctx->gregs [AMD64_R10]; context->R11 = mctx->gregs [AMD64_R11]; context->R12 = mctx->gregs [AMD64_R12]; context->R13 = mctx->gregs [AMD64_R13]; context->R14 = mctx->gregs [AMD64_R14]; context->R15 = mctx->gregs [AMD64_R15]; #else g_assert_not_reached (); #endif }
void mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx) { #if defined(__native_client_codegen__) || defined(__native_client__) printf("WARNING: mono_arch_sigctx_to_monoctx() called!\n"); #endif #ifdef MONO_CROSS_COMPILE g_assert_not_reached (); #elif defined(MONO_SIGNAL_USE_UCONTEXT_T) ucontext_t *ctx = (ucontext_t*)sigctx; mctx->gregs [AMD64_RAX] = UCONTEXT_REG_RAX (ctx); mctx->gregs [AMD64_RBX] = UCONTEXT_REG_RBX (ctx); mctx->gregs [AMD64_RCX] = UCONTEXT_REG_RCX (ctx); mctx->gregs [AMD64_RDX] = UCONTEXT_REG_RDX (ctx); mctx->gregs [AMD64_RBP] = UCONTEXT_REG_RBP (ctx); mctx->gregs [AMD64_RSP] = UCONTEXT_REG_RSP (ctx); mctx->gregs [AMD64_RSI] = UCONTEXT_REG_RSI (ctx); mctx->gregs [AMD64_RDI] = UCONTEXT_REG_RDI (ctx); mctx->gregs [AMD64_R8] = UCONTEXT_REG_R8 (ctx); mctx->gregs [AMD64_R9] = UCONTEXT_REG_R9 (ctx); mctx->gregs [AMD64_R10] = UCONTEXT_REG_R10 (ctx); mctx->gregs [AMD64_R11] = UCONTEXT_REG_R11 (ctx); mctx->gregs [AMD64_R12] = UCONTEXT_REG_R12 (ctx); mctx->gregs [AMD64_R13] = UCONTEXT_REG_R13 (ctx); mctx->gregs [AMD64_R14] = UCONTEXT_REG_R14 (ctx); mctx->gregs [AMD64_R15] = UCONTEXT_REG_R15 (ctx); mctx->gregs [AMD64_RIP] = UCONTEXT_REG_RIP (ctx); #ifdef UCONTEXT_REG_XMM mctx->fregs [0] = UCONTEXT_REG_XMM0 (ctx); mctx->fregs [1] = UCONTEXT_REG_XMM1 (ctx); mctx->fregs [2] = UCONTEXT_REG_XMM2 (ctx); mctx->fregs [3] = UCONTEXT_REG_XMM3 (ctx); mctx->fregs [4] = UCONTEXT_REG_XMM4 (ctx); mctx->fregs [5] = UCONTEXT_REG_XMM5 (ctx); mctx->fregs [6] = UCONTEXT_REG_XMM6 (ctx); mctx->fregs [7] = UCONTEXT_REG_XMM7 (ctx); mctx->fregs [8] = UCONTEXT_REG_XMM8 (ctx); mctx->fregs [9] = UCONTEXT_REG_XMM9 (ctx); mctx->fregs [10] = UCONTEXT_REG_XMM10 (ctx); mctx->fregs [11] = UCONTEXT_REG_XMM11 (ctx); mctx->fregs [12] = UCONTEXT_REG_XMM12 (ctx); mctx->fregs [13] = UCONTEXT_REG_XMM13 (ctx); mctx->fregs [14] = UCONTEXT_REG_XMM14 (ctx); mctx->fregs [15] = UCONTEXT_REG_XMM15 (ctx); #endif #elif defined(HOST_WIN32) CONTEXT *context = (CONTEXT*)sigctx; mctx->gregs [AMD64_RIP] = context->Rip; mctx->gregs [AMD64_RAX] = context->Rax; mctx->gregs [AMD64_RCX] = context->Rcx; mctx->gregs [AMD64_RDX] = context->Rdx; mctx->gregs [AMD64_RBX] = context->Rbx; mctx->gregs [AMD64_RSP] = context->Rsp; mctx->gregs [AMD64_RBP] = context->Rbp; mctx->gregs [AMD64_RSI] = context->Rsi; mctx->gregs [AMD64_RDI] = context->Rdi; mctx->gregs [AMD64_R8] = context->R8; mctx->gregs [AMD64_R9] = context->R9; mctx->gregs [AMD64_R10] = context->R10; mctx->gregs [AMD64_R11] = context->R11; mctx->gregs [AMD64_R12] = context->R12; mctx->gregs [AMD64_R13] = context->R13; mctx->gregs [AMD64_R14] = context->R14; mctx->gregs [AMD64_R15] = context->R15; #else g_assert_not_reached (); #endif }