devel/libunwind: Fix build on aarch64
PR: 262447 Approved by: portmgr (build fix blanket)
This commit is contained in:
parent
005572b5c6
commit
b53231cc31
3 changed files with 61 additions and 0 deletions
28
devel/libunwind/files/patch-include_libunwind-aarch64.h
Normal file
28
devel/libunwind/files/patch-include_libunwind-aarch64.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
--- include/libunwind-aarch64.h.orig 2021-12-01 00:46:39 UTC
|
||||
+++ include/libunwind-aarch64.h
|
||||
@@ -226,15 +226,24 @@ typedef struct
|
||||
#else
|
||||
/* On AArch64, we can directly use ucontext_t as the unwind context. */
|
||||
typedef ucontext_t unw_tdep_context_t;
|
||||
+#if defined(__FreeBSD__)
|
||||
+typedef ucontext_t unw_fpsimd_context_t;
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
|
||||
#include "libunwind-common.h"
|
||||
#include "libunwind-dynamic.h"
|
||||
|
||||
+#if defined(__FreeBSD__)
|
||||
+#define UNW_BASE register uint64_t unw_base __asm__ ("x0") = (uint64_t) unw_ctx->uc_mcontext.mc_gpregs.gp_x[0];
|
||||
+#else
|
||||
+#define UNW_BASE register uint64_t unw_base __asm__ ("x0") = (uint64_t) unw_ctx->uc_mcontext.regs;
|
||||
+#endif
|
||||
+
|
||||
#define unw_tdep_getcontext(uc) ({ \
|
||||
unw_tdep_context_t *unw_ctx = (uc); \
|
||||
- register uint64_t unw_base __asm__ ("x0") = (uint64_t) unw_ctx->uc_mcontext.regs; \
|
||||
+ UNW_BASE \
|
||||
__asm__ __volatile__ ( \
|
||||
"stp x0, x1, [%[base], #0]\n" \
|
||||
"stp x2, x3, [%[base], #16]\n" \
|
20
devel/libunwind/files/patch-src_aarch64_Ginit.c
Normal file
20
devel/libunwind/files/patch-src_aarch64_Ginit.c
Normal file
|
@ -0,0 +1,20 @@
|
|||
--- src/aarch64/Ginit.c.orig 2021-11-30 17:12:31 UTC
|
||||
+++ 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;
|
||||
}
|
13
devel/libunwind/files/patch-src_aarch64_unwind__i.h
Normal file
13
devel/libunwind/files/patch-src_aarch64_unwind__i.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
--- src/aarch64/unwind_i.h.orig 2020-04-28 15:49:14 UTC
|
||||
+++ src/aarch64/unwind_i.h
|
||||
@@ -59,6 +59,10 @@ extern int aarch64_local_resume (unw_addr_space_t as,
|
||||
} 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 */
|
Loading…
Reference in a new issue