Fix crash if GC runs during lazy_jit_compile
parent
f400729792
commit
99a42aa089
|
|
@ -173,9 +173,7 @@ DEF(void,throw_impl,(CELL quot, F_STACK_FRAME *rewind_to)):
|
|||
DEF(void,lazy_jit_compile,(CELL quot)):
|
||||
mr r4,r1 /* save stack pointer */
|
||||
PROLOGUE
|
||||
SAVE(r3,18) /* save quot */
|
||||
bl MANGLE(jit_compile)
|
||||
RESTORE(r3,18)
|
||||
EPILOGUE
|
||||
JUMP_QUOT /* call the quotation */
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ and the callstack top is passed in EDX */
|
|||
pop %ebp ; \
|
||||
pop %ebx
|
||||
|
||||
#define QUOT_XT_OFFSET 5
|
||||
#define QUOT_XT_OFFSET 9
|
||||
#define PROFILING_OFFSET 25
|
||||
#define WORD_DEF_OFFSET 13
|
||||
#define WORD_XT_OFFSET 29
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
pop %rbp ; \
|
||||
pop %rbx
|
||||
|
||||
#define QUOT_XT_OFFSET 13
|
||||
#define QUOT_XT_OFFSET 21
|
||||
#define PROFILING_OFFSET 53
|
||||
#define WORD_DEF_OFFSET 29
|
||||
#define WORD_XT_OFFSET 61
|
||||
|
|
|
|||
7
vm/jit.c
7
vm/jit.c
|
|
@ -34,10 +34,12 @@ bool jit_stack_frame_p(F_ARRAY *array)
|
|||
return false;
|
||||
}
|
||||
|
||||
FASTCALL void jit_compile(CELL tagged, F_STACK_FRAME *stack)
|
||||
FASTCALL CELL jit_compile(CELL tagged, F_STACK_FRAME *stack)
|
||||
{
|
||||
stack_chain->callstack_top = stack;
|
||||
|
||||
REGISTER_ROOT(tagged);
|
||||
|
||||
F_QUOTATION *quot = untag_quotation(tagged);
|
||||
F_ARRAY *array = untag_object(quot->array);
|
||||
|
||||
|
|
@ -154,6 +156,9 @@ FASTCALL void jit_compile(CELL tagged, F_STACK_FRAME *stack)
|
|||
UNREGISTER_UNTAGGED(quot);
|
||||
quot->xt = xt;
|
||||
quot->compiled = T;
|
||||
|
||||
UNREGISTER_ROOT(tagged);
|
||||
return tagged;
|
||||
}
|
||||
|
||||
XT quot_offset_to_pc(F_QUOTATION *quot, F_FIXNUM offset)
|
||||
|
|
|
|||
Loading…
Reference in New Issue