aboutsummaryrefslogtreecommitdiffstats
path: root/lang
diff options
context:
space:
mode:
authorwg <wg@FreeBSD.org>2016-10-17 19:17:04 +0800
committerwg <wg@FreeBSD.org>2016-10-17 19:17:04 +0800
commit15b27ecd64e3cac9e903a91e28c430e2168aba9d (patch)
tree0c50d572613972f9cf577eea45798bfde70928f8 /lang
parentee039cdaec6179b85d3a627ed706813fa7781b09 (diff)
downloadfreebsd-ports-gnome-15b27ecd64e3cac9e903a91e28c430e2168aba9d.tar.gz
freebsd-ports-gnome-15b27ecd64e3cac9e903a91e28c430e2168aba9d.tar.zst
freebsd-ports-gnome-15b27ecd64e3cac9e903a91e28c430e2168aba9d.zip
lang/erlang-riak: fix to build with clang 3.9.0
PR: 213515 Submitted by: dim
Diffstat (limited to 'lang')
-rw-r--r--lang/erlang-riak/files/patch-commit-5a00e72116
1 files changed, 116 insertions, 0 deletions
diff --git a/lang/erlang-riak/files/patch-commit-5a00e72 b/lang/erlang-riak/files/patch-commit-5a00e72
new file mode 100644
index 000000000000..0d58d42dd211
--- /dev/null
+++ b/lang/erlang-riak/files/patch-commit-5a00e72
@@ -0,0 +1,116 @@
+commit 5a00e724a58ee29d4012cca79c8aa33979e74eb6
+Author: Sverker Eriksson <sverker@erlang.org>
+Date: Wed Nov 20 21:33:20 2013 +0100
+
+ erts: Fix alignment bug in allocator start code
+
+ Bug never released.
+
+diff --git erts/emulator/beam/erl_alloc_util.c erts/emulator/beam/erl_alloc_util.c
+index 1fdee4d..00b87ac 100644
+--- erts/emulator/beam/erl_alloc_util.c
++++ erts/emulator/beam/erl_alloc_util.c
+@@ -372,6 +372,8 @@ do { \
+
+ #define ERTS_CRR_ALCTR_FLG_IN_POOL (((erts_aint_t) 1) << 0)
+ #define ERTS_CRR_ALCTR_FLG_BUSY (((erts_aint_t) 1) << 1)
++#define ERTS_CRR_ALCTR_FLG_MASK (ERTS_CRR_ALCTR_FLG_IN_POOL | \
++ ERTS_CRR_ALCTR_FLG_BUSY)
+
+ #ifdef ERTS_SMP
+ #define SBC_HEADER_SIZE \
+@@ -1404,14 +1406,14 @@ get_used_allctr(Allctr_t *pref_allctr, int pref_lock, void *p, UWord *sizep,
+
+ if (ERTS_ALC_TS_PREF_LOCK_IF_USED == pref_lock
+ && pref_allctr->thread_safe) {
+- used_allctr = (Allctr_t *) (iallctr & ~FLG_MASK);
++ used_allctr = (Allctr_t *) (iallctr & ~ERTS_CRR_ALCTR_FLG_MASK);
+ if (pref_allctr == used_allctr) {
+ erts_mtx_lock(&pref_allctr->mutex);
+ locked_pref_allctr = 1;
+ }
+ }
+
+- while ((iallctr & ((~FLG_MASK)|ERTS_CRR_ALCTR_FLG_IN_POOL))
++ while ((iallctr & ((~ERTS_CRR_ALCTR_FLG_MASK)|ERTS_CRR_ALCTR_FLG_IN_POOL))
+ == (((erts_aint_t) pref_allctr)|ERTS_CRR_ALCTR_FLG_IN_POOL)) {
+ erts_aint_t act;
+
+@@ -1426,7 +1428,7 @@ get_used_allctr(Allctr_t *pref_allctr, int pref_lock, void *p, UWord *sizep,
+ iallctr = act;
+ }
+
+- used_allctr = (Allctr_t *) (iallctr & ~FLG_MASK);
++ used_allctr = (Allctr_t *) (iallctr & ~ERTS_CRR_ALCTR_FLG_MASK);
+
+ if (ERTS_ALC_TS_PREF_LOCK_IF_USED == pref_lock) {
+ if (locked_pref_allctr && used_allctr != pref_allctr) {
+@@ -1436,16 +1438,16 @@ get_used_allctr(Allctr_t *pref_allctr, int pref_lock, void *p, UWord *sizep,
+ }
+
+ ERTS_ALC_CPOOL_ASSERT(
+- (((iallctr & ~FLG_MASK) == (erts_aint_t) pref_allctr)
+- ? (((iallctr & FLG_MASK) == ERTS_CRR_ALCTR_FLG_IN_POOL)
+- || ((iallctr & FLG_MASK) == 0))
++ (((iallctr & ~ERTS_CRR_ALCTR_FLG_MASK) == (erts_aint_t) pref_allctr)
++ ? (((iallctr & ERTS_CRR_ALCTR_FLG_MASK) == ERTS_CRR_ALCTR_FLG_IN_POOL)
++ || ((iallctr & ERTS_CRR_ALCTR_FLG_MASK) == 0))
+ : 1));
+
+ return used_allctr;
+ }
+ }
+
+- used_allctr = (Allctr_t *) (iallctr & ~FLG_MASK);
++ used_allctr = (Allctr_t *) (iallctr & ~ERTS_CRR_ALCTR_FLG_MASK);
+
+ if (ERTS_ALC_TS_PREF_LOCK_IF_USED == pref_lock
+ && used_allctr == pref_allctr
+@@ -1776,7 +1778,7 @@ handle_delayed_dealloc(Allctr_t *allctr,
+ ERTS_ALC_CPOOL_ASSERT(allctr == crr->cpool.orig_allctr);
+ ERTS_ALC_CPOOL_ASSERT(((erts_aint_t) allctr)
+ != (erts_smp_atomic_read_nob(&crr->allctr)
+- & ~FLG_MASK));
++ & ~ERTS_CRR_ALCTR_FLG_MASK));
+
+ erts_smp_atomic_set_nob(&crr->allctr, ((erts_aint_t) allctr));
+
+@@ -2919,7 +2921,7 @@ cpool_fetch(Allctr_t *allctr, UWord size)
+ #ifdef ERTS_ALC_CPOOL_DEBUG
+ ERTS_ALC_CPOOL_ASSERT(erts_smp_atomic_xchg_nob(&crr->allctr,
+ ((erts_aint_t) allctr))
+- == (((erts_aint_t) allctr) & ~FLG_MASK));
++ == (((erts_aint_t) allctr) & ~ERTS_CRR_ALCTR_FLG_MASK));
+ #else
+ erts_smp_atomic_set_nob(&crr->allctr, ((erts_aint_t) allctr));
+ #endif
+@@ -2961,7 +2963,7 @@ cpool_fetch(Allctr_t *allctr, UWord size)
+ (erts_aint_t) allctr,
+ exp);
+ if (act == exp) {
+- cpool_delete(allctr, ((Allctr_t *) (act & ~FLG_MASK)), crr);
++ cpool_delete(allctr, ((Allctr_t *) (act & ~ERTS_CRR_ALCTR_FLG_MASK)), crr);
+ return crr;
+ }
+ }
+@@ -3056,7 +3058,7 @@ schedule_dealloc_carrier(Allctr_t *allctr, Carrier_t *crr)
+ ERTS_ALC_CPOOL_ASSERT(crr == FIRST_BLK_TO_MBC(allctr, blk));
+ ERTS_ALC_CPOOL_ASSERT(((erts_aint_t) allctr)
+ == (erts_smp_atomic_read_nob(&crr->allctr)
+- & ~FLG_MASK));
++ & ~ERTS_CRR_ALCTR_FLG_MASK));
+
+ if (ddq_enqueue(&orig_allctr->dd.q, BLK2UMEM(blk), cinit))
+ erts_alloc_notify_delayed_dealloc(orig_allctr->ix);
+@@ -5422,6 +5424,11 @@ erts_alcu_start(Allctr_t *allctr, AllctrInit_t *init)
+ {
+ /* erts_alcu_start assumes that allctr has been zeroed */
+
++ if (((UWord)allctr & ERTS_CRR_ALCTR_FLG_MASK) != 0) {
++ erl_exit(ERTS_ABORT_EXIT, "%s:%d:erts_alcu_start: Alignment error\n",
++ __FILE__, __LINE__);
++ }
++
+ if (!initialized)
+ goto error;
+