On 7/9/2026 9:12 AM, Alex Bennée wrote: > Pierrick Bouvier <[email protected]> writes: > >> On 7/9/2026 8:03 AM, Pierrick Bouvier wrote: >>> On 7/9/2026 7:52 AM, Alex Bennée wrote: >>>> Pierrick Bouvier <[email protected]> writes: >>>> >>>>> Runs a record and replay test, and make sure the output produced by >>>>> both runs is the same. >>>>> >>>>> Signed-off-by: Pierrick Bouvier <[email protected]> >>>>> --- >>>>> tests/tcg/meson.build | 1 + >>>>> tests/tcg/scripts/record_replay.sh | 16 ++++++++++++++++ >>>>> 2 files changed, 17 insertions(+) >>>>> create mode 100755 tests/tcg/scripts/record_replay.sh >>>>> >>>>> diff --git a/tests/tcg/meson.build b/tests/tcg/meson.build >>>>> index 30178df0f7a..e610ce30f40 100644 >>>>> --- a/tests/tcg/meson.build >>>>> +++ b/tests/tcg/meson.build >>>>> @@ -7,6 +7,7 @@ if config_host.has_key('GDB') >>>>> endif >>>>> gdb = find_program(gdb_progs, required: false) >>>>> prog_gdb_test = find_program('../guest-debug/run-test.py') >>>>> +prog_record_replay = find_program('./scripts/record_replay.sh') >>>>> prog_run_and_diff = find_program('./scripts/run_and_diff.sh') >>>>> prog_run_with_input = find_program('./scripts/run_with_input.sh') >>>>> prog_run_and_check_forbidden_output = find_program( >>>>> diff --git a/tests/tcg/scripts/record_replay.sh >>>>> b/tests/tcg/scripts/record_replay.sh >>>>> new file mode 100755 >>>>> index 00000000000..57775a2d4c1 >>>>> --- /dev/null >>>>> +++ b/tests/tcg/scripts/record_replay.sh >>>>> @@ -0,0 +1,16 @@ >>>>> +#!/usr/bin/env bash >>>> >>>> While at it is there any reason this couldn't be plain POSIX shell. I >>>> don't think we explicitly require bash although its super likely to be >>>> on most systems. configure is all POSIX shell. >>>> >>> >>> The main reason for me to use bash is that it supports set -uo pipefail >>> in combination with set -e. >>> >>> Which produces: >>> - exit if a variable is undefined >>> - exit if any command in a pipe sequence fails >>> Without this, script shells are pretty much house of cards waiting to >>> collapse on any corner case. >>> >>> bash is available out of the box at least on macos, msys2, and I expect, >>> every single linux distro out there. Not sure about bsds though. >>> >>> If that's such a big issue, I can port the scripts to sh. >>> >> >> Interestingly, QEMU main Makefile makes bash a defacto requirement, >> since it uses it for every single command to run. The reason is... to >> use -o pipefail. >> >> https://gitlab.com/qemu-project/qemu/-/blob/master/Makefile?ref_type=heads#L17 >> > > Well it looks like I misremembered as we list bash as a dependency in > qemu-minimal: > > packages: > - bash > > so I drop my objection. >
👍 > >>>>> +# SPDX-License-Identifier: GPL-2.0-or-later >>>>> + >>>>> +set -euo pipefail >>>>> + >>>>> +if [ $# -lt 2 ]; then >>>>> + echo "record_replay: qemu_bin [args]..." 1>&2 >>>>> + exit 1 >>>>> +fi >>>>> +qemu="$1";shift >>>>> +tmp=$(mktemp -d) >>>>> +trap "rm -rf $tmp" EXIT >>>>> +set -x >>>>> +$qemu -icount shift=5,rr=record,rrfile=$tmp/rr.bin "$@" |& tee >>>>> $tmp/record >>>>> +$qemu -icount shift=5,rr=replay,rrfile=$tmp/rr.bin "$@" |& tee >>>>> $tmp/replay >>>>> +diff $tmp/record $tmp/replay >>>> >>> >
