diff options
| author | Josh Stone <jistone@redhat.com> | 2020-11-05 14:08:42 -0800 |
|---|---|---|
| committer | Josh Stone <jistone@redhat.com> | 2020-11-16 11:26:49 -0800 |
| commit | a035626eb53e88956680398f5fda821ca0e6bd97 (patch) | |
| tree | cb88a491320ca6ca848d0249215225553ae843ac /library/std/src/sys/unix | |
| parent | 7a15f026f2666a16255904879028acdd5513c766 (diff) | |
| download | rust-a035626eb53e88956680398f5fda821ca0e6bd97.tar.gz rust-a035626eb53e88956680398f5fda821ca0e6bd97.zip | |
Try weak symbols for all linux syscall! wrappers
Diffstat (limited to 'library/std/src/sys/unix')
| -rw-r--r-- | library/std/src/sys/unix/rand.rs | 2 | ||||
| -rw-r--r-- | library/std/src/sys/unix/weak.rs | 23 |
2 files changed, 8 insertions, 17 deletions
diff --git a/library/std/src/sys/unix/rand.rs b/library/std/src/sys/unix/rand.rs index b563011913c..38ddb41700c 100644 --- a/library/std/src/sys/unix/rand.rs +++ b/library/std/src/sys/unix/rand.rs @@ -29,7 +29,7 @@ mod imp { // A weak symbol allows interposition, e.g. for perf measurements that want to // disable randomness for consistency. Otherwise, we'll try a raw syscall. // (`getrandom` was added in glibc 2.25, musl 1.1.20, android API level 28) - weak_syscall! { + syscall! { fn getrandom( buffer: *mut libc::c_void, length: libc::size_t, diff --git a/library/std/src/sys/unix/weak.rs b/library/std/src/sys/unix/weak.rs index 3aa43858b92..6251c314730 100644 --- a/library/std/src/sys/unix/weak.rs +++ b/library/std/src/sys/unix/weak.rs @@ -92,26 +92,17 @@ macro_rules! syscall { // (not paths). use libc::*; - syscall( - concat_idents!(SYS_, $name), - $($arg_name as c_long),* - ) as $ret - } - ) -} - -/// Use a weak symbol from libc when possible, allowing `LD_PRELOAD` interposition, -/// but if it's not found just use a raw syscall. -#[cfg(any(target_os = "linux", target_os = "android"))] -macro_rules! weak_syscall { - (fn $name:ident($($arg_name:ident: $t:ty),*) -> $ret:ty) => ( - unsafe fn $name($($arg_name:$t),*) -> $ret { weak! { fn $name($($t),*) -> $ret } + + // Use a weak symbol from libc when possible, allowing `LD_PRELOAD` + // interposition, but if it's not found just use a raw syscall. if let Some(fun) = $name.get() { fun($($arg_name),*) } else { - syscall! { fn $name($($arg_name:$t),*) -> $ret } - $name($($arg_name),*) + syscall( + concat_idents!(SYS_, $name), + $($arg_name as c_long),* + ) as $ret } } ) |
