void mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx) { #if defined(__native_client__) || defined(HOST_WATCHOS) printf("WARNING: mono_arch_monoctx_to_sigctx() called!\n"); #elif MONO_CROSS_COMPILE g_assert_not_reached (); #elif defined(MONO_SIGNAL_USE_UCONTEXT_T) ucontext_t *ctx = (ucontext_t*)sigctx; UCONTEXT_REG_EAX (ctx) = mctx->eax; UCONTEXT_REG_EBX (ctx) = mctx->ebx; UCONTEXT_REG_ECX (ctx) = mctx->ecx; UCONTEXT_REG_EDX (ctx) = mctx->edx; UCONTEXT_REG_EBP (ctx) = mctx->ebp; UCONTEXT_REG_ESP (ctx) = mctx->esp; UCONTEXT_REG_ESI (ctx) = mctx->esi; UCONTEXT_REG_EDI (ctx) = mctx->edi; UCONTEXT_REG_EIP (ctx) = mctx->eip; #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]; #endif #elif defined(HOST_WIN32) CONTEXT *context = (CONTEXT*)sigctx; context->Eip = mctx->eip; context->Edi = mctx->edi; context->Esi = mctx->esi; context->Ebx = mctx->ebx; context->Edx = mctx->edx; context->Ecx = mctx->ecx; context->Eax = mctx->eax; context->Ebp = mctx->ebp; context->Esp = mctx->esp; #else struct sigcontext *ctx = (struct sigcontext *)sigctx; ctx->SC_EAX = mctx->eax; ctx->SC_EBX = mctx->ebx; ctx->SC_ECX = mctx->ecx; ctx->SC_EDX = mctx->edx; ctx->SC_EBP = mctx->ebp; ctx->SC_ESP = mctx->esp; ctx->SC_ESI = mctx->esi; ctx->SC_EDI = mctx->edi; ctx->SC_EIP = mctx->eip; #endif /* __native_client__ */ }
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 }
void mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx) { #if defined (__native_client__) || defined (HOST_WATCHOS) printf("WARNING: mono_arch_sigctx_to_monoctx() called!\n"); mctx->eax = 0xDEADBEEF; mctx->ebx = 0xDEADBEEF; mctx->ecx = 0xDEADBEEF; mctx->edx = 0xDEADBEEF; mctx->ebp = 0xDEADBEEF; mctx->esp = 0xDEADBEEF; mctx->esi = 0xDEADBEEF; mctx->edi = 0xDEADBEEF; mctx->eip = 0xDEADBEEF; #elif MONO_CROSS_COMPILE g_assert_not_reached (); #elif defined(MONO_SIGNAL_USE_UCONTEXT_T) ucontext_t *ctx = (ucontext_t*)sigctx; mctx->eax = UCONTEXT_REG_EAX (ctx); mctx->ebx = UCONTEXT_REG_EBX (ctx); mctx->ecx = UCONTEXT_REG_ECX (ctx); mctx->edx = UCONTEXT_REG_EDX (ctx); mctx->ebp = UCONTEXT_REG_EBP (ctx); mctx->esp = UCONTEXT_REG_ESP (ctx); mctx->esi = UCONTEXT_REG_ESI (ctx); mctx->edi = UCONTEXT_REG_EDI (ctx); mctx->eip = UCONTEXT_REG_EIP (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); #endif #elif defined(HOST_WIN32) CONTEXT *context = (CONTEXT*)sigctx; mctx->eip = context->Eip; mctx->edi = context->Edi; mctx->esi = context->Esi; mctx->ebx = context->Ebx; mctx->edx = context->Edx; mctx->ecx = context->Ecx; mctx->eax = context->Eax; mctx->ebp = context->Ebp; mctx->esp = context->Esp; #else struct sigcontext *ctx = (struct sigcontext *)sigctx; mctx->eax = ctx->SC_EAX; mctx->ebx = ctx->SC_EBX; mctx->ecx = ctx->SC_ECX; mctx->edx = ctx->SC_EDX; mctx->ebp = ctx->SC_EBP; mctx->esp = ctx->SC_ESP; mctx->esi = ctx->SC_ESI; mctx->edi = ctx->SC_EDI; mctx->eip = ctx->SC_EIP; #endif /* if defined(__native_client__) */ }