This reverts commit cb935f345683194e42e6e883d79c5a16479acd74. Discussion in D68708 advises that green dragon is being briskly refurbished, and it's good to have this patch up testing it.
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
# DExTer : Debugging Experience Tester
|
|
# ~~~~~~ ~ ~~ ~ ~~
|
|
#
|
|
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
# See https://llvm.org/LICENSE.txt for license information.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
"""View tool."""
|
|
|
|
import os
|
|
|
|
import pickle
|
|
from dex.heuristic import Heuristic
|
|
from dex.heuristic.Heuristic import add_heuristic_tool_arguments
|
|
from dex.tools import ToolBase
|
|
from dex.utils.Exceptions import Error, HeuristicException
|
|
from dex.utils.ReturnCode import ReturnCode
|
|
|
|
|
|
class Tool(ToolBase):
|
|
"""Given a dextIR file, display the information in a human-readable form.
|
|
"""
|
|
|
|
@property
|
|
def name(self):
|
|
return 'DExTer view'
|
|
|
|
def add_tool_arguments(self, parser, defaults):
|
|
add_heuristic_tool_arguments(parser)
|
|
parser.add_argument(
|
|
'input_path',
|
|
metavar='dextIR-file',
|
|
type=str,
|
|
default=None,
|
|
help='dexter dextIR file to view')
|
|
parser.description = Tool.__doc__
|
|
|
|
def handle_options(self, defaults):
|
|
options = self.context.options
|
|
|
|
options.input_path = os.path.abspath(options.input_path)
|
|
if not os.path.isfile(options.input_path):
|
|
raise Error('<d>could not find dextIR file</> <r>"{}"</>'.format(
|
|
options.input_path))
|
|
|
|
def go(self) -> ReturnCode:
|
|
options = self.context.options
|
|
|
|
with open(options.input_path, 'rb') as fp:
|
|
steps = pickle.load(fp)
|
|
|
|
try:
|
|
heuristic = Heuristic(self.context, steps)
|
|
except HeuristicException as e:
|
|
raise Error('could not apply heuristic: {}'.format(e))
|
|
|
|
self.context.o.auto('{}\n\n{}\n\n{}\n\n'.format(
|
|
heuristic.summary_string, steps, heuristic.verbose_output))
|
|
|
|
return ReturnCode.OK
|