diff --git c/devel/libunwind/Makefile i/devel/libunwind/Makefile index 52dc5944ddf8..248ed66041a7 100644 --- c/devel/libunwind/Makefile +++ i/devel/libunwind/Makefile @@ -18,7 +18,7 @@ OPTIONS_SUB= yes DOCS_CONFIGURE_ON= ac_cv_path_LATEX2MAN=${TRUE} DOCS_CONFIGURE_OFF= --disable-documentation -ONLY_FOR_ARCHS= i386 amd64 +ONLY_FOR_ARCHS= i386 amd64 aarch64 GNU_CONFIGURE= yes INSTALL_TARGET= install-strip diff --git c/devel/libunwind/files/patch-include_libunwind-aarch64.h i/devel/libunwind/files/patch-include_libunwind-aarch64.h new file mode 100644 index 000000000000..d155e228f92f --- /dev/null +++ i/devel/libunwind/files/patch-include_libunwind-aarch64.h @@ -0,0 +1,11 @@ +--- include/libunwind-aarch64.h.orig 2018-06-15 23:58:09 UTC ++++ include/libunwind-aarch64.h +@@ -177,7 +177,7 @@ typedef ucontext_t unw_tdep_context_t; + + #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; \ ++ register uint64_t *unw_base asm ("x0") = (uint64_t*) unw_ctx->uc_mcontext.mc_gpregs.gp_x; \ + __asm__ __volatile__ ( \ + "stp x0, x1, [%[base], #0]\n" \ + "stp x2, x3, [%[base], #16]\n" \ diff --git c/devel/libunwind/files/patch-include_libunwind__i.h i/devel/libunwind/files/patch-include_libunwind__i.h new file mode 100644 index 000000000000..bd1d60935304 --- /dev/null +++ i/devel/libunwind/files/patch-include_libunwind__i.h @@ -0,0 +1,14 @@ +--- include/libunwind_i.h.orig 2018-06-15 23:58:15 UTC ++++ include/libunwind_i.h +@@ -86,6 +86,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + # error Host has unknown byte-order. + # endif + #endif ++#ifdef __FreeBSD__ ++#define __BYTE_ORDER BYTE_ORDER ++#define __LITTLE_ENDIAN LITTLE_ENDIAN ++#define __BIG_ENDIAN BIG_ENDIAN ++#endif + + #if defined(HAVE__BUILTIN_UNREACHABLE) + # define unreachable() __builtin_unreachable() diff --git c/devel/libunwind/files/patch-src_aarch64_Ginit.c i/devel/libunwind/files/patch-src_aarch64_Ginit.c new file mode 100644 index 000000000000..9a5cd8ffa026 --- /dev/null +++ i/devel/libunwind/files/patch-src_aarch64_Ginit.c @@ -0,0 +1,11 @@ +--- src/aarch64/Ginit.c.orig 2018-06-15 23:58:20 UTC ++++ src/aarch64/Ginit.c +@@ -44,7 +44,7 @@ static inline void * + uc_addr (ucontext_t *uc, int reg) + { + if (reg >= UNW_AARCH64_X0 && reg <= UNW_AARCH64_V31) +- return &uc->uc_mcontext.regs[reg]; ++ return &uc->uc_mcontext.mc_gpregs.gp_x[reg]; + else + return NULL; + } diff --git c/devel/libunwind/files/patch-src_coredump___UCD__access__reg__freebsd.c i/devel/libunwind/files/patch-src_coredump___UCD__access__reg__freebsd.c new file mode 100644 index 000000000000..90615b82b333 --- /dev/null +++ i/devel/libunwind/files/patch-src_coredump___UCD__access__reg__freebsd.c @@ -0,0 +1,13 @@ +--- src/coredump/_UCD_access_reg_freebsd.c.orig 2018-06-16 00:05:10 UTC ++++ src/coredump/_UCD_access_reg_freebsd.c +@@ -110,6 +110,10 @@ _UCD_access_reg (unw_addr_space_t as, + Debug(0, "bad regnum:%d\n", regnum); + return -UNW_EINVAL; + }; ++#elif defined(UNW_TARGET_AARCH64) ++ if (regnum < 0 || regnum >= UNW_AARCH64_FPCR) ++ return -UNW_EINVAL; ++ *valp = ui->prstatus->pr_reg.x[regnum]; + #else + #error Port me + #endif diff --git c/devel/libunwind/files/patch-src_ptrace___UPT__access__fpreg.c i/devel/libunwind/files/patch-src_ptrace___UPT__access__fpreg.c new file mode 100644 index 000000000000..d3cb94a95311 --- /dev/null +++ i/devel/libunwind/files/patch-src_ptrace___UPT__access__fpreg.c @@ -0,0 +1,20 @@ +--- src/ptrace/_UPT_access_fpreg.c.orig 2018-06-15 23:58:03 UTC ++++ src/ptrace/_UPT_access_fpreg.c +@@ -85,6 +85,8 @@ _UPT_access_fpreg (unw_addr_space_t as, unw_regnum_t r + memcpy(&fpreg.fpr_xacc[reg], val, sizeof(unw_fpreg_t)); + #elif defined(__i386__) + memcpy(&fpreg.fpr_acc[reg], val, sizeof(unw_fpreg_t)); ++#elif defined(__aarch64__) ++ memcpy(&fpreg.fp_q[reg], val, sizeof(unw_fpreg_t)); + #else + #error Fix me + #endif +@@ -95,6 +97,8 @@ _UPT_access_fpreg (unw_addr_space_t as, unw_regnum_t r + memcpy(val, &fpreg.fpr_xacc[reg], sizeof(unw_fpreg_t)); + #elif defined(__i386__) + memcpy(val, &fpreg.fpr_acc[reg], sizeof(unw_fpreg_t)); ++#elif defined(__aarch64__) ++ memcpy(val, &fpreg.fp_q[reg], sizeof(unw_fpreg_t)); + #else + #error Fix me + #endif