Date: Mon, 17 Oct 2016 11:17:04 +0000 (UTC) From: William Grzybowski <wg@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r424109 - head/lang/erlang-riak/files Message-ID: <201610171117.u9HBH4VS000269@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: wg Date: Mon Oct 17 11:17:04 2016 New Revision: 424109 URL: https://svnweb.freebsd.org/changeset/ports/424109 Log: lang/erlang-riak: fix to build with clang 3.9.0 PR: 213515 Submitted by: dim Added: head/lang/erlang-riak/files/patch-commit-5a00e72 (contents, props changed) Added: head/lang/erlang-riak/files/patch-commit-5a00e72 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lang/erlang-riak/files/patch-commit-5a00e72 Mon Oct 17 11:17:04 2016 (r424109) @@ -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; +
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201610171117.u9HBH4VS000269>