FreeBSD Bugzilla – Attachment 175794 Details for
Bug 213515
lang/erlang-riak: Fix build with clang 3.9.0
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Upstream fix for alignment bug in allocator start code
lang__erlang-riak-fix-alignment-bug-1.diff (text/plain), 5.03 KB, created by
Dimitry Andric
on 2016-10-15 22:00:35 UTC
(
hide
)
Description:
Upstream fix for alignment bug in allocator start code
Filename:
MIME Type:
Creator:
Dimitry Andric
Created:
2016-10-15 22:00:35 UTC
Size:
5.03 KB
patch
obsolete
>Index: lang/erlang-riak/files/patch-commit-5a00e72 >=================================================================== >--- lang/erlang-riak/files/patch-commit-5a00e72 (nonexistent) >+++ lang/erlang-riak/files/patch-commit-5a00e72 (working copy) >@@ -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; >+ > >Property changes on: lang/erlang-riak/files/patch-commit-5a00e72 >___________________________________________________________________ >Added: fbsd:nokeywords >## -0,0 +1 ## >+yes >\ No newline at end of property >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Added: svn:mime-type >## -0,0 +1 ## >+text/plain >\ No newline at end of property
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 213515
: 175794