File tree Expand file tree Collapse file tree 1 file changed +18
-0
lines changed Expand file tree Collapse file tree 1 file changed +18
-0
lines changed Original file line number Diff line number Diff line change @@ -2483,6 +2483,24 @@ impl Build {
2483
2483
}
2484
2484
}
2485
2485
2486
+ if target. os == "solaris" || target. os == "illumos" {
2487
+ // On Solaris and illumos, multi-threaded C programs must be built with `_REENTRANT`
2488
+ // defined. This configures headers to define APIs appropriately for multi-threaded
2489
+ // use. This is documented in threads(7), see also https://illumos.org/man/7/threads.
2490
+ //
2491
+ // If C code is compiled without multi-threading support but does use multiple threads,
2492
+ // incorrect behavior may result. One extreme example is that on some systems the
2493
+ // global errno may be at the same address as the process' first thread's errno; errno
2494
+ // clobbering may occur to disastrous effect. Conversely, if _REENTRANT is defined
2495
+ // while it is not actually needed, system headers may define some APIs suboptimally
2496
+ // but will not result in incorrect behavior. Other code *should* be reasonable under
2497
+ // such conditions.
2498
+ //
2499
+ // We're typically building C code to eventually link into a Rust program. Many Rust
2500
+ // programs are multi-threaded in some form. So, set the flag by default.
2501
+ cmd. args . push ( "-D_REENTRANT" . into ( ) ) ;
2502
+ }
2503
+
2486
2504
if target. vendor == "apple" {
2487
2505
self . apple_flags ( cmd) ?;
2488
2506
}
You can’t perform that action at this time.
0 commit comments