Force the allocator to be looked up from the perspective of the rustc binary
Fixes #1303
This commit is contained in:
parent
8494882773
commit
7d53619064
5
.github/workflows/main.yml
vendored
5
.github/workflows/main.yml
vendored
@ -34,7 +34,7 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: ubuntu-20.04 # FIXME switch to ubuntu-22.04 once #1303 is fixed
|
- os: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
TARGET_TRIPLE: x86_64-unknown-linux-gnu
|
TARGET_TRIPLE: x86_64-unknown-linux-gnu
|
||||||
- os: macos-latest
|
- os: macos-latest
|
||||||
@ -226,7 +226,8 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
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:
|
env:
|
||||||
TARGET_TRIPLE: x86_64-unknown-linux-gnu
|
TARGET_TRIPLE: x86_64-unknown-linux-gnu
|
||||||
- os: macos-latest
|
- os: macos-latest
|
||||||
|
@ -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 {
|
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")]
|
#[cfg(feature = "jit")]
|
||||||
#[allow(improper_ctypes)]
|
#[allow(improper_ctypes)]
|
||||||
extern "C" {
|
extern "C" {
|
||||||
$(fn $name($($arg_name: $arg_ty),*) -> $ret_ty;)*
|
$(
|
||||||
|
$(#[$attr])?
|
||||||
|
fn $name($($arg_name: $arg_ty),*) -> $ret_ty;
|
||||||
|
)*
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "jit")]
|
#[cfg(feature = "jit")]
|
||||||
pub(crate) fn $register(builder: &mut cranelift_jit::JITBuilder) {
|
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);
|
builder.symbol(name, val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -40,4 +59,17 @@ pub(crate) fn $register(builder: &mut cranelift_jit::JITBuilder) {
|
|||||||
fn __fixdfti(f: f64) -> i128;
|
fn __fixdfti(f: f64) -> i128;
|
||||||
fn __fixunssfti(f: f32) -> u128;
|
fn __fixunssfti(f: f32) -> u128;
|
||||||
fn __fixunsdfti(f: f64) -> 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) -> ();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user