2 * Copyright (c) 2010 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
10 #include <sys/ucontext.h>
13 #include "native_client/src/trusted/service_runtime/linux/android_compat.h"
14 #include "native_client/src/trusted/service_runtime/nacl_signal.h"
17 * Fill a signal context structure from the raw platform dependent
20 void NaClSignalContextFromHandler(struct NaClSignalContext *sig_ctx,
21 const void *raw_ctx) {
22 ucontext_t *uctx = (ucontext_t *) raw_ctx;
23 struct sigcontext *mctx = &uctx->uc_mcontext;
25 memset(sig_ctx, 0, sizeof(*sig_ctx));
27 sig_ctx->prog_ctr = mctx->arm_pc;
28 sig_ctx->stack_ptr = mctx->arm_sp;
30 sig_ctx->r0 = mctx->arm_r0;
31 sig_ctx->r1 = mctx->arm_r1;
32 sig_ctx->r2 = mctx->arm_r2;
33 sig_ctx->r3 = mctx->arm_r3;
34 sig_ctx->r4 = mctx->arm_r4;
35 sig_ctx->r5 = mctx->arm_r5;
36 sig_ctx->r6 = mctx->arm_r6;
37 sig_ctx->r7 = mctx->arm_r7;
38 sig_ctx->r8 = mctx->arm_r8;
39 sig_ctx->r9 = mctx->arm_r9;
40 sig_ctx->r10 = mctx->arm_r10;
41 sig_ctx->r11 = mctx->arm_fp;
42 sig_ctx->r12 = mctx->arm_ip;
43 sig_ctx->lr = mctx->arm_lr;
44 sig_ctx->cpsr = mctx->arm_cpsr;
49 * Update the raw platform dependent signal information from the
50 * signal context structure.
52 void NaClSignalContextToHandler(void *raw_ctx,
53 const struct NaClSignalContext *sig_ctx) {
54 ucontext_t *uctx = (ucontext_t *) raw_ctx;
55 struct sigcontext *mctx = &uctx->uc_mcontext;
57 mctx->arm_pc = sig_ctx->prog_ctr;
58 mctx->arm_sp = sig_ctx->stack_ptr;
60 mctx->arm_r0 = sig_ctx->r0;
61 mctx->arm_r1 = sig_ctx->r1;
62 mctx->arm_r2 = sig_ctx->r2;
63 mctx->arm_r3 = sig_ctx->r3;
64 mctx->arm_r4 = sig_ctx->r4;
65 mctx->arm_r5 = sig_ctx->r5;
66 mctx->arm_r6 = sig_ctx->r6;
67 mctx->arm_r7 = sig_ctx->r7;
68 mctx->arm_r8 = sig_ctx->r8;
69 mctx->arm_r9 = sig_ctx->r9;
70 mctx->arm_r10 = sig_ctx->r10;
71 mctx->arm_fp = sig_ctx->r11;
72 mctx->arm_ip = sig_ctx->r12;
73 mctx->arm_lr = sig_ctx->lr;
74 mctx->arm_cpsr = sig_ctx->cpsr;