about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <17426603+bjorn3@users.noreply.github.com>2025-03-06 15:02:29 +0000
committerbjorn3 <17426603+bjorn3@users.noreply.github.com>2025-03-20 15:37:38 +0000
commit2133fb94b76bdf5b095e8b011a2df4e787afbbcd (patch)
tree0d6d8db0374bc93d633a41348fb40b894c3e6ff4
parent15fff5d2d28c78f6590582f857deaf72e21c1142 (diff)
downloadrust-2133fb94b76bdf5b095e8b011a2df4e787afbbcd.tar.gz
rust-2133fb94b76bdf5b095e8b011a2df4e787afbbcd.zip
Disable PIC when jitting
This fixes jitting on non-x86_64 targets.
-rw-r--r--build_system/tests.rs6
-rw-r--r--src/driver/aot.rs2
-rw-r--r--src/driver/jit.rs2
-rw-r--r--src/lib.rs4
4 files changed, 6 insertions, 8 deletions
diff --git a/build_system/tests.rs b/build_system/tests.rs
index 36e10872612..122b541fa35 100644
--- a/build_system/tests.rs
+++ b/build_system/tests.rs
@@ -325,10 +325,8 @@ impl<'a> TestRunner<'a> {
         target_compiler.rustflags.extend(rustflags_from_env("RUSTFLAGS"));
         target_compiler.rustdocflags.extend(rustflags_from_env("RUSTDOCFLAGS"));
 
-        let jit_supported = use_unstable_features
-            && is_native
-            && target_compiler.triple.contains("x86_64")
-            && !target_compiler.triple.contains("windows");
+        let jit_supported =
+            use_unstable_features && is_native && !target_compiler.triple.contains("windows");
 
         Self { is_native, jit_supported, skip_tests, dirs, target_compiler, stdlib_source }
     }
diff --git a/src/driver/aot.rs b/src/driver/aot.rs
index a52b18573b1..57c01f87b86 100644
--- a/src/driver/aot.rs
+++ b/src/driver/aot.rs
@@ -329,7 +329,7 @@ fn produce_final_output_artifacts(
 }
 
 fn make_module(sess: &Session, name: String) -> UnwindModule<ObjectModule> {
-    let isa = crate::build_isa(sess);
+    let isa = crate::build_isa(sess, false);
 
     let mut builder =
         ObjectBuilder::new(isa, name + ".o", cranelift_module::default_libcall_names()).unwrap();
diff --git a/src/driver/jit.rs b/src/driver/jit.rs
index 4a08937f4aa..41f8bb9161c 100644
--- a/src/driver/jit.rs
+++ b/src/driver/jit.rs
@@ -18,7 +18,7 @@ use crate::unwind_module::UnwindModule;
 fn create_jit_module(tcx: TyCtxt<'_>) -> (UnwindModule<JITModule>, CodegenCx) {
     let crate_info = CrateInfo::new(tcx, "dummy_target_cpu".to_string());
 
-    let isa = crate::build_isa(tcx.sess);
+    let isa = crate::build_isa(tcx.sess, true);
     let mut jit_builder = JITBuilder::with_isa(isa, cranelift_module::default_libcall_names());
     crate::compiler_builtins::register_functions_for_jit(&mut jit_builder);
     jit_builder.symbol_lookup_fn(dep_symbol_lookup_fn(tcx.sess, crate_info));
diff --git a/src/lib.rs b/src/lib.rs
index caaa06967ed..1e18c53b99c 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -250,13 +250,13 @@ fn target_triple(sess: &Session) -> target_lexicon::Triple {
     }
 }
 
-fn build_isa(sess: &Session) -> Arc<dyn TargetIsa + 'static> {
+fn build_isa(sess: &Session, jit: bool) -> Arc<dyn TargetIsa + 'static> {
     use target_lexicon::BinaryFormat;
 
     let target_triple = crate::target_triple(sess);
 
     let mut flags_builder = settings::builder();
-    flags_builder.enable("is_pic").unwrap();
+    flags_builder.set("is_pic", if jit { "false" } else { "true" }).unwrap();
     let enable_verifier = if enable_verifier(sess) { "true" } else { "false" };
     flags_builder.set("enable_verifier", enable_verifier).unwrap();
     flags_builder.set("regalloc_checker", enable_verifier).unwrap();