1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-18 03:46:03 +00:00

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)
This commit is contained in:
Mark Linimon 2018-06-29 07:48:42 +00:00
parent befa177970
commit 0d9d8a8521
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=473531
6 changed files with 73 additions and 4 deletions

View File

@ -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|}

View File

@ -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" \

View File

@ -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()

View File

@ -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;
}

View File

@ -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

View File

@ -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