Commit Graph

257 Commits

Author SHA1 Message Date
Giacomo Vercesi 4ea7abe773 revng opt: make compatible with zstd
Change the `revng opt` wrapper so that when a zstd-compressed module is
passed it is decompressed on the fly and passed to llvm's opt.
2024-10-30 10:28:03 +01:00
Giacomo Vercesi 3fe3a8524a Implement mass testing
Add the `revng mass-testing` commands and auxiliary executables which
simplify running revng on a huge quantity of input executables.
2024-10-01 13:38:21 +02:00
Giacomo Vercesi 9a29c7117b commands_registry.py: allow subcommands in subdirs
Allow external subcommands to live in subdirectories w.r.t. the main
directory.
2024-10-01 13:38:14 +02:00
Giacomo Vercesi 993f66d59c revng cli: drop revng- prefix from libexec
Drop using the `revng-` prefix from all executables under
`libexec/revng/`. Now any executable found under there that is
executable and without extension will be considered a `revng`
subcommand, following the usual command-line rules.
2024-10-01 13:38:14 +02:00
Giacomo Vercesi e1757b505d support.py: fix _run_common
The `_run_common` function assumed that the `command` argument was
mutable. Change the logic so that it works with immutable collections
(e.g. `tuple`) as well.
2024-10-01 13:38:13 +02:00
Giacomo Vercesi 583988c922 try_run: do not close fds
When running a subprocess via `try_run` & friends, do not close the
inherited file descriptors.
2024-10-01 13:38:13 +02:00
Giacomo Vercesi e9a445b3a8 commands_registry: move to revng.py
Move the `commands_registry` instance from the `commands_registry.py` to
`revng.py` where the actual implementation of the registry happens.
2024-10-01 13:38:13 +02:00
Giacomo Vercesi 4474eb68e2 fetch_debuginfo: download files atomically
Instead of directly writing the destination file, use the combination of
a `.tmp` suffix and `os.replace` to guarantee that the destination file
is written whole and not partially.
2024-10-01 13:38:13 +02:00
Giacomo Vercesi f8ffe38687 Unify cache directory logic
Make the cache directory logic uniform in Python and C++, move the
respective implementations under support since it's project-wide logic
and not exclusive to debug-info.
2024-10-01 13:38:13 +02:00
Giacomo Vercesi 4ceea9badd import_idb.py: use setup function
Use the `setup` function mechanism to register the command instead of
directly importing the commands registry.
2024-10-01 13:38:13 +02:00
Giacomo Vercesi ba0f374eae revng cli: add --wrapper option
Add the `--wrapper` option which allows the user to pass an arbitrary
wrapper to the invocation of executables.
2024-09-10 10:14:12 +02:00
Giacomo Vercesi 2dfca729bc commands_registry: fix wrapper assertion
Add missing wrappers to the assertion that checks that only one wrapper
can be used at a time.
2024-09-10 10:14:12 +02:00
Alessandro Di Federico 670b519973 model compare: fix typos 2024-08-16 16:33:10 +02:00
Alessandro Di Federico d28bc717c6 model compare: report best match upon failure 2024-08-16 13:36:19 +02:00
Alessandro Di Federico 99149c1b36 Drop revng lift 2024-08-07 16:07:59 +02:00
Alessandro Di Federico 7b00473859 PDBImporter: rework .pdb search 2024-08-05 17:41:34 +02:00
Alessandro Di Federico 3f60b74a28 fetch-debuginfo: soft fail if no network 2024-07-09 12:02:31 +02:00
Alessandro Di Federico 71b7fae69d revng --version: emit component hashes 2024-06-30 19:36:48 +02:00
Ivan Krysak dfa7478685 Adopt reworked model::Type 2024-06-27 11:05:51 +02:00
Ivan Krysak b6625e8913 Model: simplify fixModel pass
Instead of getting reimplemented/updated, it now just reuses normal
type verification routines.
2024-06-27 11:05:50 +02:00
Ivan Krysak 23aed24be1 Model: make compare key-strict
Before now it only looked at `ID`s which made it incompatible with
models that reuse the same ID for different kinds.
2024-06-27 11:05:50 +02:00
Ivan Krysak ac587cbb4f Model: rename Type into TypeDefinition 2024-06-27 11:05:48 +02:00
Alessandro Di Federico f8776ef8b5 Introduce revng tar-to-yaml 2024-06-20 10:24:50 +02:00
Alessandro Di Federico b0d897b87d Minor changes 2024-06-20 10:24:49 +02:00
Alessandro Di Federico 0ac71816a6 revng daemon: improve detection of interpreter
This ensures we wait for the right process.
2024-06-20 10:24:49 +02:00
Alessandro Di Federico 9a35d6da40 revng graphql: improve error reporting 2024-06-20 10:24:49 +02:00
Massimo Fioravanti 43349943a7 Stop serializing the model in the IR 2024-06-20 09:57:36 +02:00
Massimo Fioravanti 7ee8c8000d Introduce revng pipe 2024-06-20 09:57:36 +02:00
Giacomo Vercesi c1b59567c6 revng graphql: gracefully handle server disconnect
Gracefully handle the server disconnecting from a `revng graphql`
invocation. Instead of letting the stack trace be printed, output an
appropriate error message.
2024-06-06 16:35:26 +02:00
Ivan Krysak 44e5328477 Yield: add explicit directive support 2024-03-18 11:40:32 +00:00
Ivan Krysak a3e9e689ca cli/ptml: add support for the new asm tokens 2024-03-18 07:20:41 +00:00
Ivan Krysak e1060ed6ed cli/ptml: fix asm.helper support 2024-03-18 07:20:41 +00:00
Alessandro Di Federico 757f7e21d7 Import docs 2024-02-09 10:04:24 +01:00
Alessandro Di Federico d9367954a4 Convert all public strings to kebab-case 2024-02-09 10:04:24 +01:00
Alessandro Di Federico 2bdca8ab03 Rename steps and analyses 2024-02-09 10:04:22 +01:00
Alessandro Di Federico 6f60d9b492 Introduce revng --rr 2024-02-09 10:04:19 +01:00
Giacomo Vercesi d4532ab512 revng daemon: print debug log to stderr
When printing the current workdir, use stderr instead of stdout.
2024-01-26 19:13:58 +01:00
Giacomo Vercesi 73cd5a5655 revng daemon: allow manuanlly saving via SIGUSR2
This commit adds the functionality, in debug mode, for `revng daemon` to
save when the SIGUSR2 signal is sent.
2024-01-26 19:13:58 +01:00
Giacomo Vercesi ca66b4ddfc InitRevng: fix command line parsing
This commit fixes command line parsing of revng through the
REVNG_OPTIONS environment variable. Previously the env was prepended to
the actual command-line variables, now it's appended, allowing to
specify command line arguments that depend on `-load`s.
2024-01-26 17:46:21 +01:00
Alessandro Di Federico 028908a592 revng graphql: print analyses' errors 2024-01-02 15:08:26 +01:00
Massimo Fioravanti e5347b2910 Remove llvm pipeline 2024-01-02 11:14:55 +01:00
Giacomo Vercesi 942cf50735 python: create python wheels
Package revng's python code in two wheels: `revng` and `revng_internal`.
The revng wheel contains the
`revng.{pipeline_description,model,tupletree}` modules, while the
`revng_internal` one everything under `revng.internal`.
2023-12-12 14:52:22 +01:00
Giacomo Vercesi 7deb85b863 revng daemon: implement plugin interface
Deprecate the `STARLETTE_MIDDLEWARES_*` environment variables in favor
of a plugin infrastucture, which allows plugins to register middlewares
and save hooks via a `setup` function.
2023-12-12 14:52:22 +01:00
Alessandro Di Federico ca7041741f fetch_debuginfo: fix PDB URL computation
The pefile library changed its API.
On top updating the code accordingly, we now also properly pad hex
numbers.
2023-12-12 12:04:33 +01:00
Alessandro Di Federico 35f31ad469 fetch_debuginfo: do not catch Exception 2023-12-12 12:04:32 +01:00
Alessandro Di Federico 8302717da7 fetch_debuginfo: use HTTPS for msdl.microsoft.com 2023-12-12 12:04:32 +01:00
Alessandro Di Federico 10dcb7be11 Fix semantics of model::Types purging passes
One of the two passes to purge unused types from the model had a
ill-defined semantics.

This commit simplifies them in two passes: one that purges all the types
unreachable from outside `Binary::Types` and one that does the same but
also preserves types with a `CustomName` or an `OriginalName`.
2023-12-05 16:19:39 +01:00
Giacomo Vercesi d737a13117 manager.py: temporarily remove auto-saves
Remove the auto-save code that gets triggered when running analyses.
This improves performance since it doesn't force the manager to save to
storage. This is due to the manager eagerly serializing the pipeline
(both in terms of amount of data and which container should be
serialized), this is especially expensive when the resume directory is
backed by S3.
2023-11-03 16:30:40 +01:00
Giacomo Vercesi 046612f11c revng.graphql: enforce index consistency
Force clients to provide the current index to run `produce` or
`runAnalysis`. Requests that do not provide the correct index return an
IndexError object.
2023-11-03 14:51:31 +01:00
Giacomo Vercesi c83932003b revng.daemon: also send index in invalidations
When sending invalidations via websocket, also send the new context
global index.
2023-11-03 12:13:58 +01:00