Ivan Krysak
207668070a
QualifiedType: add argument-less isPrimitive()
2022-11-30 15:06:54 +01:00
Alessandro Di Federico
b83edd61c0
DwarfImport: fix handling of local functions
2022-11-30 15:06:54 +01:00
Pietro Fezzardi
fd0914b460
QualifiedType: add isConst method
2022-11-22 10:12:31 +01:00
Alessandro Di Federico
5a99154196
Put Python packages into lib/python*/site-packages
2022-10-11 19:08:10 +02:00
Pietro Fezzardi
43cb77e6a3
TypeSystemPrinter: route edge to the top of nodes
2022-10-06 17:53:47 +02:00
Massimo Fioravanti
9363bbd70a
Pipeline: every container type has now a C++ type
2022-09-29 15:51:17 +02:00
Ivan Krysak
247710648f
Minor changes
2022-09-26 10:33:43 +02:00
Djordje Todorovic
5559d8431b
Introduce fix-model model pass
2022-09-21 18:37:36 +02:00
Alvise de Faveri
999df25246
Add revng model export type-graph tool
...
This tools dumps a type, a function or an entire type-system to a
dot file,representing dependencies between types as edges.
2022-09-19 08:35:06 +02:00
Djordje Todorovic
2abd250ae0
model: Skip nameless dyn functions in PE
2022-08-31 18:07:47 +02:00
Massimo Fioravanti
915c083661
Pipes: reorganize who defines pipes
2022-08-29 14:44:35 +02:00
Alessandro Di Federico
1d91ed9beb
tuple_tree_generator: make C++ just a regular backend
...
The `tuple_tree_generator` component was still heavily treating C++ as a
special citizen.
This commit normalizes the situation.
2022-08-11 16:20:42 +02:00
Alessandro Di Federico
6a6cd939db
Rework EarlyFunctionAnalysis
2022-08-08 13:55:34 +02:00
Alessandro Di Federico
b07d134b73
Introduce CanonicalRegisterValues in the model
...
These canonical values ease certain analysis that can assume their value
at function entry.
2022-08-08 13:55:25 +02:00
Alessandro Di Federico
0566381ecf
ELFImporter: make importing more robust
2022-08-08 13:55:25 +02:00
Alessandro Di Federico
e0e8b4e5b6
ELFImporter.cpp: s/Log/ELFImporterLog/
2022-08-08 13:55:25 +02:00
Alessandro Di Federico
81c2a93add
Normalize FilePortion
2022-08-08 13:54:41 +02:00
Ivan Krysak
65d1a016d4
Standardize concept naming across the codebase
2022-08-05 17:27:56 +03:00
Alessandro Di Federico
c2651f7218
importBinary: fail if no architecture is specified
2022-08-04 17:27:06 +02:00
Djordje Todorovic
1243d1061c
Introduce revng model hard-purge
...
In addition, introduce a new model Pass:
revng model opt -prune-unsused-types
2022-07-28 15:02:55 +02:00
Djordje Todorovic
46bc14bc73
Model: Add an opt for user defined paths of PDB
2022-07-28 14:52:50 +02:00
Djordje Todorovic
a36e22729f
Model: Add PDB support
2022-07-28 14:52:50 +02:00
Djordje Todorovic
9efb9cb55f
Model: Add parsing of delay dyn syms to PECOFF
...
This parses dedicated symbols similar to ELF's lazy linking.
2022-07-28 14:52:02 +02:00
Djordje Todorovic
b3cd1316f0
ELFImporter: Fix the documentation comment
2022-07-28 14:52:02 +02:00
Djordje Todorovic
098f864d8d
Model: Add parsing of dyn syms to PECOFFImporter
...
This parses symbols similar to ELF's .dynsym.
2022-07-28 14:52:02 +02:00
Djordje Todorovic
b79158bafc
Model: Add parseSymbols() to PECOFFImporter
...
This parses symbols similar to ELF's .symtab.
2022-07-28 14:52:02 +02:00
Djordje Todorovic
9d18d84f68
ELFImporter: Improve the parseSymbols()
...
This is an NFC.
2022-07-28 14:52:02 +02:00
Djordje Todorovic
5a72d968e5
Model: Add a method for parsing pe sections hdrs
...
This is an NFC.
2022-07-28 14:52:02 +02:00
Djordje Todorovic
8cbdcf278d
Model: Import PE when file size is > than virtual
...
Without this patch, the import part would fail with an assertion
even for a simple case since it doesn't expect that file size
could be larger than virtual.
From the microsoft documentation:
```
Because the SizeOfRawData field is rounded but the VirtualSize field
is not, it is possible for SizeOfRawData to be greater than
VirtualSize as well. When a section contains only uninitialized data,
this field should be zero.
```
We rather choose not to percolate this into the Model.
2022-07-28 14:52:02 +02:00
Djordje Todorovic
6d390af909
Model: Factor target-dep code out of ELFImporter
2022-07-28 14:51:40 +02:00
Giacomo Vercesi
09009836a1
PipelineC: expose globals verification
2022-07-28 08:47:46 +02:00
Alessandro Di Federico
d42fb9bb13
Segment::verify(): relocations can be out segment
...
We used to check that the target address of a relocation needs to be
within the `model::Segment` it's referring to.
However this is not correct.
2022-07-27 18:57:21 +02:00
Antonio Frighetto
4bc21328d8
Model: reserve type prefixes
2022-07-22 16:10:51 +02:00
Antonio Frighetto
5500fadb0e
MachOImporter: add segment name
2022-07-22 16:10:51 +02:00
Antonio Frighetto
186d907be3
Model: extend model::Segment
...
`Segment` now includes a `Type` of struct kind. This is intended to
emit the segment as a struct later in decompilation. The implementation
of name has also been added.
2022-07-22 16:10:51 +02:00
Giacomo Vercesi
24c51f385a
CMake: generate model.ts
2022-05-09 13:37:58 +02:00
Alessandro Di Federico
a4d7e78856
Stop registering Invalid model::Functions
2022-04-29 17:57:49 +02:00
Alvise de Faveri
a3110c0b59
Add QualifiedType::is(TypeKind)
2022-04-20 11:25:46 +02:00
Massimo Fioravanti
44720eedbd
Redesign TupleTreeDiff
...
`TupleTreeDiff` is now type-safe and owns the changes.
2022-04-15 15:14:13 +02:00
Pietro Fezzardi
7f65b1117a
New AddPrimitiveTypesPipe
...
This pipe is executed during the Lift step and populates the model with
all the required primitive types.
2022-04-12 16:40:27 +02:00
Pietro Fezzardi
6b2b2e8ada
Make model::Type::edges() method const
2022-04-08 18:58:58 +02:00
Pietro Fezzardi
e40ded965f
QualifiedType RawFunctionType.StackArgumentsType
...
The `StackArgumentsType` field of `RawFunctionType` was the only
cross-reference between `model::Type`s that did not use
`model::QualifiedType` but a naked `TupleTreeReference`.
Switching it to `QualifiedType` make all cross-references across
`model::Type`s homogeneous.
2022-04-08 18:58:58 +02:00
Pietro Fezzardi
63a6676551
Make EnumType.UnderlyingType a QualifiedType
...
This was one of the few places left in the type system where a
`model::Type` referred to another one not using QualifiedType, but a
naked `TupleTreeReference`.
Switching it to be a `model::QualifiedType` makes cross-references
between `model::Type`s more homogenenous, requiring less corner-cases
to handle for whoever manipulates types.
2022-04-08 18:58:58 +02:00
Giacomo Vercesi
a2b5dbb1dc
TupleTreeGenerator: autogenerate Kind
2022-04-08 17:36:59 +02:00
Giacomo Vercesi
039f7db93e
model::*: ensure Kind -> Class correspondence
2022-04-08 17:31:05 +02:00
Antonio Frighetto
20cdfe668a
EFA: take the control-flow graph out of the model
...
The control-flow graph and all its hierarchy components
have been moved from `model` to `efa`. The CFG is now
serialized onto the LLVM IR module as a metadata.
2022-04-05 15:37:57 +02:00
Ivan Krysak
1b03adca5e
Make function type convertions self-sufficient
2022-03-28 15:38:04 +02:00
Massimo Fioravanti
b2dfd2bc64
TupleTreeGenerator.cmake: single call generation
2022-03-28 12:17:05 +02:00
Massimo Fioravanti
5bdce4bf36
LoadModelPass: support command-line path
...
It is now possible to load a model from file instead of the one written
in the module itself:
revng opt --model-path=<path>
2022-03-28 12:17:05 +02:00
Alessandro Di Federico
af1828e090
DwarfImporter: better support for 0-sized types
...
We now ignore field of `struct`/`union` that have a 0-sized type.
We now also ignore types containing a an array with 0-sized elements.
2022-03-28 12:17:05 +02:00