Alessandro Di Federico
56536ba231
STLExtras.h: introduce IsTupleLike concept
...
One day we'll need to make it report error messages in a more effective
way.
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
80ed065206
model::Type: move makeTypeWithID to .cpp
...
It needs to see the full declaration of all concrete types.
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
4f29a70df8
UpcastablePointer.h: pointee: skip over const
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
7441497171
Function.h should not include Binary.h
...
`Function.h` should see a forward declaration of `model::Binary` and
`Binary.h` should include `Function.h`.
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
97db1d5f50
Make TypePaths comparable
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
92ea78b0a8
Fix ReservedKeywords list
...
Commas were missing.
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
c9d47d4ee7
Drop model::EnumEntry::Aliases
...
They turn out to be problematic to handle in the model and not very
usable in practice.
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
0a0b546bdc
Speed up Python dependency checks
...
Checking Python dependencies has significantly slown down CMake
configuration phase.
We were using `pip show` for each dependency, we now do everything in a
single invocation `pip list`.
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
1ce1f1cbd6
model::Function::verify: relax assumptions
...
Now `model::Function` can miss the CFG, the `Prototype` and have
`Invalid` type.
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
5484896e3f
TupleTreeDiff: fix path construction
...
This commit fixes a bug that led to put in a `TupleTreePath` an object
instead of its key.
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
1d839ba156
IRHelpers.h: drop erase_if
...
We have `llvm::erase_if`.
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
7ea55326e1
tuple_tree_generator: use all_optional_fields
2022-01-27 11:50:37 +01:00
Alessandro Di Federico
3799f1e973
Whitespace and other minor changes
2022-01-25 21:27:05 +01:00
Alessandro Di Federico
b0eed9fe10
Merge branch 'feature/more-robust-tuple-tree-generator'
2022-01-21 18:12:24 +01:00
Alessandro Di Federico
679851afb0
TupleTreeGenerator.cmake: depend on scripts
2022-01-21 18:07:24 +01:00
Filippo Cremonese
31354a4cd6
metaschema.yml: actually enforce validation
...
Previously, we didn't specify the type of the root object, which led to
accept any input.
2022-01-21 18:05:52 +01:00
Filippo Cremonese
f10bc1a410
Check pyparsing version at configure time
...
Otherwise, people will get obscure error messages.
2022-01-21 18:05:51 +01:00
Alessandro Di Federico
3ab32cd2ef
tuple_tree_generator: make fully standalone
2022-01-21 18:05:51 +01:00
Filippo Cremonese
c7a0d05379
tuple_tree_generator: remove unused include
2022-01-21 18:05:49 +01:00
Filippo Cremonese
610d5112c7
tuple_tree_generator: fix type lookup
2022-01-21 18:03:07 +01:00
Alessandro Di Federico
71c279a837
Merge branch 'feature/revng-pipeline'
2022-01-17 18:18:13 +01:00
Massimo Fioravanti
70ec456078
Introduce revng-pipeline
2022-01-17 18:17:54 +01:00
Massimo Fioravanti
b4f9162078
Introduce helper function to emit indentation
2022-01-17 18:17:54 +01:00
Massimo Fioravanti
afbebaf531
ProgramRunner: fix misuse of executable path
...
ProgramRunner was using garbage data instead of correctly using the path
to the current executable directory.
2022-01-17 18:17:54 +01:00
Massimo Fioravanti
6421aeed3e
Support: depend on generated model headers
...
renvg.h should not use model headers, however, currently it does. This,
combined with the fact that the revngSupport library did not depend on
revngModel or the header generation led to non-deterministic build
failures.
Before this commit the bug can be found by:
orc clean revng
orc uninstall revng
orc configure revng
orc shell -c revng ninja renvgSupport
The error should manifest itself as some generated headers missing.
The proper fix would be to rewrite revng.h so that it does not uses the
model.
2022-01-17 18:17:45 +01:00
Filippo Cremonese
0a70383e12
tuple_tree_generator: Jinja2 compatibility issue
...
This commit fixes a compatibility issue with Jinja2 2.10.
2022-01-17 16:35:01 +01:00
Alessandro Di Federico
d19879d4e8
Minor changes
2022-01-17 16:30:42 +01:00
Alessandro Di Federico
b92d99e0a3
Merge branch 'feature/model-classes-generator'
2022-01-13 17:12:49 +01:00
Alessandro Di Federico
fc02a84436
Test generated model can be loaded
...
This ensure we catch bugs in model deserialization early, while usually
they pop up in revng-c, which doesn't make much sense.
2022-01-13 14:34:11 +01:00
Filippo Cremonese
6e7439ad6d
Check Python requirements at configure time
2022-01-13 14:34:11 +01:00
Filippo Cremonese
74217b4fe5
Generate C++ model from YAML definition
...
Model classes are now described by a YAML document, which is used to
generate C++ headers containing classes and all the boilerplate
required for YAML serialization/deserialization, usage in
SortedVectors, etc. See the README in include/revng/Model for more
info.
2022-01-13 14:34:11 +01:00
Filippo Cremonese
fbeee896e1
Rename model::abi -> model::ABI
2022-01-10 10:31:27 +01:00
Filippo Cremonese
a97efbaaf7
Add missing <map> include
2022-01-10 10:31:27 +01:00
Alessandro Di Federico
738637b673
Suggest DISABLE_RECURSIVE_COROUTINES usage
2022-01-09 19:00:57 +01:00
Alessandro Di Federico
546efa345a
More verbose model verification failures
2022-01-09 19:00:57 +01:00
Alessandro Di Federico
7d4ef44cb7
DwarfImporter: ignore 0-sized arrays
2022-01-09 19:00:57 +01:00
Alessandro Di Federico
441a5552b7
ProgramRunner: do not depend on main
...
`main` is not in all cases a dynamically exported symbol, therefore,
it's not safe to rely on it.
This commit switches to use `PathList`'s `getCurrentExecutableFullPath`,
which reads `/proc/self/exe`.
2022-01-09 19:00:57 +01:00
Alessandro Di Federico
cfb47157b9
clang-tidy: readability-identifier-naming
...
This commit fixes all the non-compliance with our preliminary clang-tidy
configuration, which will be merged soon.
2022-01-07 09:18:05 +01:00
Alessandro Di Federico
40198d9659
Merge branch 'feature/pipeline-preliminary'
2022-01-05 15:44:47 +01:00
Massimo Fioravanti
b8f6303101
Fix wrong usages of StringRef::data
...
StringRef::data() does not ensure that the string is zero terminated,
thus when printed it can contain more data than expected.
Specifically, this triggered the reported name of the registers to be
incorrect, and this manifested itself as wrong inline assembly emitted.
2022-01-05 14:47:25 +01:00
Massimo Fioravanti
bdcc1d2e30
BinaryFile::BinaryFile: accept object::Binary
...
The constructor now accepts a llvm::object::Binary directly rather than
a path. Will be used by the revng-pipeline which will retain ownership
of the binary.
2022-01-05 14:47:25 +01:00
Massimo Fioravanti
889b076828
AdvancedValueInfo: fix wrong NDEBUG check
...
A extra check was performed in release only rather than in debug only.
2022-01-05 14:47:25 +01:00
Massimo Fioravanti
ec0fcfbe63
Model: separate mipsel from mips
2022-01-05 14:47:25 +01:00
Massimo Fioravanti
fdfeb2b6e9
LoadModelPass: support for external model
2022-01-05 14:45:01 +01:00
Massimo Fioravanti
79d5ca1e27
Introduce FunctionTags::IsolatedRoot
...
This will be used by the revng-pipeline to tell apart a `root` calling
isolated functions from a regular one.
2022-01-05 14:45:01 +01:00
Massimo Fioravanti
ca4c7e2c09
Add dereferenceIterator and mapToValueIterator
...
A dereference iterator is used to map a pointer-like object to the
pointee, as an example given a `vector<unique_ptr<int>> Vector`, using
`dereferenceRange(Vector)` will present a range of `int &` rather than a
range of `unique_ptr<int> &`.
mapToValueIterator can be used on a map range
to access the underlying object directly rather
than the pair<key, object>.
2022-01-05 14:45:01 +01:00
Massimo Fioravanti
80c3121c29
Introduce ProgramRunner
...
The ProgramRunner will be used by revng-pipeline to invoke the external
linker to operate on object file stored on disk.
2022-01-05 14:45:01 +01:00
Massimo Fioravanti
ac20314a92
Helpers to go from llvm:: to model::Function
2022-01-05 14:45:01 +01:00
Alessandro Di Federico
d78993ac54
Add TupleTree file (de)serialization
...
Tuple tree file serialization will be used by the revng-pipeline as a
helper function to load and store the models in the working directory.
2022-01-05 14:44:57 +01:00
Alessandro Di Federico
41008d9a08
Merge branch 'feature/tupletreereference-to-const-model'
2022-01-05 14:38:42 +01:00