testing/ponyc: fix on aarch64

This commit is contained in:
Jakub Jirutka 2018-05-05 22:31:41 +02:00
parent 396eb82cd1
commit 923cd1e698
3 changed files with 121 additions and 1 deletions

View File

@ -7,7 +7,12 @@ pkgdesc="An open-source, actor-model, capabilities-secure, high performance prog
url="https://www.ponylang.org" url="https://www.ponylang.org"
arch="x86_64 aarch64" arch="x86_64 aarch64"
license="BSD-2-Clause" license="BSD-2-Clause"
_llvmver=3.9 # LLVM 5 support is denoted as experimental, but libponyc.tests segfault on
# LLVM 3.9.1 and 4.0.0 (see https://github.com/ponylang/ponyc/issues/2689).
case "$CARCH" in
aarch64) _llvmver=5;;
*) _llvmver=3.9;;
esac
depends="binutils-gold clang" depends="binutils-gold clang"
checkdepends="libressl-dev pcre2-dev" checkdepends="libressl-dev pcre2-dev"
makedepends="clang-dev libexecinfo-dev libunwind-dev llvm$_llvmver-dev makedepends="clang-dev libexecinfo-dev libunwind-dev llvm$_llvmver-dev
@ -15,6 +20,8 @@ makedepends="clang-dev libexecinfo-dev libunwind-dev llvm$_llvmver-dev
subpackages="$pkgname-dev $pkgname-doc" subpackages="$pkgname-dev $pkgname-doc"
source="$pkgname-$pkgver.tar.gz::https://github.com/ponylang/$pkgname/archive/$pkgver.tar.gz source="$pkgname-$pkgver.tar.gz::https://github.com/ponylang/$pkgname/archive/$pkgver.tar.gz
disable-avx512f-for-x86-only.patch disable-avx512f-for-x86-only.patch
fix-aarch64.patch
fix-atomic-initializer.patch
makefile-remove-march-mtune.patch makefile-remove-march-mtune.patch
fix-tests.patch" fix-tests.patch"
builddir="$srcdir/$pkgname-$pkgver" builddir="$srcdir/$pkgname-$pkgver"
@ -51,6 +58,8 @@ build() {
build/release/ponyc packages/stdlib -rexpr -g -o docs build/release/ponyc packages/stdlib -rexpr -g -o docs
} }
# NOTE: libponyc.tests segfaults on some aarch64 machines when libnuma is
# installed (e.g. on our 96cores machine).
check() { check() {
cd "$builddir" cd "$builddir"
make test -j1 $_make_opts make test -j1 $_make_opts
@ -88,5 +97,7 @@ dev() {
sha512sums="f89389142d77e93038c77d3fbe9e64c13ce76b9737430969fcdf2916023d0b7195f4d551895eab999798594352b40848be8dcc63af6927e8cc62b7c7000be65d ponyc-0.21.3.tar.gz sha512sums="f89389142d77e93038c77d3fbe9e64c13ce76b9737430969fcdf2916023d0b7195f4d551895eab999798594352b40848be8dcc63af6927e8cc62b7c7000be65d ponyc-0.21.3.tar.gz
0f1d7e45639db17343db675a740922b2c1ef1317fd1a7678a0d30040407c91c930b7439dc12282541384336da1af5f0bc143ea0f5725eb8aa2ab3646b1cf00f7 disable-avx512f-for-x86-only.patch 0f1d7e45639db17343db675a740922b2c1ef1317fd1a7678a0d30040407c91c930b7439dc12282541384336da1af5f0bc143ea0f5725eb8aa2ab3646b1cf00f7 disable-avx512f-for-x86-only.patch
4ff47633e878890d9400b7ab7d7fad42119707d8b1f69c0192266f4b2d386be698bb0e8f2accae9b440bcfece39e1c6baf10047436dc184b1c3885c2ac33d569 fix-aarch64.patch
f78ff44de59fe486bdfa8a7fbde14786825e549b23759ef798ba7632d556203de49b522562a04cfcab1ef3ef323e226ff9217abebafcb414e647ebd17877b67d fix-atomic-initializer.patch
0dac51826c0fcd47e6d4e7fe9928a5221c66da2f24d7931d7c53e591d325375b88e98cc0b3b6d538f9ec9bcbba906de7c00fff5434e427c94cea4bd2fb0477f6 makefile-remove-march-mtune.patch 0dac51826c0fcd47e6d4e7fe9928a5221c66da2f24d7931d7c53e591d325375b88e98cc0b3b6d538f9ec9bcbba906de7c00fff5434e427c94cea4bd2fb0477f6 makefile-remove-march-mtune.patch
46c0125b60cd1db89d7ae958602b087acb2ae1fd8298cd9141828999693a9e39b60d2dac338853406081fc1c138e506243357618197ffd118fe4ac9737bd1565 fix-tests.patch" 46c0125b60cd1db89d7ae958602b087acb2ae1fd8298cd9141828999693a9e39b60d2dac338853406081fc1c138e506243357618197ffd118fe4ac9737bd1565 fix-tests.patch"

View File

@ -0,0 +1,56 @@
From 62dee527de27d0899331ebeb0362b60cd39cfcdd Mon Sep 17 00:00:00 2001
From: Vassil Kovatchev <vkovatchev@deloitte.com>
Date: Thu, 3 May 2018 09:48:52 -0400
Subject: [PATCH] Fix failing aarch64 (ARM64) build
ARM64 systems do not use ARM Exception Handling ABI (EHABI), but rather the DWARF exception handling standard.
The fix turns off special ARM handling of exceptions when the target platform is ARM64.
This enables builds of the codebase on ARM64 systems with standard implementation of libunwind as shipped with gcc 5+.
Patch-Source: https://github.com/ponylang/ponyc/pull/2688
--- a/src/common/platform.h
+++ b/src/common/platform.h
@@ -170,6 +170,11 @@
*/
#if defined(ARMV2) || defined(__arm__) || defined(__aarch64__)
# define PLATFORM_IS_ARM
+# if defined(__aarch64__)
+# define PLATFORM_IS_ARM64
+# else
+# define PLATFORM_IS_ARM32
+# endif
#elif defined(__i386__) || defined(_M_IX86) || defined(_X86_) || \
defined(__amd64__) || defined(__x86_64__) || defined(_M_X64) || \
defined(_M_AMD64)
--- a/src/libponyrt/lang/posix_except.c
+++ b/src/libponyrt/lang/posix_except.c
@@ -9,7 +9,7 @@
PONY_EXTERN_C_BEGIN
-#ifdef PLATFORM_IS_ARM
+#ifdef PLATFORM_IS_ARM32
#include <string.h>
#include <stdio.h>
#endif
@@ -26,7 +26,7 @@
PONY_API void pony_error()
{
-#ifdef PLATFORM_IS_ARM
+#ifdef PLATFORM_IS_ARM32
memcpy(exception.exception_class, "Pony\0\0\0\0", 8);
#else
exception.exception_class = 0x506F6E7900000000; // "Pony"
@@ -46,7 +46,9 @@
_Unwind_SetIP(context, landing_pad);
}
-#ifdef PLATFORM_IS_ARM
+// Switch to ARM EHABI for ARM32 devices.
+// Note that this does not apply to ARM64 devices which use DWARF Exception Handling.
+#ifdef PLATFORM_IS_ARM32
_Unwind_Reason_Code __gnu_unwind_frame(_Unwind_Exception*, _Unwind_Context*);

View File

@ -0,0 +1,53 @@
change atomic initializer in pool_global
Patch backported to 0.21.3 from https://github.com/ponylang/ponyc/pull/2668
--- a/src/libponyrt/mem/pool.c
+++ b/src/libponyrt/mem/pool.c
@@ -97,24 +97,30 @@
#define THREAD_MAX_BEFORE_SHARE(MAX_MEM, SIZE) \
(((MAX_MEM / SIZE)>=(1))?(MAX_MEM / SIZE):(1))
+#ifdef PLATFORM_IS_X86
+# define POOL_CENTRAL_INIT {{NULL, 0}}
+#else
+# define POOL_CENTRAL_INIT NULL
+#endif
+
static pool_global_t pool_global[POOL_COUNT] =
{
- {POOL_MIN << 0, THREAD_MAX_BEFORE_SHARE(0x8000, POOL_MIN << 0), {{NULL, 0}}},
- {POOL_MIN << 1, THREAD_MAX_BEFORE_SHARE(0x8000, POOL_MIN << 1), {{NULL, 0}}},
- {POOL_MIN << 2, THREAD_MAX_BEFORE_SHARE(0x8000, POOL_MIN << 2), {{NULL, 0}}},
- {POOL_MIN << 3, THREAD_MAX_BEFORE_SHARE(0x8000, POOL_MIN << 3), {{NULL, 0}}},
- {POOL_MIN << 4, THREAD_MAX_BEFORE_SHARE(0x8000, POOL_MIN << 4), {{NULL, 0}}},
- {POOL_MIN << 5, THREAD_MAX_BEFORE_SHARE(0x10000, POOL_MIN << 5), {{NULL, 0}}},
- {POOL_MIN << 6, THREAD_MAX_BEFORE_SHARE(0x20000, POOL_MIN << 6), {{NULL, 0}}},
- {POOL_MIN << 7, THREAD_MAX_BEFORE_SHARE(0x40000, POOL_MIN << 7), {{NULL, 0}}},
- {POOL_MIN << 8, THREAD_MAX_BEFORE_SHARE(0x80000, POOL_MIN << 8), {{NULL, 0}}},
- {POOL_MIN << 9, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 9), {{NULL, 0}}},
- {POOL_MIN << 10, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 10), {{NULL, 0}}},
- {POOL_MIN << 11, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 11), {{NULL, 0}}},
- {POOL_MIN << 12, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 12), {{NULL, 0}}},
- {POOL_MIN << 13, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 13), {{NULL, 0}}},
- {POOL_MIN << 14, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 14), {{NULL, 0}}},
- {POOL_MIN << 15, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 15), {{NULL, 0}}},
+ {POOL_MIN << 0, THREAD_MAX_BEFORE_SHARE(0x8000, POOL_MIN << 0), POOL_CENTRAL_INIT},
+ {POOL_MIN << 1, THREAD_MAX_BEFORE_SHARE(0x8000, POOL_MIN << 1), POOL_CENTRAL_INIT},
+ {POOL_MIN << 2, THREAD_MAX_BEFORE_SHARE(0x8000, POOL_MIN << 2), POOL_CENTRAL_INIT},
+ {POOL_MIN << 3, THREAD_MAX_BEFORE_SHARE(0x8000, POOL_MIN << 3), POOL_CENTRAL_INIT},
+ {POOL_MIN << 4, THREAD_MAX_BEFORE_SHARE(0x8000, POOL_MIN << 4), POOL_CENTRAL_INIT},
+ {POOL_MIN << 5, THREAD_MAX_BEFORE_SHARE(0x10000, POOL_MIN << 5), POOL_CENTRAL_INIT},
+ {POOL_MIN << 6, THREAD_MAX_BEFORE_SHARE(0x20000, POOL_MIN << 6), POOL_CENTRAL_INIT},
+ {POOL_MIN << 7, THREAD_MAX_BEFORE_SHARE(0x40000, POOL_MIN << 7), POOL_CENTRAL_INIT},
+ {POOL_MIN << 8, THREAD_MAX_BEFORE_SHARE(0x80000, POOL_MIN << 8), POOL_CENTRAL_INIT},
+ {POOL_MIN << 9, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 9), POOL_CENTRAL_INIT},
+ {POOL_MIN << 10, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 10), POOL_CENTRAL_INIT},
+ {POOL_MIN << 11, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 11), POOL_CENTRAL_INIT},
+ {POOL_MIN << 12, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 12), POOL_CENTRAL_INIT},
+ {POOL_MIN << 13, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 13), POOL_CENTRAL_INIT},
+ {POOL_MIN << 14, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 14), POOL_CENTRAL_INIT},
+ {POOL_MIN << 15, THREAD_MAX_BEFORE_SHARE(POOL_MAX, POOL_MIN << 15), POOL_CENTRAL_INIT},
};
static pool_block_t pool_block_global;