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
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
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
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
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
Alessandro Di Federico
22d469aa10
mv librevngUnitTestHelpers.{a,so}
2022-05-12 21:55:18 +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
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
Giacomo Vercesi
24c51f385a
CMake: generate model.ts
2022-05-09 13:37:58 +02:00
Ivan Krysak
282b4e238d
Add yield-assembly pipeline
2022-05-06 18:51:47 +02:00
Ivan Krysak
cf3845b78d
Add a way to output assembly as plain text
2022-05-06 18:51:47 +02:00
Ivan Krysak
1adc74e660
Import an assembly to html converter from caliban
2022-05-06 18:51:47 +02:00
Ivan Krysak
6e81dbe06c
Add a disassembly helper
2022-05-06 18:51:47 +02:00
Ivan Krysak
36c63c1bb9
Implement the disassembler interface
2022-05-06 18:51:47 +02:00
Ivan Krysak
4737efd763
Add a non-pass binary loader
2022-05-06 18:51:47 +02:00
Ivan Krysak
2a6a7943f4
Fix a couple of minor typos
2022-05-06 18:51:47 +02:00
Alessandro Di Federico
1764f6120c
EFA: update Block.End when appropriate
...
This change handles the situation in which getLastPC returns an invalid
MetaAddress. This is a new behavior introduces to handle queries on
`llvm::BasicBlock`s whose last PC is ambiguous.
2022-05-06 16:04:22 +02:00
Alessandro Di Federico
9fcdc3393a
getLastNewPC: return nullptr when ambiguous
2022-05-06 16:04:22 +02:00
Alessandro Di Federico
3c2a7dd5f2
EnforceABI: in case of no prototype, use default
2022-04-29 17:57:49 +02:00
Alessandro Di Federico
a4d7e78856
Stop registering Invalid model::Functions
2022-04-29 17:57:49 +02:00
Alessandro Di Federico
305a6ba69c
Isolate: use Attribute::NullPointerIsValid
...
This enables us to handle memory accesses at nullptr.
2022-04-29 17:57:49 +02:00
Alessandro Di Federico
0e907021e3
EnforceABI: preserve metadata
...
This is particularly useful for preserving `FunctionTag`s.
2022-04-29 17:57:49 +02:00
Alessandro Di Federico
2e933cde6b
Dynamic functions: use OriginalName
...
`OriginalName` is the key.
2022-04-29 17:57:49 +02:00
Alessandro Di Federico
0f3c29fa1b
Split moveToNewFunctionType off changeFunctionType
2022-04-29 17:57:49 +02:00
Giacomo Vercesi
168eab6cc5
Use /proc/self/maps to determine root
...
Use the path of the mapped librevngSupport.so to determine the root
directory.
2022-04-28 22:18:08 +02:00
Giacomo Vercesi
91067a8886
getCurrentExecutableFullPath: assert on error
...
`getCurrentExecutableFullPath` now aborts if it cannot determine the
real path instead of returning an empty string.
2022-04-28 22:10:14 +02:00
Giacomo Vercesi
d109a68bc4
Remove BUILD_PATH
...
It has not been relevant for a long time.
2022-04-28 22:10:02 +02:00
Pietro Fezzardi
da44302bba
Fix StringMapContainer::remove on isAll target
...
Before this commit, the container did not properly remove everything
when removing a wildcard * target.
2022-04-27 17:08:13 +02:00
Giacomo Vercesi
4445a841b2
revng-pipeline: introduce artifacts
...
Add a new key to a Step, named Artifacts. If present, it indicates that
the step has a "default" Kind and Container that can be easily retrieved
without explicitly specifying either when producing an artifact.
2022-04-26 15:59:35 +02:00
Giacomo Vercesi
99ae9c98e0
Add MIMEType to container
...
Add additional field MIMEType to Container.
This allows API consumers to know at runtime how to treat the data
within a container without any prior knowledge.
2022-04-26 15:59:35 +02:00
Giacomo Vercesi
f4d63759de
PipelineC: expose kinds, ranks and more
...
Adds missing API functions to PipelineC that will be needed by the
GraphQL API:
* Kinds enumeration
* Get Rank and parent of a Kind
* Enumerate and inspect Ranks
* Get a Step's parent
Included are some docstring fixes
2022-04-26 15:05:30 +02:00
Giacomo Vercesi
b90773b642
Move librevngRecompile to analyses
2022-04-26 15:05:30 +02:00
Giacomo Vercesi
a831fa8e74
ContainerSet: add isContainerRegistered
...
This function allows to check if a container is registered,
irrespective of its initialization status
2022-04-26 15:05:30 +02:00