summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdeel <3840695+am11@users.noreply.github.com>2022-08-25 22:35:01 +0300
committerDave Watson <dade.watson@gmail.com>2022-09-02 14:58:23 -0700
commit612ebb80368ef69f713de06eaa3d924403ba9288 (patch)
tree023a56489d735343fbcb8f1ac1de0ad9bea337c0
parent3188ad1369c4df2785c017d876f02f727ed326ce (diff)
downloadlibunwind-612ebb80368ef69f713de06eaa3d924403ba9288.tar.gz
Fix undefined behavior issues in aarch64
-rw-r--r--src/aarch64/Ginit.c25
1 files 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