Drop revng-lift

This commit is contained in:
Alessandro Di Federico
2022-03-10 11:12:46 +01:00
parent 6a458c2407
commit 104b1de077
9 changed files with 90 additions and 179 deletions
+1 -4
View File
@@ -74,8 +74,7 @@ add_custom_command(
> "${CMAKE_BINARY_DIR}/lib/python/${PYTHON_GENERATED_MODEL_PATH}"
DEPENDS generate-model-tuple-tree-code
)
add_custom_target(python-model-generated DEPENDS "${CMAKE_BINARY_DIR}/lib/python/${PYTHON_GENERATED_MODEL_PATH}")
add_dependencies(revng-lift python-model-generated)
add_custom_target(python-model-generated ALL DEPENDS "${CMAKE_BINARY_DIR}/lib/python/${PYTHON_GENERATED_MODEL_PATH}")
#
# Install revng.model (including autogenerated classes)
@@ -107,7 +106,6 @@ python_module(
TARGET_NAME revng-merge-dynamic
MODULE_FILES ${MERGE_DYNAMIC_MODULE_FILES}
)
add_dependencies(revng-lift revng-merge-dynamic)
#
# Install revng.model_dump
@@ -120,7 +118,6 @@ python_module(
TARGET_NAME revng-dump-model
MODULE_FILES ${DUMP_MODEL_MODULE_FILES}
)
add_dependencies(revng-lift revng-dump-model)
#
# Install revng.cli.support
+74
View File
@@ -77,3 +77,77 @@ def run_translate(args, post_dash_dash_args, search_path, search_prefixes, comma
to_execute = build_command_with_loads("revng-pipeline", command, search_path, search_prefixes)
return run(to_execute + post_dash_dash_args, 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")
parser.add_argument("output", type=str, nargs=1, help="Output module path")
parser.add_argument("--record-asm", action="store_true")
parser.add_argument("--record-ptc", action="store_true")
parser.add_argument("--external", action="store_true")
parser.add_argument("--base", type=str)
parser.add_argument("--entry", type=str)
parser.add_argument("--debug-info", type=str)
parser.add_argument("--import-debug-info", type=str, action="append", default=[])
def run_lift(args, post_dash_dash_args, search_path, search_prefixes, command_prefix):
# Run revng model import args.input
arg_or_empty = (
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:
run(
(
[
get_command("revng-model-import-binary", search_path),
args.input[0],
"-o",
model.name,
]
+ [f"--import-debug-info={value}" for value in args.import_debug_info]
+ arg_or_empty(args, "base")
+ arg_or_empty(args, "entry")
),
command_prefix,
)
run(
[
get_command("revng-model-inject", search_path),
model.name,
"/dev/null",
"-o",
model_in_module.name,
],
command_prefix,
)
run(
(
[
get_command("revng", search_path),
"opt",
model_in_module.name,
"-o",
args.output[0],
"-load-binary",
f"-binary-path={args.input[0]}",
"-lift",
]
+ arg_or_empty(args, "external")
+ arg_or_empty(args, "record_asm")
+ arg_or_empty(args, "record_ptc")
),
command_prefix,
)
# WIP NEXT: debug-info
+4
View File
@@ -20,6 +20,7 @@ if prev_pythonpath:
os.environ["PYTHONPATH"] += ":" + prev_pythonpath
from revng.cli.translate import register_translate, run_translate
from revng.cli.translate import register_lift, run_lift
from revng.cli.support import build_command_with_loads, set_verbose, get_command, run, log_error
search_prefixes = []
@@ -126,6 +127,7 @@ def main():
subparsers = parser.add_subparsers(dest="command_name", help="sub-commands help")
register_translate(subparsers)
register_lift(subparsers)
subparsers.add_parser("cc", help="compile, link and translate transparently", add_help=False)
subparsers.add_parser("opt", help="LLVM's opt with rev.ng passes", add_help=False)
@@ -219,6 +221,8 @@ def run_command(args, unknown_args, post_dash_dash, search_path, search_prefixes
return run_cc(all_args, search_path, search_prefixes, command_prefix)
elif command == "translate":
return run_translate(args, post_dash_dash, search_path, search_prefixes, command_prefix)
elif command == "lift":
return run_lift(args, post_dash_dash, search_path, search_prefixes, command_prefix)
elif command == "model":
if not all_args:
log_error("No subcommand specified")