about summary refs log tree commit diff
path: root/library/std/src/sys/unix
diff options
context:
space:
mode:
authorJosh Stone <jistone@redhat.com>2020-11-05 14:08:42 -0800
committerJosh Stone <jistone@redhat.com>2020-11-16 11:26:49 -0800
commita035626eb53e88956680398f5fda821ca0e6bd97 (patch)
treecb88a491320ca6ca848d0249215225553ae843ac /library/std/src/sys/unix
parent7a15f026f2666a16255904879028acdd5513c766 (diff)
downloadrust-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.rs2
-rw-r--r--library/std/src/sys/unix/weak.rs23
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
             }
         }
     )