From 2133fb94b76bdf5b095e8b011a2df4e787afbbcd Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Thu, 6 Mar 2025 15:02:29 +0000 Subject: [PATCH] Disable PIC when jitting This fixes jitting on non-x86_64 targets. --- build_system/tests.rs | 6 ++---- src/driver/aot.rs | 2 +- src/driver/jit.rs | 2 +- src/lib.rs | 4 ++-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/build_system/tests.rs b/build_system/tests.rs index 36e108726121..122b541fa35f 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 a52b18573b15..57c01f87b86c 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 { - 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 4a08937f4aa9..41f8bb9161ca 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, 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 caaa06967ed8..1e18c53b99c5 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 { +fn build_isa(sess: &Session, jit: bool) -> Arc { 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();