about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-10-19 08:26:55 +0000
committerbors <bors@rust-lang.org>2022-10-19 08:26:55 +0000
commit5605ed85363345f3def5da6b1ead2ac0b803bfe7 (patch)
treef7b44b99a3feb7715f1531ab2cca7cf3534ab487 /src
parent84365fff0a99fbf6deab383bd9a8152202b6779b (diff)
parent77bf2b9694952dab8e7d7e8c0bfcb05ee74239c3 (diff)
downloadrust-5605ed85363345f3def5da6b1ead2ac0b803bfe7.tar.gz
rust-5605ed85363345f3def5da6b1ead2ac0b803bfe7.zip
Auto merge of #103180 - ferrocene:pa-qemu-user-mode, r=Mark-Simulacrum
Handle core dumps output in QEMU user mode

In addition to the whole-system emulation/virtualization, QEMU also supports user-mode emulation, where the emulation happens as a normal process inside the parent system. This allows running most tests by simply spawning remote-test-server inside user-mode emulation.

Unfortunately, QEMU always writes its own message in addition to the system one when a core dump happens, which breaks a few tests which match on the exact output of the system.

This PR changes those tests to strip the (possible) QEMU output before checking if the output is expected.
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/alloc-error/default-alloc-error-hook.rs11
-rw-r--r--src/test/ui/runtime/rt-explody-panic-payloads.rs11
2 files changed, 18 insertions, 4 deletions
diff --git a/src/test/ui/alloc-error/default-alloc-error-hook.rs b/src/test/ui/alloc-error/default-alloc-error-hook.rs
index 100e974977c..8be09500f4e 100644
--- a/src/test/ui/alloc-error/default-alloc-error-hook.rs
+++ b/src/test/ui/alloc-error/default-alloc-error-hook.rs
@@ -15,5 +15,14 @@ fn main() {
     let me = env::current_exe().unwrap();
     let output = Command::new(&me).arg("next").output().unwrap();
     assert!(!output.status.success(), "{:?} is a success", output.status);
-    assert_eq!(str::from_utf8(&output.stderr).unwrap(), "memory allocation of 42 bytes failed\n");
+
+    let mut stderr = str::from_utf8(&output.stderr).unwrap();
+
+    // When running inside QEMU user-mode emulation, there will be an extra message printed by QEMU
+    // in the stderr whenever a core dump happens. Remove it before the check.
+    stderr = stderr
+        .strip_suffix("qemu: uncaught target signal 6 (Aborted) - core dumped\n")
+        .unwrap_or(stderr);
+
+    assert_eq!(stderr, "memory allocation of 42 bytes failed\n");
 }
diff --git a/src/test/ui/runtime/rt-explody-panic-payloads.rs b/src/test/ui/runtime/rt-explody-panic-payloads.rs
index e2221e5df8e..755d3df42de 100644
--- a/src/test/ui/runtime/rt-explody-panic-payloads.rs
+++ b/src/test/ui/runtime/rt-explody-panic-payloads.rs
@@ -22,7 +22,12 @@ fn main() {
     }.expect("running the command should have succeeded");
     println!("{:#?}", output);
     let stderr = std::str::from_utf8(&output.stderr);
-    assert!(stderr.map(|v| {
-        v.ends_with("fatal runtime error: drop of the panic payload panicked\n")
-    }).unwrap_or(false));
+    assert!(stderr
+        .map(|v| {
+            // When running inside QEMU user-mode emulation, there will be an extra message printed
+            // by QEMU in the stderr whenever a core dump happens. Remove it before the check.
+            v.strip_suffix("qemu: uncaught target signal 6 (Aborted) - core dumped\n").unwrap_or(v)
+        })
+        .map(|v| { v.ends_with("fatal runtime error: drop of the panic payload panicked\n") })
+        .unwrap_or(false));
 }