diff options
| author | leo60228 <iakornfeld@gmail.com> | 2019-11-21 08:21:14 -0500 |
|---|---|---|
| committer | leo60228 <iakornfeld@gmail.com> | 2019-11-22 12:27:07 -0500 |
| commit | d8b6be9b1ffad1bff1eebe0905b60b35a234ebee (patch) | |
| tree | 2685c74a45ba4146446defb883acb00f14429e0b /src/libstd/sys | |
| parent | 9d6ff1553b7debbe5c99c102ce0978b6130592f8 (diff) | |
| download | rust-d8b6be9b1ffad1bff1eebe0905b60b35a234ebee.tar.gz rust-d8b6be9b1ffad1bff1eebe0905b60b35a234ebee.zip | |
Use .init_array section on glibc
Diffstat (limited to 'src/libstd/sys')
| -rw-r--r-- | src/libstd/sys/unix/args.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libstd/sys/unix/args.rs b/src/libstd/sys/unix/args.rs index 82ef35ea7b5..4dd331d3130 100644 --- a/src/libstd/sys/unix/args.rs +++ b/src/libstd/sys/unix/args.rs @@ -78,6 +78,26 @@ mod imp { ARGV = argv; } + #[cfg(all(target_os = "linux", target_env = "gnu"))] + #[used] + #[link_section = ".init_array"] + static ARGV_INIT_ARRAY: extern "C" fn( + crate::os::raw::c_int, + *const *const u8, + *const *const u8, + ) = { + extern "C" fn init_wrapper( + argc: crate::os::raw::c_int, + argv: *const *const u8, + _envp: *const *const u8, + ) { + unsafe { + init(argc as isize, argv); + } + } + init_wrapper + }; + pub unsafe fn cleanup() { let _guard = LOCK.lock(); ARGC = 0; |
