]> git.lizzy.rs Git - rust.git/commitdiff
Force the allocator to be looked up from the perspective of the rustc binary
authorbjorn3 <17426603+bjorn3@users.noreply.github.com>
Mon, 6 Feb 2023 18:27:27 +0000 (19:27 +0100)
committerbjorn3 <17426603+bjorn3@users.noreply.github.com>
Tue, 7 Feb 2023 14:37:49 +0000 (15:37 +0100)
Fixes #1303

.github/workflows/main.yml
src/compiler_builtins.rs

index 9d67886ba8698b7920e3cd58aa884945c0be827f..9d3ed3ac5d0c38dc7d7d656c1821f9467448f699 100644 (file)
@@ -34,7 +34,7 @@ jobs:
       fail-fast: false
       matrix:
         include:
-          - os: ubuntu-20.04 # FIXME switch to ubuntu-22.04 once #1303 is fixed
+          - os: ubuntu-latest
             env:
               TARGET_TRIPLE: x86_64-unknown-linux-gnu
           - os: macos-latest
@@ -226,7 +226,8 @@ jobs:
       fail-fast: false
       matrix:
         include:
-          - os: ubuntu-20.04 # FIXME switch to ubuntu-22.04 once #1303 is fixed
+          # FIXME update at some point in the future once most distros use a newer glibc
+          - os: ubuntu-20.04
             env:
               TARGET_TRIPLE: x86_64-unknown-linux-gnu
           - os: macos-latest
index c6a247cf59eed11ac5e738af98db46567a9dd87a..8a53baa763a7debeddf78d5769708676bfed9e7c 100644 (file)
@@ -1,14 +1,33 @@
+#[cfg(all(unix, feature = "jit"))]
+use std::ffi::c_int;
+#[cfg(feature = "jit")]
+use std::ffi::c_void;
+
+// FIXME replace with core::ffi::c_size_t once stablized
+#[allow(non_camel_case_types)]
+#[cfg(feature = "jit")]
+type size_t = usize;
+
 macro_rules! builtin_functions {
-    ($register:ident; $(fn $name:ident($($arg_name:ident: $arg_ty:ty),*) -> $ret_ty:ty;)*) => {
+    (
+        $register:ident;
+        $(
+            $(#[$attr:meta])?
+            fn $name:ident($($arg_name:ident: $arg_ty:ty),*) -> $ret_ty:ty;
+        )*
+    ) => {
         #[cfg(feature = "jit")]
         #[allow(improper_ctypes)]
         extern "C" {
-            $(fn $name($($arg_name: $arg_ty),*) -> $ret_ty;)*
+            $(
+                $(#[$attr])?
+                fn $name($($arg_name: $arg_ty),*) -> $ret_ty;
+            )*
         }
 
         #[cfg(feature = "jit")]
         pub(crate) fn $register(builder: &mut cranelift_jit::JITBuilder) {
-            for (name, val) in [$((stringify!($name), $name as *const u8)),*] {
+            for (name, val) in [$($(#[$attr])? (stringify!($name), $name as *const u8)),*] {
                 builder.symbol(name, val);
             }
         }
@@ -40,4 +59,17 @@ pub(crate) fn $register(builder: &mut cranelift_jit::JITBuilder) {
     fn __fixdfti(f: f64) -> i128;
     fn __fixunssfti(f: f32) -> u128;
     fn __fixunsdfti(f: f64) -> u128;
+
+    // allocator
+    // NOTE: These need to be mentioned here despite not being part of compiler_builtins because
+    // newer glibc resolve dlsym("malloc") to libc.so despite the override in the rustc binary to
+    // use jemalloc. Libraries opened with dlopen still get the jemalloc version, causing multiple
+    // allocators to be mixed, resulting in a crash.
+    fn calloc(nobj: size_t, size: size_t) -> *mut c_void;
+    #[cfg(unix)]
+    fn posix_memalign(memptr: *mut *mut c_void, align: size_t, size: size_t) -> c_int;
+    fn malloc(size: size_t) -> *mut c_void;
+    fn realloc(p: *mut c_void, size: size_t) -> *mut c_void;
+    fn free(p: *mut c_void) -> ();
+
 }