Auto merge of #3554 - RalfJung:freebsd, r=RalfJung
document unofficially supported OSes Also tweak the freeBSD testing a bit.
This commit is contained in:
commit
3a6faee1e2
@ -224,8 +224,11 @@ degree documented below):
|
|||||||
- `s390x-unknown-linux-gnu` is supported as our "big-endian target of choice".
|
- `s390x-unknown-linux-gnu` is supported as our "big-endian target of choice".
|
||||||
- For every other target with OS `linux`, `macos`, or `windows`, Miri should generally work, but we
|
- For every other target with OS `linux`, `macos`, or `windows`, Miri should generally work, but we
|
||||||
make no promises and we don't run tests for such targets.
|
make no promises and we don't run tests for such targets.
|
||||||
- For targets on other operating systems, even basic operations such as printing to the standard
|
- We have unofficial support (not maintained by the Miri team itself) for some further operating systems.
|
||||||
output might not work, and Miri might fail before even reaching the `main` function.
|
- `freebsd`: **maintainer wanted**. Supports `std::env` and parts of `std::{thread, fs}`, but not `std::sync`.
|
||||||
|
- `android`: **maintainer wanted**. Support very incomplete, but a basic "hello world" works.
|
||||||
|
- `wasm`: **maintainer wanted**. Support very incomplete, not even standard output works, but an empty `main` function works.
|
||||||
|
- For targets on other operating systems, Miri might fail before even reaching the `main` function.
|
||||||
|
|
||||||
However, even for targets that we do support, the degree of support for accessing platform APIs
|
However, even for targets that we do support, the degree of support for accessing platform APIs
|
||||||
(such as the file system) differs between targets: generally, Linux targets have the best support,
|
(such as the file system) differs between targets: generally, Linux targets have the best support,
|
||||||
|
@ -141,11 +141,13 @@ case $HOST_TARGET in
|
|||||||
MIRI_TEST_TARGET=arm-unknown-linux-gnueabi run_tests
|
MIRI_TEST_TARGET=arm-unknown-linux-gnueabi run_tests
|
||||||
MIRI_TEST_TARGET=s390x-unknown-linux-gnu run_tests # big-endian architecture of choice
|
MIRI_TEST_TARGET=s390x-unknown-linux-gnu run_tests # big-endian architecture of choice
|
||||||
# Partially supported targets (tier 2)
|
# Partially supported targets (tier 2)
|
||||||
MIRI_TEST_TARGET=x86_64-unknown-freebsd run_tests_minimal hello integer vec panic/panic concurrency/simple pthread-threadname libc-getentropy libc-getrandom libc-misc libc-fs atomic env align num_cpus
|
VERY_BASIC="integer vec string btreemap" # common things we test on all of them (if they have std), requires no target-specific shims
|
||||||
MIRI_TEST_TARGET=i686-unknown-freebsd run_tests_minimal hello integer vec panic/panic concurrency/simple pthread-threadname libc-getentropy libc-getrandom libc-misc libc-fs atomic env align num_cpus
|
BASIC="$VERY_BASIC hello hashmap alloc align" # ensures we have the shims for stdout and basic data structures
|
||||||
MIRI_TEST_TARGET=aarch64-linux-android run_tests_minimal hello integer vec panic/panic
|
MIRI_TEST_TARGET=x86_64-unknown-freebsd run_tests_minimal $BASIC panic/panic concurrency/simple atomic threadname libc-getentropy libc-getrandom libc-misc fs env num_cpus
|
||||||
MIRI_TEST_TARGET=wasm32-wasi run_tests_minimal no_std integer strings wasm
|
MIRI_TEST_TARGET=i686-unknown-freebsd run_tests_minimal $BASIC panic/panic concurrency/simple atomic threadname libc-getentropy libc-getrandom libc-misc fs env num_cpus
|
||||||
MIRI_TEST_TARGET=wasm32-unknown-unknown run_tests_minimal no_std integer strings wasm
|
MIRI_TEST_TARGET=aarch64-linux-android run_tests_minimal $VERY_BASIC hello panic/panic
|
||||||
|
MIRI_TEST_TARGET=wasm32-wasi run_tests_minimal $VERY_BASIC wasm
|
||||||
|
MIRI_TEST_TARGET=wasm32-unknown-unknown run_tests_minimal $VERY_BASIC wasm
|
||||||
MIRI_TEST_TARGET=thumbv7em-none-eabihf run_tests_minimal no_std
|
MIRI_TEST_TARGET=thumbv7em-none-eabihf run_tests_minimal no_std
|
||||||
# Custom target JSON file
|
# Custom target JSON file
|
||||||
MIRI_TEST_TARGET=tests/avr.json MIRI_NO_STD=1 run_tests_minimal no_std
|
MIRI_TEST_TARGET=tests/avr.json MIRI_NO_STD=1 run_tests_minimal no_std
|
||||||
|
@ -47,21 +47,6 @@ fn emulate_foreign_item_inner(
|
|||||||
this.read_scalar(len)?,
|
this.read_scalar(len)?,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
"getrandom" => {
|
|
||||||
let [ptr, len, flags] =
|
|
||||||
this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
|
|
||||||
let ptr = this.read_pointer(ptr)?;
|
|
||||||
let len = this.read_target_usize(len)?;
|
|
||||||
let _flags = this.read_scalar(flags)?.to_i32()?;
|
|
||||||
// flags on freebsd does not really matter
|
|
||||||
// in practice, GRND_RANDOM does not particularly draw from /dev/random
|
|
||||||
// since it is the same as to /dev/urandom.
|
|
||||||
// GRND_INSECURE is only an alias of GRND_NONBLOCK, which
|
|
||||||
// does not affect the RNG.
|
|
||||||
// https://man.freebsd.org/cgi/man.cgi?query=getrandom&sektion=2&n=1
|
|
||||||
this.gen_random(ptr, len)?;
|
|
||||||
this.write_scalar(Scalar::from_target_usize(len, this), dest)?;
|
|
||||||
}
|
|
||||||
|
|
||||||
// File related shims
|
// File related shims
|
||||||
// For those, we both intercept `func` and `call@FBSD_1.0` symbols cases
|
// For those, we both intercept `func` and `call@FBSD_1.0` symbols cases
|
||||||
@ -90,7 +75,22 @@ fn emulate_foreign_item_inner(
|
|||||||
this.write_scalar(result, dest)?;
|
this.write_scalar(result, dest)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// errno
|
// Miscellaneous
|
||||||
|
"getrandom" => {
|
||||||
|
let [ptr, len, flags] =
|
||||||
|
this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
|
||||||
|
let ptr = this.read_pointer(ptr)?;
|
||||||
|
let len = this.read_target_usize(len)?;
|
||||||
|
let _flags = this.read_scalar(flags)?.to_i32()?;
|
||||||
|
// flags on freebsd does not really matter
|
||||||
|
// in practice, GRND_RANDOM does not particularly draw from /dev/random
|
||||||
|
// since it is the same as to /dev/urandom.
|
||||||
|
// GRND_INSECURE is only an alias of GRND_NONBLOCK, which
|
||||||
|
// does not affect the RNG.
|
||||||
|
// https://man.freebsd.org/cgi/man.cgi?query=getrandom&sektion=2&n=1
|
||||||
|
this.gen_random(ptr, len)?;
|
||||||
|
this.write_scalar(Scalar::from_target_usize(len, this), dest)?;
|
||||||
|
}
|
||||||
"__error" => {
|
"__error" => {
|
||||||
let [] = this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
|
let [] = this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
|
||||||
let errno_place = this.last_error_place()?;
|
let errno_place = this.last_error_place()?;
|
||||||
|
@ -62,7 +62,10 @@ fn test_from_utf8() {
|
|||||||
const N: usize = 10;
|
const N: usize = 10;
|
||||||
let vec = vec![0x4141414141414141u64; N];
|
let vec = vec![0x4141414141414141u64; N];
|
||||||
let content = unsafe { std::slice::from_raw_parts(vec.as_ptr() as *const u8, 8 * N) };
|
let content = unsafe { std::slice::from_raw_parts(vec.as_ptr() as *const u8, 8 * N) };
|
||||||
println!("{:?}", std::str::from_utf8(content).unwrap());
|
assert_eq!(
|
||||||
|
std::str::from_utf8(content).unwrap(),
|
||||||
|
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_u64_array() {
|
fn test_u64_array() {
|
||||||
|
@ -1 +0,0 @@
|
|||||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
|
|
@ -31,8 +31,8 @@ fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Regression test for Debug impl's
|
// Regression test for Debug impl's
|
||||||
println!("{:?} {:?}", dst, dst.iter());
|
format!("{:?} {:?}", dst, dst.iter());
|
||||||
println!("{:?}", VecDeque::<u32>::new().iter());
|
format!("{:?}", VecDeque::<u32>::new().iter());
|
||||||
|
|
||||||
for a in dst {
|
for a in dst {
|
||||||
assert_eq!(*a, 2);
|
assert_eq!(*a, 2);
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
[2, 2] Iter([2, 2], [])
|
|
||||||
Iter([], [])
|
|
@ -1,2 +0,0 @@
|
|||||||
[2, 2] Iter([2, 2], [])
|
|
||||||
Iter([], [])
|
|
@ -1,2 +0,0 @@
|
|||||||
[2, 2] Iter([2, 2], [])
|
|
||||||
Iter([], [])
|
|
Loading…
Reference in New Issue
Block a user