mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
3fe3a8524a
Add the `revng mass-testing` commands and auxiliary executables which simplify running revng on a huge quantity of input executables.
57 lines
1.6 KiB
Python
Executable File
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())
|