Commit Graph

623 Commits

Author SHA1 Message Date
Ivan Krysak fc45885841 Outline sugiyama style layouter interface 2022-06-14 18:55:59 +03:00
Ivan Krysak a6a2b030db Implement node size calculation 2022-06-14 18:55:59 +03:00
Ivan Krysak da4bfb8644 Implement CFG extraction 2022-06-14 18:55:59 +03:00
Ivan Krysak e7a523162a Implement GenericGraph-based CFG exporter 2022-06-14 18:55:59 +03:00
Ivan Krysak 4289c8aa74 Outline yield::Graph 2022-06-14 18:55:59 +03:00
Ivan Krysak d6b3d9f346 Outline yield::cfg::Configuration 2022-06-14 18:55:59 +03:00
Ivan Krysak b59d5c6cfe Move delay slot control down to basic block level 2022-06-14 18:55:59 +03:00
Ivan Krysak 3e62ec6d19 Implement labeled block detection 2022-06-14 18:55:59 +03:00
Ivan Krysak d515ad5c9f Move fallthrough detection to yield::cfg 2022-06-14 18:55:59 +03:00
Ivan Krysak 9af5429b72 Add a basic CFG pipeline 2022-06-14 18:55:59 +03:00
Ivan Krysak 7b4778302f Separate process-assembly from yield-assembly 2022-06-14 18:55:59 +03:00
Ivan Krysak 1eebad74cd Use TTG-based assembly to weaken dependency on efa 2022-06-14 18:55:59 +03:00
Ivan Krysak 4d09dcc351 Switch to TTG-based assembly description 2022-06-14 18:55:59 +03:00
Ivan Krysak d4585f8ee5 Use tuple tree generator for assembly description 2022-06-14 18:55:59 +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
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
Massimo Fioravanti 2c48713af9 Make TupleTreeDiff compatible with regular vectors 2022-05-24 08:50:24 +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
Pietro Fezzardi bfe67413d3 StringMapContainer: find() and contains() methods 2022-05-11 14:39:31 +02:00
Pietro Fezzardi 1c6dac225a Add dedicated non-generated TypeKind.h header
This is necessary because now QualifiedType.h needs TypeKind, but
including Type.h directly would result in a circular dependency between
Type.h and QualifiedType.h
2022-05-11 14:39:31 +02:00
Giacomo Vercesi 8a61d7c2b9 Model/ABI.h: make doc fields multiline 2022-05-09 13:35:10 +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 6125ad4a71 Define internal assembly representation 2022-05-06 18:51:47 +02:00
Ivan Krysak cfc9915b39 Add ModelInModule::getModule. 2022-05-06 18:51:47 +02:00
Ivan Krysak 42c1461b9f Add MetaAddressType::getLLVMCPUFeatures 2022-05-06 18:51:47 +02:00
Ivan Krysak 20ccb79dd1 Add constant module tag-based filters 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 6ba8010507 Add a missing include 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 92d3b95fba Model: make more things optional 2022-04-29 17:57:49 +02:00
Alessandro Di Federico 291ed672b4 Introduce FunctionType::Layout::dump 2022-04-29 17:57:49 +02:00
Alessandro Di Federico 83f08249d7 Introduce Layout::Argument::StackSpan::operator+ 2022-04-29 17:57:49 +02:00