Merge pull request #18981 from Fabian-Gruenbichler/proc-macro-srv-portability

proc-macro-srv: make usage of RTLD_DEEPBIND portable
This commit is contained in:
Laurențiu Nicola 2025-01-20 09:35:11 +00:00 committed by GitHub
commit 46e2d6ec01
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 10 additions and 3 deletions

1
Cargo.lock generated
View file

@ -1377,6 +1377,7 @@ version = "0.0.0"
dependencies = [
"expect-test",
"intern",
"libc",
"libloading",
"memmap2",
"object 0.33.0",

View file

@ -14,6 +14,7 @@ doctest = false
[dependencies]
object.workspace = true
libc.workspace = true
libloading.workspace = true
memmap2.workspace = true

View file

@ -28,11 +28,16 @@ fn load_library(file: &Utf8Path) -> Result<Library, libloading::Error> {
#[cfg(unix)]
fn load_library(file: &Utf8Path) -> Result<Library, libloading::Error> {
// not defined by POSIX, different values on mips vs other targets
#[cfg(target_env = "gnu")]
use libc::RTLD_DEEPBIND;
use libloading::os::unix::Library as UnixLibrary;
use std::os::raw::c_int;
// defined by POSIX
use libloading::os::unix::RTLD_NOW;
const RTLD_NOW: c_int = 0x00002;
const RTLD_DEEPBIND: c_int = 0x00008;
// MUSL and bionic don't have it..
#[cfg(not(target_env = "gnu"))]
const RTLD_DEEPBIND: std::os::raw::c_int = 0x0;
unsafe { UnixLibrary::open(Some(file), RTLD_NOW | RTLD_DEEPBIND).map(|lib| lib.into()) }
}