mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
793b8999e9
Make the required changes so that `revng2` can be used with mass-testing and the per-component stats are correct.
43 lines
1.6 KiB
Bash
Executable File
43 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#
|
|
# This file is distributed under the MIT License. See LICENSE.md for details.
|
|
#
|
|
|
|
set -euo pipefail
|
|
|
|
# This is a revng-specific script that simplifies using the `revng` together
|
|
# with test-harness. In particular it does the following:
|
|
# * Saves `sections.json` and adds `text_size` to meta.yml
|
|
# * Saves the trace output as `trace.json.gz`
|
|
# * Suppresses output from the `revng` command
|
|
# * Detects if it's being used as a wrapper for `revng` and calls the real one
|
|
# properly
|
|
# The last characteristic is needed as this script can be symlinked to be
|
|
# `revng` to allow the command to be 1:1 with the reproducer command.
|
|
|
|
SECTIONS_JSON="$TEST_OUTPUT_DIR/sections.json"
|
|
|
|
dump-sections "$TEST_INPUT" > "$SECTIONS_JSON"
|
|
echo "text_size: $(dump-sections --text-size "$TEST_INPUT")" >> "$TEST_OUTPUT_DIR/meta.yml"
|
|
|
|
# Check if we're being used as `revng` or `revng2`, if so, find the next revng
|
|
# executable to avoid an infinite loop.
|
|
COMMAND_NAME="$(basename "${BASH_SOURCE[0]}")"
|
|
if [[ "$COMMAND_NAME" =~ ^revng2?$ && \
|
|
"${BASH_SOURCE[0]}" = "$(command -v "$COMMAND_NAME")" ]]; then
|
|
readarray -t REVNG_PATHS < <(which -a "$COMMAND_NAME")
|
|
REVNG_PATH="${REVNG_PATHS[1]}"
|
|
elif [[ "$COMMAND_NAME" = *revng2* ]]; then
|
|
REVNG_PATH=revng2
|
|
else
|
|
REVNG_PATH=revng
|
|
fi
|
|
|
|
COMMAND_NAME="$(basename "$REVNG_PATH")"
|
|
if [[ "$COMMAND_NAME" = "revng" ]]; then
|
|
exec "$REVNG_PATH" "$@" -o /dev/null --trace >(exec gzip -7 -c > "$TEST_OUTPUT_DIR/trace.json.gz")
|
|
else
|
|
exec "$REVNG_PATH" "$@" -o /dev/null -- --trace >(exec gzip -7 -c > "$TEST_OUTPUT_DIR/trace.json.gz")
|
|
fi
|