summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/aarch64/Ginit.c8
-rw-r--r--src/aarch64/unwind_i.h4
2 files changed, 12 insertions, 0 deletions
diff --git a/src/aarch64/Ginit.c b/src/aarch64/Ginit.c
index 17b8fcbc..e466467f 100644
--- a/src/aarch64/Ginit.c
+++ b/src/aarch64/Ginit.c
@@ -47,9 +47,17 @@ static inline void *
uc_addr (unw_tdep_context_t *uc, int reg)
{
if (reg >= UNW_AARCH64_X0 && reg < UNW_AARCH64_V0)
+#if defined(__FreeBSD__)
+ return &uc->uc_mcontext.mc_gpregs.gp_x[reg];
+#else
return &uc->uc_mcontext.regs[reg];
+#endif
else if (reg >= UNW_AARCH64_V0 && reg <= UNW_AARCH64_V31)
+#if defined(__FreeBSD__)
+ return &GET_FPCTX(uc)->uc_mcontext.mc_fpregs.fp_q[reg - UNW_AARCH64_V0];
+#else
return &GET_FPCTX(uc)->vregs[reg - UNW_AARCH64_V0];
+#endif
else
return NULL;
}
diff --git a/src/aarch64/unwind_i.h b/src/aarch64/unwind_i.h
index db7e29dd..9305846f 100644
--- a/src/aarch64/unwind_i.h
+++ b/src/aarch64/unwind_i.h
@@ -59,6 +59,10 @@ extern int aarch64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor,
} while (0)
#endif
+#if defined(__FreeBSD__)
+#define GET_FPCTX(uc) ((unw_tdep_context_t *)(&uc->uc_mcontext.mc_spare))
+#else
#define GET_FPCTX(uc) ((unw_fpsimd_context_t *)(&uc->uc_mcontext.__reserved))
+#endif
#endif /* unwind_i_h */