Introduce revng.cli.lift

This commit is contained in:
Alessandro Di Federico
2022-03-12 18:20:15 +01:00
parent da7701bd4e
commit df00a892dd
4 changed files with 82 additions and 81 deletions
+9 -1
View File
@@ -137,7 +137,15 @@ python_module(
#
python_module(
TARGET_NAME revng-python-translate
MODULE_FILES "revng/cli/translate/__init__.py"
MODULE_FILES "revng/cli/translate.py"
)
#
# Install revng.cli.lift
#
python_module(
TARGET_NAME revng-python-lift
MODULE_FILES "revng/cli/lift.py"
)
#
@@ -1,79 +1,7 @@
import sys
import argparse
import signal
import os
import subprocess
from os import path
from ..support import run
from ..revng import run_revng_command
from tempfile import NamedTemporaryFile
from .revng import run_revng_command
def register_translate(subparsers):
parser = subparsers.add_parser("translate", description="revng translate wrapper")
parser.add_argument("input", type=str, nargs=1, help="Input binary to be translated")
parser.add_argument(
"-o",
"--output",
metavar="OUTPUT",
dest="output",
type=str,
nargs="?",
help="Translated output",
)
parser.add_argument("-i", "--isolate", action="store_true", help="Enable function isolation.")
parser.add_argument(
"--trace", action="store_true", help="Use the tracing version of support.ll."
)
parser.add_argument("-O0", action="store_true", help="Do no optimize.")
parser.add_argument("-O1", action="store_true", help="Use llc -O2.")
parser.add_argument("-O2", action="store_true", help="Use llc -O2 and opt -O2.")
parser.add_argument("--base", help="Load address to employ in lifting.")
def run_translate(args, post_dash_dash_args, search_prefixes, command_prefix):
out_file = args.output if args.output else args.input[0] + ".translated"
step_name = "EndRecompile"
if args.isolate:
step_name = step_name + "Isolated"
command = [
"revng",
"pipeline",
"--silent",
"output:root:Translated",
"--step",
step_name,
"-i",
"Lift:input:" + args.input[0],
"-o",
step_name + ":output:" + out_file,
]
if args.O1:
command.append("--compile-opt-level=1")
elif args.O2:
command += ["--compile-opt-level=2", "-f", "O2"]
else:
command.append("--compile-opt-level=0")
if args.base:
command.append(f"--base={args.base}")
if args.trace:
command.append("--link-trace")
command += post_dash_dash_args
return run_revng_command(command, search_prefixes, command_prefix)
# WIP: outline
def register_lift(subparsers):
parser = subparsers.add_parser("lift", description="revng lift wrapper")
parser.add_argument("input", type=str, nargs=1, help="Input binary to be lifted")
@@ -93,9 +21,6 @@ def run_lift(args, post_dash_dash_args, search_prefixes, command_prefix):
lambda args, name: [f"--{name}={args.__dict__[name]}"] if args.__dict__[name] else []
)
# WIP
from tempfile import NamedTemporaryFile
with NamedTemporaryFile(suffix=".yml") as model, NamedTemporaryFile(
suffix=".ll"
) as model_in_module:
@@ -148,4 +73,4 @@ def run_lift(args, post_dash_dash_args, search_prefixes, command_prefix):
command_prefix,
)
# WIP NEXT: debug-info
# TODO: annotate IR
+2 -2
View File
@@ -123,7 +123,7 @@ def run_revng_command(arguments, search_prefixes, command_prefix):
subparsers = parser.add_subparsers(dest="command_name", help="sub-commands help")
from .translate import register_translate
from .translate import register_lift
from .lift import register_lift
register_translate(subparsers)
register_lift(subparsers)
@@ -198,7 +198,7 @@ def run_subcommand(command, all_args, search_prefixes, command_prefix):
def run_command(args, unknown_args, post_dash_dash, search_prefixes, command_prefix):
from .translate import run_translate
from .translate import run_lift
from .lift import run_lift
command = args.command_name
if not command:
+68
View File
@@ -0,0 +1,68 @@
from os import path
from .support import run
from .revng import run_revng_command
def register_translate(subparsers):
parser = subparsers.add_parser("translate", description="revng translate wrapper")
parser.add_argument("input", type=str, nargs=1, help="Input binary to be translated")
parser.add_argument(
"-o",
"--output",
metavar="OUTPUT",
dest="output",
type=str,
nargs="?",
help="Translated output",
)
parser.add_argument("-i", "--isolate", action="store_true", help="Enable function isolation.")
parser.add_argument(
"--trace", action="store_true", help="Use the tracing version of support.ll."
)
parser.add_argument("-O0", action="store_true", help="Do no optimize.")
parser.add_argument("-O1", action="store_true", help="Use llc -O2.")
parser.add_argument("-O2", action="store_true", help="Use llc -O2 and opt -O2.")
parser.add_argument("--base", help="Load address to employ in lifting.")
def run_translate(args, post_dash_dash_args, search_prefixes, command_prefix):
out_file = args.output if args.output else args.input[0] + ".translated"
step_name = "EndRecompile"
if args.isolate:
step_name = step_name + "Isolated"
command = [
"revng",
"pipeline",
"--silent",
"output:root:Translated",
"--step",
step_name,
"-i",
"Lift:input:" + args.input[0],
"-o",
step_name + ":output:" + out_file,
]
if args.O1:
command.append("--compile-opt-level=1")
elif args.O2:
command += ["--compile-opt-level=2", "-f", "O2"]
else:
command.append("--compile-opt-level=0")
if args.base:
command.append(f"--base={args.base}")
if args.trace:
command.append("--link-trace")
command += post_dash_dash_args
return run_revng_command(command, search_prefixes, command_prefix)