kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

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 }