diff options
author | mikael <mikael@FreeBSD.org> | 2022-03-23 10:07:49 +0100 |
---|---|---|
committer | Dave Watson <dade.watson@gmail.com> | 2022-05-22 11:02:22 -0700 |
commit | d3583edb22b84cf8fe46c0d6b2e5454b453f4acc (patch) | |
tree | 3188b2345ea4805a49461f2e1015a70db35481d8 /src | |
parent | 1f09d917a4d0da9b3b54f17f669ee0a190dbb14e (diff) | |
download | libunwind-d3583edb22b84cf8fe46c0d6b2e5454b453f4acc.tar.gz |
Fix for FreeBSD aarch64
Diffstat (limited to 'src')
-rw-r--r-- | src/aarch64/Ginit.c | 8 | ||||
-rw-r--r-- | src/aarch64/unwind_i.h | 4 |
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 */ |