Skip to content

Commit abb0c4f

Browse files
committed
erts: Assert no permission handover flags set after BIF
What about call_bif_W and maybe other ways to call BIFs.
1 parent 34732fa commit abb0c4f

3 files changed

Lines changed: 9 additions & 0 deletions

File tree

erts/emulator/beam/emu/bif_instrs.tab

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,9 @@ call_light_bif(Bif, Exp) {
263263

264264
ERTS_CHK_MBUF_SZ(c_p);
265265
ASSERT(!ERTS_PROC_IS_EXITING(c_p) || is_non_value(result));
266+
ASSERT(!(erts_atomic32_read_nob(&c_p->xstate)
267+
& (ERTS_PXSFLG_HANDOVER_CODE_MOD_PERM |
268+
ERTS_PXSFLG_HANDOVER_CODE_STAGE_PERM)));
266269
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
267270
ERTS_HOLE_CHECK(c_p);
268271
ERTS_REQ_PROC_MAIN_LOCK(c_p);

erts/emulator/beam/jit/arm/instr_bif.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,9 @@ static Eterm debug_call_light_bif(Process *c_p,
359359
PROCESS_MAIN_CHK_LOCKS(c_p);
360360
ERTS_REQ_PROC_MAIN_LOCK(c_p);
361361
ERTS_ASSERT_TRACER_REFS(&c_p->common);
362+
ERTS_ASSERT(!(erts_atomic32_read_nob(&c_p->xstate)
363+
& (ERTS_PXSFLG_HANDOVER_CODE_MOD_PERM |
364+
ERTS_PXSFLG_HANDOVER_CODE_STAGE_PERM)));
362365

363366
return result;
364367
}

erts/emulator/beam/jit/x86/instr_bif.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,9 @@ static Eterm debug_call_light_bif(Process *c_p,
401401
PROCESS_MAIN_CHK_LOCKS(c_p);
402402
ERTS_REQ_PROC_MAIN_LOCK(c_p);
403403
ERTS_ASSERT_TRACER_REFS(&c_p->common);
404+
ERTS_ASSERT(!(erts_atomic32_read_nob(&c_p->xstate)
405+
& (ERTS_PXSFLG_HANDOVER_CODE_MOD_PERM |
406+
ERTS_PXSFLG_HANDOVER_CODE_STAGE_PERM)));
404407

405408
return result;
406409
}

0 commit comments

Comments
 (0)