-
Notifications
You must be signed in to change notification settings - Fork 232
QEMU issues #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Yes, that looks like qemu-user is failing due to threads. There's not much you can do about it. One way to solve it would be to use qemu-system-arm instead and run the tests in a full VM (though you can probably get away with just the kernel and running the test with |
@Amanieu Thanks for taking a peek.
What I feared. 🙀
Sounds annoying. Know of any place where I can get an ARM kernel image? For the rootfs I think I can use one of ubuntu-core's.
Hmm, I'm not sure. The test binary is dynamically linked and depends on libc and other C libraries. |
This might be helpful. |
QEMU for these three targets appears to be flat out broken. Even this simple program causes a segfault when executed with QEMU for these targets: int main() { return 0; } This issue have been reported upstream but there has been no action. Also, someone claims that the 32-bit version of qemu-$TARGET doesn't segfault on amd64. Might try that. |
And, weirdly enough, it actually works! At least on MIPS. Will send a PR. |
Fixed the mips and ppc64 targets. The trick didn't work on the ppc64le target. |
Switching Travis to exclusively use Docker (Ubuntu 16.04) fixed the flakiness of the ARM targets. The ppc64le target still doesn't work (QEMU appears to be busted) but I'm OK with that; we got 16 of 17 targets working so I'm gonna close this. |
In order for GDB to correctly backtrace a stack overflow, it needs CFI information in __rust_probestack. This turns the following backtrace, ``` >> bt #0 0x0000555555576f73 in __rust_probestack () at /cargo/registry/src/github.com-1ecc6299db9ec823/compiler_builtins-0.1.14/src/probestack.rs:55 Backtrace stopped: Cannot access memory at address 0x7fffff7fedf0 ``` To this: ``` >>> bt #0 0x0000555555574e47 in __rust_probestack () rust-lang#1 0x00005555555595ba in test::main () rust-lang#2 0x00005555555594f3 in std::rt::lang_start::{{closure}} () rust-lang#3 0x0000555555561ae3 in std::panicking::try::do_call () rust-lang#4 0x000055555556595a in __rust_maybe_catch_panic () rust-lang#5 0x000055555555af9b in std::rt::lang_start_internal () rust-lang#6 0x00005555555594d5 in std::rt::lang_start () rust-lang#7 0x000055555555977b in main () ```
In order for GDB to correctly backtrace a stack overflow, it needs CFI information in __rust_probestack. This turns the following backtrace, ``` >> bt #0 0x0000555555576f73 in __rust_probestack () at /cargo/registry/src/github.com-1ecc6299db9ec823/compiler_builtins-0.1.14/src/probestack.rs:55 Backtrace stopped: Cannot access memory at address 0x7fffff7fedf0 ``` To this: ``` >>> bt #0 0x0000555555574e47 in __rust_probestack () rust-lang#1 0x00005555555595ba in test::main () rust-lang#2 0x00005555555594f3 in std::rt::lang_start::{{closure}} () rust-lang#3 0x0000555555561ae3 in std::panicking::try::do_call () rust-lang#4 0x000055555556595a in __rust_maybe_catch_panic () rust-lang#5 0x000055555555af9b in std::rt::lang_start_internal () rust-lang#6 0x00005555555594d5 in std::rt::lang_start () rust-lang#7 0x000055555555977b in main () ```
In order for GDB to correctly backtrace a stack overflow, it needs CFI information in __rust_probestack. This turns the following backtrace, ``` >> bt #0 0x0000555555576f73 in __rust_probestack () at /cargo/registry/src/github.com-1ecc6299db9ec823/compiler_builtins-0.1.14/src/probestack.rs:55 Backtrace stopped: Cannot access memory at address 0x7fffff7fedf0 ``` To this: ``` >>> bt #0 0x0000555555574e47 in __rust_probestack () rust-lang#1 0x00005555555595ba in test::main () rust-lang#2 0x00005555555594f3 in std::rt::lang_start::{{closure}} () rust-lang#3 0x0000555555561ae3 in std::panicking::try::do_call () rust-lang#4 0x000055555556595a in __rust_maybe_catch_panic () rust-lang#5 0x000055555555af9b in std::rt::lang_start_internal () rust-lang#6 0x00005555555594d5 in std::rt::lang_start () rust-lang#7 0x000055555555977b in main () ```
In order for GDB to correctly backtrace a stack overflow, it needs CFI information in __rust_probestack. This turns the following backtrace, ``` >> bt #0 0x0000555555576f73 in __rust_probestack () at /cargo/registry/src/github.com-1ecc6299db9ec823/compiler_builtins-0.1.14/src/probestack.rs:55 Backtrace stopped: Cannot access memory at address 0x7fffff7fedf0 ``` To this: ``` >>> bt #0 0x0000555555574e47 in __rust_probestack () rust-lang#1 0x00005555555595ba in test::main () rust-lang#2 0x00005555555594f3 in std::rt::lang_start::{{closure}} () rust-lang#3 0x0000555555561ae3 in std::panicking::try::do_call () rust-lang#4 0x000055555556595a in __rust_maybe_catch_panic () rust-lang#5 0x000055555555af9b in std::rt::lang_start_internal () rust-lang#6 0x00005555555594d5 in std::rt::lang_start () rust-lang#7 0x000055555555977b in main () ```
In order for GDB to correctly backtrace a stack overflow, it needs CFI information in __rust_probestack. This turns the following backtrace, ``` >> bt #0 0x0000555555576f73 in __rust_probestack () at /cargo/registry/src/github.com-1ecc6299db9ec823/compiler_builtins-0.1.14/src/probestack.rs:55 Backtrace stopped: Cannot access memory at address 0x7fffff7fedf0 ``` To this: ``` >>> bt #0 0x0000555555574e47 in __rust_probestack () rust-lang#1 0x00005555555595ba in test::main () rust-lang#2 0x00005555555594f3 in std::rt::lang_start::{{closure}} () rust-lang#3 0x0000555555561ae3 in std::panicking::try::do_call () rust-lang#4 0x000055555556595a in __rust_maybe_catch_panic () rust-lang#5 0x000055555555af9b in std::rt::lang_start_internal () rust-lang#6 0x00005555555594d5 in std::rt::lang_start () rust-lang#7 0x000055555555977b in main () ```
In order for GDB to correctly backtrace a stack overflow, it needs CFI information in __rust_probestack. This turns the following backtrace, ``` >> bt #0 0x0000555555576f73 in __rust_probestack () at /cargo/registry/src/github.com-1ecc6299db9ec823/compiler_builtins-0.1.14/src/probestack.rs:55 Backtrace stopped: Cannot access memory at address 0x7fffff7fedf0 ``` To this: ``` >>> bt #0 0x0000555555574e47 in __rust_probestack () rust-lang#1 0x00005555555595ba in test::main () rust-lang#2 0x00005555555594f3 in std::rt::lang_start::{{closure}} () rust-lang#3 0x0000555555561ae3 in std::panicking::try::do_call () rust-lang#4 0x000055555556595a in __rust_maybe_catch_panic () rust-lang#5 0x000055555555af9b in std::rt::lang_start_internal () rust-lang#6 0x00005555555594d5 in std::rt::lang_start () rust-lang#7 0x000055555555977b in main () ```
This turns the following backtrace, ``` >> bt #0 0x0000555555576f73 in __rust_probestack () at /cargo/registry/src/github.com-1ecc6299db9ec823/compiler_builtins-0.1.14/src/probestack.rs:55 Backtrace stopped: Cannot access memory at address 0x7fffff7fedf0 ``` To this: ``` >>> bt #0 0x0000555555574e47 in __rust_probestack () rust-lang#1 0x00005555555595ba in test::main () rust-lang#2 0x00005555555594f3 in std::rt::lang_start::{{closure}} () rust-lang#3 0x0000555555561ae3 in std::panicking::try::do_call () rust-lang#4 0x000055555556595a in __rust_maybe_catch_panic () rust-lang#5 0x000055555555af9b in std::rt::lang_start_internal () rust-lang#6 0x00005555555594d5 in std::rt::lang_start () rust-lang#7 0x000055555555977b in main () ```
This turns the following backtrace, ``` >> bt #0 0x0000555555576f73 in __rust_probestack () at /cargo/registry/src/github.com-1ecc6299db9ec823/compiler_builtins-0.1.14/src/probestack.rs:55 Backtrace stopped: Cannot access memory at address 0x7fffff7fedf0 ``` To this: ``` >>> bt #0 0x0000555555574e47 in __rust_probestack () rust-lang#1 0x00005555555595ba in test::main () rust-lang#2 0x00005555555594f3 in std::rt::lang_start::{{closure}} () rust-lang#3 0x0000555555561ae3 in std::panicking::try::do_call () rust-lang#4 0x000055555556595a in __rust_maybe_catch_panic () rust-lang#5 0x000055555555af9b in std::rt::lang_start_internal () rust-lang#6 0x00005555555594d5 in std::rt::lang_start () rust-lang#7 0x000055555555977b in main () ```
implement fmodf
Update
Trying to run the test suite on QEMU for some targets crashes QEMU
armv7-unknown-linux-gnueabihf
mips-unknown-linux-gnu
powerpc64-unknown-linux-gnu
powerpc64le-unknown-linux-gnu
I'm not quite sure what's the exact problem for each target but some possible causes:
std
binaries for the target are "broken". Most likely, some C binding inlibc
is wrong.qemu-ppc64le
).In some cases, using QEMU's system emulation instead of user emulation might fix the problem.
Example.
Emphasis on sometimes. This is weird because (a) as of e5ab308, the test suite is deterministic and (b) I'm using
RUST_TEST_THREADS=1
to "prevent" multithreading (QEMU is known to have problems handling multiple threads) but I guess this last part is impossible because detecting a panic requires at least two threads.The text was updated successfully, but these errors were encountered: