Make sure we can still compile with the JIT disabled

If `--disable-jit-support` is passed to configure, then `jit_func` is
removed from the iseq body and we can't compile YJIT.  This commit
detects when the JIT function pointer is gone and disables YJIT in that
case.
This commit is contained in:
Aaron Patterson 2021-07-15 15:43:39 -07:00 коммит произвёл Alan Wu
Родитель 41f405c486
Коммит e8617d0e7e
3 изменённых файлов: 10 добавлений и 3 удалений

2
yjit.h
Просмотреть файл

@ -14,6 +14,8 @@
#define PLATFORM_SUPPORTED_P 1
#endif
#define JIT_ENABLED USE_MJIT
#ifndef YJIT_CHECK_MODE
#define YJIT_CHECK_MODE 0
#endif

Просмотреть файл

@ -945,7 +945,10 @@ invalidate_block_version(block_t* block)
// Clear out the JIT func so that we can recompile later and so the
// interpreter will run the iseq
#if JIT_ENABLED
iseq->body->jit_func = 0;
#endif
// TODO:
// May want to recompile a new entry point (for interpreter entry blocks)

Просмотреть файл

@ -453,8 +453,8 @@ typedef VALUE (*yjit_func_t)(rb_execution_context_t *, rb_control_frame_t *);
bool
rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec)
{
#if (OPT_DIRECT_THREADED_CODE || OPT_CALL_THREADED_CODE) && JIT_ENABLED
bool success = true;
#if OPT_DIRECT_THREADED_CODE || OPT_CALL_THREADED_CODE
RB_VM_LOCK_ENTER();
// TODO: I think we need to stop all other ractors here
@ -471,8 +471,10 @@ rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec)
}
RB_VM_LOCK_LEAVE();
#endif
return success;
#else
return false;
#endif
}
struct yjit_block_itr {
@ -1004,7 +1006,7 @@ outgoing_ids(VALUE self)
void
rb_yjit_init(struct rb_yjit_options *options)
{
if (!PLATFORM_SUPPORTED_P) {
if (!PLATFORM_SUPPORTED_P || !JIT_ENABLED) {
return;
}