mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
Introduce revng.cli.lift
This commit is contained in:
@@ -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
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user