Ivan Krysak
840a34c0a4
Implement CFG extraction
2022-06-15 16:04:44 +03:00
Ivan Krysak
71f2ea6b22
Outline yield::Graph
2022-06-15 16:04:44 +03:00
Ivan Krysak
d3afdc47bb
Outline yield::cfg::Configuration
2022-06-15 16:04:43 +03:00
Ivan Krysak
5b49873523
Move delay slot control down to basic block level
2022-06-15 16:04:43 +03:00
Ivan Krysak
33c8ce96bd
Use labeled block system instead of block strings
2022-06-15 16:04:43 +03:00
Ivan Krysak
b19663e439
Implement labeled block detection
2022-06-15 16:03:45 +03:00
Ivan Krysak
de9861815a
Move fallthrough detection to yield::cfg
2022-06-15 16:02:44 +03:00
Ivan Krysak
80e9243e06
Add a basic CFG pipeline
2022-06-15 15:52:26 +03:00
Ivan Krysak
f536ba46f0
Separate process-assembly from yield-assembly
2022-06-15 15:52:25 +03:00
Ivan Krysak
832a8d0baa
Use TTG-based assembly to weaken dependency on efa
2022-06-15 15:52:23 +03:00
Ivan Krysak
74764f9729
Switch to TTG-based assembly description
2022-06-15 15:52:00 +03:00
Ivan Krysak
f26ee02029
Use tuple tree generator for assembly description
2022-06-15 15:51:23 +03:00
Ivan Krysak
569d677157
Disable default instruction operand symbolization
...
It was causing issues on some architectures (like i386)
2022-06-15 15:51:23 +03:00
Ivan Krysak
7063bb528c
Make CFG verification use GenericGraph exporter
2022-06-15 15:51:22 +03:00
Ivan Krysak
49d0c316a0
Implement GenericGraph-based CFG exporter
2022-06-15 15:51:18 +03:00
Ivan Krysak
04efcb8ed8
Drop the revng yield .* tools
2022-06-14 18:55:59 +03:00
Ivan Krysak
bc775a91b4
Improve the String wrapper
2022-06-14 18:55:59 +03:00
Ivan Krysak
150fab6bbc
Fix a minor pipeline::Target construction issue
2022-06-14 12:40:11 +03:00
Ivan Krysak
257bcb9b3c
Make MetaAddress constexpr constructible
2022-06-14 12:40:11 +03:00
Ivan Krysak
dffe311ad8
Add efa::FunctionEdgeType::needsFallthrough
2022-06-14 12:40:11 +03:00
Giacomo Vercesi
1cc8c2c20c
Fix pyYAML type error
...
Remove code in revng.cli.model_dump and override_by_name that was used
when the model had tags. The code subclassed the default pyYAML loader
to ignore unknown tags to allow reading the model data easily. Since the
model no longer has tags this code is dead and can be removed.
2022-06-13 18:35:37 +02:00
Massimo Fioravanti
22bce466b1
revng-pipeline: support handles multiple branches
...
This commit introduces the possibility to have multiple pipeline
branches in a single YAML pipeline file.
2022-06-13 18:34:03 +02:00
Massimo Fioravanti
f8ad4e634d
Replace pipeline -load using LLVM -load mechanism
...
`revng -load` mechanism did not allow to specify arguments for loaded
libraries, the new LLVM mechanism allow to do so.
2022-06-13 18:30:08 +02:00
Alessandro Di Federico
d37c3d3dd8
Fix revng --prefix
...
When running subcommands from a `revng` script the build directory and
the root directory were being swapped.
2022-05-31 11:30:10 +02:00
Alessandro Di Federico
6b63efa0a9
Merge branch 'feature/pipeline-analysis'
2022-05-25 09:14:53 +02:00
Giacomo Vercesi
2f0519c3c5
GraphQL: Introduce run_all_analyses
2022-05-24 10:56:04 +02:00
Giacomo Vercesi
e5704ede11
Make Python API thread-safe and non-blocking
...
Since PipelineC is not thread-safe, add a lock to all function calls to
it to avoid any thread safety-related issues.
At the same time, use a thread pool to run "expensive" PipelineC
functions in GraphQL (specifically `produce_target` and `run_analysis`)
to avoid problems due to the cooperative nature of Python coroutines.
2022-05-24 10:56:04 +02:00
Alessandro Di Federico
071fe1c0e4
[FIXUP] Support analyses and global in Python
2022-05-24 10:56:04 +02:00
Giacomo Vercesi
7052f2a8a0
Support analyses and globals in Python
...
This commit adds the newly implemented functionality in PipelineC both
in revng.api and the graphql api, allowing:
* retrieval of global variable names
* unwrapping of a single target
* execution of analyses
2022-05-24 10:56:02 +02:00
Giacomo Vercesi
7c3d9a3fcd
Python API: automatically call destructors
...
Use the owning annotation in PipelineC/Prototypes.h to automatically
destroy resources when they go out of scope on the python side.
2022-05-24 08:59:08 +02:00
Massimo Fioravanti
1508a1bc72
revng-pipeline: support out of line analyses
2022-05-24 08:59:08 +02:00
Massimo Fioravanti
e38dfc74cc
PipelineC: introduce run_all_analyses
2022-05-24 08:59:08 +02:00
Massimo Fioravanti
f0a5ffe3b3
revng-pipeline: globals, extractOne and analyses
2022-05-24 08:58:48 +02:00
Massimo Fioravanti
2c48713af9
Make TupleTreeDiff compatible with regular vectors
2022-05-24 08:50:24 +02:00
Giacomo Vercesi
07c23dda8d
revng-deamon: fix GraphQL URL
...
The page was using the wrong attribute to make the GraphQL calls
relative to the debug page's url.
2022-05-24 08:49:16 +02:00
Alessandro Di Federico
5b39595b77
Minor changes
2022-05-13 15:14:51 +02:00
Alessandro Di Federico
e89870d125
Merge branch 'feature/asan-support'
2022-05-13 07:59:49 +02:00
Alessandro Di Federico
22d469aa10
mv librevngUnitTestHelpers.{a,so}
2022-05-12 21:55:18 +02:00
Alessandro Di Federico
41c21ddb07
revng-daemon: use ASan
2022-05-12 21:55:18 +02:00
Alessandro Di Federico
34a94188f0
Suggest how to build with ASan
2022-05-12 21:55:18 +02:00
Alessandro Di Federico
ccba62b13d
revng opt: do not add --help
2022-05-12 21:54:42 +02:00
Alessandro Di Federico
fdd6f3a5f8
Merge branch 'feature/pipeline-friendly-string-map'
2022-05-12 21:54:37 +02:00
Pietro Fezzardi
20fea32ce1
FunctionStringMap: improve code-reuse
...
The serialize() method now uses the serialize() function provided by
revng/Support/YAMLTraits.h, so we don't have to explictly const_cast.
2022-05-12 17:00:13 +02:00
Pietro Fezzardi
1bb5bd6eee
ModelGlobal: don't move the underlying model::Binary
...
Moving it was causing the address of the model to change, while for the
functionality of revng-pipeline we need it to be stable.
So we pay the price of expensive copy, for the sake of downstream
stability.
2022-05-12 16:59:47 +02:00
Pietro Fezzardi
741d55279b
TupleTree: add copy-constructor and -assignment
...
The copy of a TupleTree is potentially very expensive, so it was
disabled until now and only allowed via the explict method clone().
We have now decided to make TupleTree copiable.
This commit adds a copy-constructor and a copy-assignment, killing the
clone() method that was already unused and is now effectively useless.
2022-05-11 16:16:49 +02:00
Pietro Fezzardi
b190f1a47c
Refactor logic to compact function targets
...
This commit introduces a reusable function to compact
pipeline::TargetLists that represent functions.
Initially this reasoning was only needed by TaggedFunctionKind, but now
also FunctionStringMap needs it, and potentially others in the future,
so it makes sense to keep only a single implementation for it instead of
duplicating code (and likely bugs).
2022-05-11 16:16:49 +02:00
Pietro Fezzardi
ca566a76f0
Rename StringMapContainer to FunctionStringMap
...
This new naming more closely describes the fact that each element in the
map must be associated with a model::Function
2022-05-11 16:16:32 +02:00
Pietro Fezzardi
bce0bd70b1
StringMapContainer: fix enumeration for * target
2022-05-11 14:52:22 +02:00
Pietro Fezzardi
2dea29d926
StringMapContainer: use multiline strings in YAML
2022-05-11 14:39:31 +02:00
Pietro Fezzardi
0f4df96ad6
Mark some dump() methods as debug_function
2022-05-11 14:39:31 +02:00