summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Patterson <[email protected]>2021-07-15 15:43:39 -0700
committerAlan Wu <[email protected]>2021-10-20 18:19:38 -0400
commite8617d0e7ea8039f3757896f547107f51566256b (patch)
tree0ce51bfb188c7687c3d8c5cb69236c4efefec450
parent41f405c486a01c1a16c3f102c11d41c8fbbafe60 (diff)
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.
-rw-r--r--yjit.h2
-rw-r--r--yjit_core.c3
-rw-r--r--yjit_iface.c8
3 files changed, 10 insertions, 3 deletions
diff --git a/yjit.h b/yjit.h
index 0e7a7b6c9b..5d27d4f4a7 100644
--- a/yjit.h
+++ b/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
diff --git a/yjit_core.c b/yjit_core.c
index 8af35258b2..6e1659ca23 100644
--- a/yjit_core.c
+++ b/yjit_core.c
@@ -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)
diff --git a/yjit_iface.c b/yjit_iface.c
index 0985dd8d53..b6283a26f8 100644
--- a/yjit_iface.c
+++ b/yjit_iface.c
@@ -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;
}