Files
Giacomo Vercesi 3fe3a8524a Implement mass testing
Add the `revng mass-testing` commands and auxiliary executables which
simplify running revng on a huge quantity of input executables.
2024-10-01 13:38:21 +02:00

57 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python3
#
# This file is distributed under the MIT License. See LICENSE.md for details.
#
# This script is a wrapper around `llvm-symbolizer`, which allows providing
# a JSON stack trace (easy to parse) together with a traditional stacktrace
# (easier to read for programmers).
# The JSON stack trace is saved to the path specified by
# `SYMBOLIZER_WRAPPER_OUTPUT` whereas the traditional stacktrace is written to
# stdout, as the unwrapped symbolizer would do.
import os
import sys
from subprocess import PIPE, Popen
def main():
args = sys.argv[1:]
json_args = [*args, "--output-style=JSON", "--relativenames"]
symbolizer_bin = os.environ["SYMBOLIZER_WRAPPER_SYMBOLIZER_PATH"]
output_path = os.environ["SYMBOLIZER_WRAPPER_OUTPUT"]
with open(output_path, "wb") as json_file:
json_symbolizer = Popen(
("llvm-symbolizer", *json_args),
executable=symbolizer_bin,
stdin=PIPE,
stdout=json_file,
text=False,
)
regular_symbolizer = Popen(
("llvm-symbolizer", *args),
executable=symbolizer_bin,
stdin=PIPE,
stdout=sys.stdout,
text=False,
)
for line in sys.stdin.buffer:
json_symbolizer.stdin.write(line)
regular_symbolizer.stdin.write(line)
json_symbolizer.stdin.close()
regular_symbolizer.stdin.close()
json_symbolizer.wait()
regular_symbolizer.wait()
return regular_symbolizer.returncode
if __name__ == "__main__":
sys.exit(main())