Skip to content

Commit 0fe7c79

Browse files
committed
Replace inline asm with function calls in __kuser_cmpxchg and __kuser_memory_barrier
1 parent 0633d73 commit 0fe7c79

File tree

1 file changed

+4
-15
lines changed

1 file changed

+4
-15
lines changed

src/arm_linux.rs

+4-15
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,12 @@ use core::mem;
44
// Kernel-provided user-mode helper functions:
55
// https://www.kernel.org/doc/Documentation/arm/kernel_user_helpers.txt
66
unsafe fn __kuser_cmpxchg(oldval: u32, newval: u32, ptr: *mut u32) -> bool {
7-
let out: u32;
8-
// FIXME: we can't use BLX on ARMv4
9-
asm!("blx ${0}"
10-
: "={r0}" (out)
11-
: "r" (0xffff0fc0u32)
12-
"{r0}" (oldval),
13-
"{r1}" (newval),
14-
"{r2}" (ptr)
15-
: "r3", "r12", "lr", "cc", "memory");
16-
out == 0
7+
let f: extern "C" fn (u32, u32, *mut u32) -> u32 = mem::transmute(0xffff0fc0u32);
8+
f(oldval, newval, ptr) == 0
179
}
1810
unsafe fn __kuser_memory_barrier() {
19-
// FIXME: we can't use BLX on ARMv4
20-
asm!("blx ${0}"
21-
:
22-
: "r" (0xffff0fa0u32)
23-
: "lr", "memory");
11+
let f: extern "C" fn () = mem::transmute(0xffff0fa0u32);
12+
f();
2413
}
2514

2615
// Word-align a pointer

0 commit comments

Comments
 (0)