Skip site navigation (1)Skip section navigation (2)
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>