summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Linimon <linimon@FreeBSD.org>2018-06-29 07:48:42 +0000
committerMark Linimon <linimon@FreeBSD.org>2018-06-29 07:48:42 +0000
commit0d9d8a8521042264f7b520204a7e123a7d22aabc (patch)
treefb21ece10358bfeb0465d94601ca3ff650cb5e12
parentFix build on aarch64. Tested for no-harm on amd64. (diff)
Port to aarch64. Tested for no-harm on amd64.
While here, pet portlint. PR: 229057 Submitted by: greg at unrelenting.technology Approved by: portmgr (tier-2 blanket)
-rw-r--r--devel/libunwind/Makefile8
-rw-r--r--devel/libunwind/files/patch-include_libunwind-aarch64.h11
-rw-r--r--devel/libunwind/files/patch-include_libunwind__i.h14
-rw-r--r--devel/libunwind/files/patch-src_aarch64_Ginit.c11
-rw-r--r--devel/libunwind/files/patch-src_coredump___UCD__access__reg__freebsd.c13
-rw-r--r--devel/libunwind/files/patch-src_ptrace___UPT__access__fpreg.c20
6 files changed, 73 insertions, 4 deletions
diff --git a/devel/libunwind/Makefile b/devel/libunwind/Makefile
index 52dc5944ddf8..82d3d24e61fd 100644
--- a/devel/libunwind/Makefile
+++ b/devel/libunwind/Makefile
@@ -13,17 +13,17 @@ COMMENT= Generic stack unwinding library
LICENSE= MIT
LICENSE_FILE= ${WRKSRC}/COPYING
+ONLY_FOR_ARCHS= aarch64 amd64 i386
+
OPTIONS_DEFINE= DOCS
OPTIONS_SUB= yes
DOCS_CONFIGURE_ON= ac_cv_path_LATEX2MAN=${TRUE}
DOCS_CONFIGURE_OFF= --disable-documentation
-ONLY_FOR_ARCHS= i386 amd64
-
+USES= libtool pathfix pkgconfig
+USE_LDCONFIG= yes
GNU_CONFIGURE= yes
INSTALL_TARGET= install-strip
-USE_LDCONFIG= yes
-USES= libtool pathfix pkgconfig
LLD_UNSAFE= yes
PLIST_SUB= ARCH=${ARCH:S|i386|x86|:S|amd64|x86_64|}
diff --git a/devel/libunwind/files/patch-include_libunwind-aarch64.h b/devel/libunwind/files/patch-include_libunwind-aarch64.h
new file mode 100644
index 000000000000..d155e228f92f
--- /dev/null
+++ b/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 a/devel/libunwind/files/patch-include_libunwind__i.h b/devel/libunwind/files/patch-include_libunwind__i.h
new file mode 100644
index 000000000000..bd1d60935304
--- /dev/null
+++ b/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 a/devel/libunwind/files/patch-src_aarch64_Ginit.c b/devel/libunwind/files/patch-src_aarch64_Ginit.c
new file mode 100644
index 000000000000..9a5cd8ffa026
--- /dev/null
+++ b/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 a/devel/libunwind/files/patch-src_coredump___UCD__access__reg__freebsd.c b/devel/libunwind/files/patch-src_coredump___UCD__access__reg__freebsd.c
new file mode 100644
index 000000000000..90615b82b333
--- /dev/null
+++ b/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 a/devel/libunwind/files/patch-src_ptrace___UPT__access__fpreg.c b/devel/libunwind/files/patch-src_ptrace___UPT__access__fpreg.c
new file mode 100644
index 000000000000..d3cb94a95311
--- /dev/null
+++ b/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