uctx_aarch64_linux.c (670B)
1 /* ucontext_t <-> KitUnwindFrame marshalling for aarch64 on Linux. 2 * mcontext_t exposes regs[0..30] (x0..x30) and a separate `sp` and `pc`. */ 3 4 #include <stdint.h> 5 6 #include "env_posix.h" 7 8 void dbg_ucontext_to_frame(const ucontext_t* uc, KitUnwindFrame* f) { 9 const mcontext_t* mc = &uc->uc_mcontext; 10 int i; 11 for (i = 0; i < 31; ++i) f->regs[i] = mc->regs[i]; 12 f->regs[31] = mc->sp; 13 f->pc = mc->pc; 14 f->cfa = mc->regs[29]; /* fp; CFI refines */ 15 } 16 17 void dbg_frame_to_ucontext(const KitUnwindFrame* f, ucontext_t* uc) { 18 mcontext_t* mc = &uc->uc_mcontext; 19 int i; 20 for (i = 0; i < 31; ++i) mc->regs[i] = f->regs[i]; 21 mc->sp = f->regs[31]; 22 mc->pc = f->pc; 23 }