From 612ebb80368ef69f713de06eaa3d924403ba9288 Mon Sep 17 00:00:00 2001 From: Adeel <3840695+am11@users.noreply.github.com> Date: Thu, 25 Aug 2022 22:35:01 +0300 Subject: Fix undefined behavior issues in aarch64 --- src/aarch64/Ginit.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/aarch64/Ginit.c b/src/aarch64/Ginit.c index e466467f..1aa68b22 100644 --- a/src/aarch64/Ginit.c +++ b/src/aarch64/Ginit.c @@ -46,20 +46,29 @@ unw_addr_space_t unw_local_addr_space = &local_addr_space; static inline void * uc_addr (unw_tdep_context_t *uc, int reg) { - if (reg >= UNW_AARCH64_X0 && reg < UNW_AARCH64_V0) -#if defined(__FreeBSD__) +#ifdef __FreeBSD__ + if (reg >= UNW_AARCH64_X0 && reg < UNW_AARCH64_X30) return &uc->uc_mcontext.mc_gpregs.gp_x[reg]; -#else - return &uc->uc_mcontext.regs[reg]; -#endif + else if (reg == UNW_AARCH64_SP) + return &uc->uc_mcontext.sp; + else if (reg == UNW_AARCH64_PC) + return &uc->uc_mcontext.gp_elr; 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 + else + return NULL; +#else /* __FreeBSD__ */ + if (reg >= UNW_AARCH64_X0 && reg < UNW_AARCH64_X30) + return &uc->uc_mcontext.regs[reg]; + else if (reg == UNW_AARCH64_SP) + return &uc->uc_mcontext.sp; + else if (reg == UNW_AARCH64_PC) + return &uc->uc_mcontext.pc; + else if (reg >= UNW_AARCH64_V0 && reg <= UNW_AARCH64_V31) return &GET_FPCTX(uc)->vregs[reg - UNW_AARCH64_V0]; -#endif else return NULL; +#endif /* __FreeBSD__ */ } # ifdef UNW_LOCAL_ONLY -- cgit v1.2.1