about summary refs log tree commit diff
path: root/src/rustllvm/RustWrapper.cpp
diff options
context:
space:
mode:
authorJames Munns <james.munns@gmail.com>2017-10-02 15:42:08 +0200
committerJames Munns <james.munns@gmail.com>2017-10-02 16:53:43 +0200
commit1e26094bdd18c704e1c060e2cf7d2b9bfec037ed (patch)
treecb0df96596ca2760fc3ec4852326631dd275718c /src/rustllvm/RustWrapper.cpp
parent9ae6ed78acf9dc865e2300a7db556389eed9692d (diff)
downloadrust-1e26094bdd18c704e1c060e2cf7d2b9bfec037ed.tar.gz
rust-1e26094bdd18c704e1c060e2cf7d2b9bfec037ed.zip
Allow atomic operations up to 32 bits
The ARMv5te platform does not have instruction-level support for atomics, however the kernel provides [user space helpers](https://www.kernel.org/doc/Documentation/arm/kernel_user_helpers.txt) which can be used to perform atomic operations. When linked with `libc`, the atomic symbols needed by Rust will be provided, rather than CPU level intrinsics.

As this target is specifically `linux` and `gnueabi`, it is reasonable to assume the Linux Kernel and libc will be available for the target. There is a large performance penalty, as we are not using CPU level intrinsics, however this penalty is likely preferable to not having the target at all.

I have used this change in a custom target (along with `xargo`) to build `std`, as well as a number of higher level crates.
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions