Alessandro Di Federico
97f0941aee
Introduce model::Section
2022-03-08 12:26:07 +01:00
Alessandro Di Federico
8570923d64
Introduce model::Relocation
2022-03-08 12:25:59 +01:00
Alessandro Di Federico
39ace7dc56
mv revng{DwarfImporter,ModelImporterDwarf}
2022-03-08 12:25:47 +01:00
Alessandro Di Federico
81f21ae21d
Make model::Binary::EntryPoint optional
2022-03-08 12:25:47 +01:00
Alvise de Faveri
0659e6b6a3
Model: Improve getCallSitePrototype() helper
...
1. Hoist the logic to retrieve a model CallEdge from an llvm::CallInst
out of `getCallSitePrototype()`, in a separate `getCallEdge()`
function.
2. Modify `getCallSitePrototype()` so that the parent function's type is
optional.
2022-03-02 15:40:27 +01:00
Alvise de Faveri
ea53846fa0
Add Qualifier::createPointer(Architecture)
2022-03-02 15:40:27 +01:00
Alvise de Faveri
62b5ec38cd
Add CallEdge::isDirect()
2022-03-02 15:40:27 +01:00
Massimo Fioravanti
b982b69c5d
revng-model-inject: support model-less modules
...
Inject is meant to inject a model into an `llvm::Module`, but it fails
when operating on a Module that had no model metadata.
This commit fixes the bug.
2022-03-02 15:40:27 +01:00
Ivan Krysak
541643afc3
Move function type conversion to librevngABI
2022-02-24 23:56:30 +01:00
Filippo Cremonese
8511cbf40b
tuple_tree_generator: drop tags
...
They were more harmful than beneficial.
2022-02-23 17:36:34 +01:00
Alessandro Di Federico
10dc6744b4
mv include/revng/{Model,TupleTree}/EnumTraits.h
...
`EnumTraits.h` is not model-specific.
2022-02-23 17:32:50 +01:00
Ivan Krysak
9771ae29d6
Move RegisterState to ABI
2022-02-14 13:35:37 +01:00
Ivan Krysak
8d876b0def
ABI: introduce bulk function conversion
2022-02-14 13:35:37 +01:00
Ivan Krysak
e20e65ca9a
Require a description when registering a pass
2022-02-14 13:35:36 +01:00
Ivan Krysak
7369e49eba
Implement "best effort" function type convertion
2022-02-14 13:35:36 +01:00
Ivan Krysak
68129c9221
Add model::Binary::DefaultABI field
2022-02-14 13:35:36 +01:00
Ivan Krysak
d108f7f049
Extend model::ABI enumeration
2022-02-14 11:28:36 +01:00
Ivan Krysak
ec625e8533
Define architecture-specific register access
2022-02-14 11:28:36 +01:00
Ivan Krysak
a21dff02de
Add additional registers to the model
2022-02-14 10:57:00 +01:00
Alessandro Di Federico
806f076709
Minor changes
2022-02-14 09:39:44 +01:00
Alessandro Di Federico
91fd04079a
AllPasses.h: include Verify.h
2022-02-07 20:11:15 +01:00
Alessandro Di Federico
0f084ed620
Minor changes
2022-02-07 16:55:46 +01:00
Alessandro Di Federico
a353e00ac1
Introduce model passes
2022-01-31 16:28:14 +01:00
Alessandro Di Federico
3980ee3fad
Introduce model tools
2022-01-31 16:28:14 +01:00
Alessandro Di Federico
b3d6c721ad
Introduce purgeUnnamedAndUnreachableTypes
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
f3634e165f
Introduce model::Type::localCompare
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
74a7496020
deduplicateNames -> promoteOriginalName
...
This commit switches from `deduplicateNames`, which changed certain
`CustomName` values, to `promoteOriginalName`, which updates empty
`CustomName` using non-ambiguous versions of `OriginalName`.
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
863652f480
Introduce OriginalName in the type system
...
The goal of `OriginalName` is to keep track of the original name of a
symbol upon import.
In future, this will also be used to promote it to `CustomName`.
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
8d22c5205f
Push CustomName to model::Type
...
Before this commit `CustomName` was in each inheritor, except for
`model::PrimitiveType`.
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
54fcc1d7fe
struct_impl.cpp.tpl: include headers in any case
2022-01-27 11:51:03 +01:00
Alessandro Di Federico
b31e7b1f5e
Introduce model::Type::edges()
...
This makes building a graph for the type system very easy.
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
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
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
3ab32cd2ef
tuple_tree_generator: make fully standalone
2022-01-21 18:05:51 +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
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
ac20314a92
Helpers to go from llvm:: to model::Function
2022-01-05 14:45:01 +01:00
Pietro Fezzardi
ff4f91a570
Model/Type.h: explicit constructors from uint64_t
2022-01-05 13:33:52 +01:00
Pietro Fezzardi
275959618f
TupleTree: make Root a std::variant<T *, const T*>
...
This enables holding TupleTreeReferences to immutable model objects
2022-01-05 13:33:52 +01:00
Alessandro Di Federico
4d7a175996
Extract TupleTree
2021-12-22 17:47:54 +01:00
Alessandro Di Federico
777adcbd45
model::Binary: add segments and imported libraries
...
Now, `scripts/revng` uses the model and we no longer need to emit
.li.csv and .need.csv.
2021-12-22 17:47:54 +01:00
Alessandro Di Federico
e113cb579e
Introduce revng/Model/IRHelpers.h
2021-12-17 18:49:34 +01:00
Alessandro Di Federico
ec0e88351d
model::Function: make CFG the last field
2021-12-17 18:49:17 +01:00
Alessandro Di Federico
9b05bfd2ba
StackAnalysis: record FinalStackOffset
2021-12-17 18:49:09 +01:00
Antonio Frighetto
f1ac5e4075
Model: handle NoReturn functions in CallEdge
2021-12-15 18:03:30 +01:00
Alessandro Di Federico
96d133d72f
Introduce model::FunctionAttributes
2021-12-15 18:03:30 +01:00
Alvise de Faveri
2f4b716e6b
Add Model::toString() and writeToFile()
...
These functions can be used in conjunction to dump the Model on a
file during a gdb session, for example:
```
(gdb) p writeToFile(Model->toString(), "/tmp/model.yaml")
```
2021-11-19 10:17:09 +01:00