vm: don't scribble memory handling leaf signals
parent
7c9332e966
commit
1c7bd9a7b4
|
@ -48,13 +48,10 @@ void factor_vm::dispatch_signal_handler(cell *sp, cell *pc, cell handler)
|
||||||
else if (offset == 16 - sizeof(cell))
|
else if (offset == 16 - sizeof(cell))
|
||||||
{
|
{
|
||||||
// Make a fake frame for the leaf procedure
|
// Make a fake frame for the leaf procedure
|
||||||
code_block *leaf_block = code->code_block_for_address(*pc);
|
FACTOR_ASSERT(code->code_block_for_address(*pc) != NULL);
|
||||||
FACTOR_ASSERT(leaf_block != NULL);
|
|
||||||
|
|
||||||
cell newsp = *sp - LEAF_FRAME_SIZE;
|
cell newsp = *sp - LEAF_FRAME_SIZE;
|
||||||
*(cell*)(newsp + 3*sizeof(cell)) = 4*sizeof(cell);
|
*(cell*)newsp = *pc;
|
||||||
*(cell*)(newsp + 2*sizeof(cell)) = (cell)leaf_block->entry_point();
|
|
||||||
*(cell*) newsp = *pc;
|
|
||||||
*sp = newsp;
|
*sp = newsp;
|
||||||
handler_word = tagged<word>(special_objects[LEAF_SIGNAL_HANDLER_WORD]);
|
handler_word = tagged<word>(special_objects[LEAF_SIGNAL_HANDLER_WORD]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue