rust/library/std/src
bors 0e63af5da3 Auto merge of #81478 - sivadeilra:windows_dll_imports, r=m-ou-se
Resolve DLL imports at CRT startup, not on demand

On Windows, libstd uses GetProcAddress to locate some DLL imports, so
that libstd can run on older versions of Windows. If a given DLL import
is not present, then libstd uses other behavior (such as fallback
implementations).

This commit uses a feature of the Windows CRT to do these DLL imports
during module initialization, before main() (or DllMain()) is called.
This is the ideal time to resolve imports, because the module is
effectively single-threaded at that point; no other threads can
touch the data or code of the module that is being initialized.

This avoids several problems. First, it makes the cost of performing
the DLL import lookups deterministic. Right now, the DLL imports are
done on demand, which means that application threads _might_ have to
do the DLL import during some time-sensitive operation. This is a
small source of unpredictability. Since threads can race, it's even
possible to have more than one thread running the same redundant
DLL lookup.

This commit also removes using the heap to allocate strings, during
the DLL lookups.
2021-01-31 10:01:15 +00:00
..
backtrace use Once instead of Mutex to manage capture resolution 2021-01-06 10:44:06 +10:00
collections Replace predecessor with range in collections documentation 2021-01-30 14:24:06 +01:00
env std: move "mod tests/benches" to separate files 2020-08-31 02:56:59 +00:00
error std: move "mod tests/benches" to separate files 2020-08-31 02:56:59 +00:00
f32 std: move "mod tests/benches" to separate files 2020-08-31 02:56:59 +00:00
f64 std: move "mod tests/benches" to separate files 2020-08-31 02:56:59 +00:00
ffi shrink_to shouldn't panic on len greater than capacity 2021-01-26 19:25:37 +01:00
fs std: Fix test got_symlink_permission on Windows 2020-11-16 21:09:26 +03:00
io Rollup merge of #78044 - oberien:empty-seek, r=m-ou-se 2021-01-31 01:47:18 +01:00
lazy std: move "mod tests/benches" to separate files 2020-08-31 02:56:59 +00:00
memchr std: move "mod tests/benches" to separate files 2020-08-31 02:56:59 +00:00
net Dont prefix 0x when dbg!(ipv6) 2021-01-20 04:31:34 +00:00
num rustc_expand: Mark inner #![test] attributes as soft-unstable 2020-11-20 19:35:03 +03:00
os Take sys/vxworks/{fd,fs,io} from sys/unix instead. 2020-10-16 06:19:00 +02:00
panic review: fix nits and move panic safety tests to the correct place 2020-09-25 23:10:24 +02:00
path Refactor parse_prefix on Windows 2020-11-07 16:15:48 +01:00
prelude Rollup merge of #80172 - camelid:prelude-docs-consistent-punct, r=steveklabnik 2021-01-21 20:04:39 +09:00
process std: move "mod tests/benches" to separate files 2020-08-31 02:56:59 +00:00
sync Fix documentation typo 2020-12-22 12:19:46 +01:00
sys Resolve DLL imports at CRT startup, not on demand 2021-01-29 10:41:49 -08:00
sys_common Optimize away some path lookups in the generic fs::copy implementation. 2021-01-06 08:36:31 -08:00
thread Recommend panic::resume_unwind instead of panicking. 2020-12-18 17:03:45 -05:00
time Duration::zero() -> Duration::ZERO 2020-10-21 20:44:03 -07:00
alloc.rs Fix safety comment 2021-01-07 09:13:21 +01:00
ascii.rs Convert many files to intra-doc links 2020-09-02 17:37:40 -04:00
backtrace.rs use Once instead of Mutex to manage capture resolution 2021-01-06 10:44:06 +10:00
env.rs Document security implications of std::env::temp_dir 2021-01-20 11:24:47 -08:00
error.rs Rollup merge of #75180 - KodrAus:feat/error-by-ref, r=m-ou-se 2021-01-24 22:09:45 +01:00
f32.rs Deprecate-in-future the constants superceded by RFC 2700 2021-01-20 20:08:11 -05:00
f64.rs Deprecate-in-future the constants superceded by RFC 2700 2021-01-20 20:08:11 -05:00
fs.rs Drop support for cloudabi targets 2020-11-22 17:11:41 -05:00
keyword_docs.rs Update code to account for extern ABI requirement 2021-01-13 07:49:45 -05:00
lazy.rs Add (internal-only) SyncOnceCell::get_or_init_pin. 2020-12-08 22:57:50 +01:00
lib.rs Rollup merge of #80886 - RalfJung:stable-raw-ref-macros, r=m-ou-se 2021-01-30 13:36:43 +09:00
macros.rs Document why cannot use concat! in dbg! 2021-01-21 10:50:21 +00:00
memchr.rs std: move "mod tests/benches" to separate files 2020-08-31 02:56:59 +00:00
num.rs std: move "mod tests/benches" to separate files 2020-08-31 02:56:59 +00:00
panic.rs Rollup merge of #79023 - yoshuawuyts:stream, r=KodrAus 2021-01-30 13:36:39 +09:00
panicking.rs fix another comment, and make __rust_start_panic code a bit more semantically clear 2020-12-25 23:37:27 +01:00
path.rs Inline methods of Path and OsString 2021-01-22 18:46:00 +01:00
primitive_docs.rs Auto merge of #80590 - camelid:bool-never-docs, r=nagisa 2021-01-03 12:21:12 +00:00
process.rs Auto merge of #78439 - lzutao:rm-clouldabi, r=Mark-Simulacrum 2020-11-23 19:01:19 +00:00
rt.rs Prevent __rust_begin_short_backtrace frames from being tail-call optimised away 2020-08-07 19:31:25 +01:00
time.rs Drop support for cloudabi targets 2020-11-22 17:11:41 -05:00