mirror of https://github.com/rust-lang/rust.git
Unconditionally call really_init
This makes miri not diverge in behavior, it fixes running Rust linux-gnu binaries on musl with gcompat, it fixes dlopen edge-cases that cranelift somehow hits, etc.
This commit is contained in:
parent
61a1dbd751
commit
fa73ebb303
|
@ -98,12 +98,10 @@ mod imp {
|
|||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub unsafe fn init(_argc: isize, _argv: *const *const u8) {
|
||||
// On Linux-GNU, we rely on `ARGV_INIT_ARRAY` below to initialize
|
||||
// `ARGC` and `ARGV`. But in Miri that does not actually happen so we
|
||||
// still initialize here.
|
||||
#[cfg(any(miri, not(all(target_os = "linux", target_env = "gnu"))))]
|
||||
really_init(_argc, _argv);
|
||||
pub unsafe fn init(argc: isize, argv: *const *const u8) {
|
||||
// on GNU/Linux if we are main then we will init argv and argc twice, it "duplicates work"
|
||||
// BUT edge-cases are real: only using .init_array can break most emulators, dlopen, etc.
|
||||
really_init(argc, argv);
|
||||
}
|
||||
|
||||
/// glibc passes argc, argv, and envp to functions in .init_array, as a non-standard extension.
|
||||
|
|
Loading…
Reference in New Issue