mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-28 02:29:44 +00:00
proc-macro-srv: make usage of RTLD_DEEPBIND portable
the constant is wrong on some platforms (e.g., on mips64el it's 0x10, and 0x8 is RTLD_NOLOAD which makes all this functionality broken), the libc crate takes care of those differences for us. fallback to not setting the flag in non-glibc environments - some of them might have support for it using a different value that we don't know about, and some of them lack it entirely. Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
This commit is contained in:
parent
248bd511ae
commit
73fc468a8f
3 changed files with 10 additions and 3 deletions
|
|
@ -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()) }
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue