Commit Graph

711 Commits

Author SHA1 Message Date
Djordje Todorovic 9193618fab model: Add fix-model Pass 2022-09-21 10:10:04 +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
Pietro Fezzardi ec9a5b0608 Use lexicographical compare for model::Qualifier 2022-09-19 08:34:20 +02:00
Giacomo Vercesi d68640e2cb upcast: use universal references 2022-09-01 17:48:00 +02:00
Giacomo Vercesi a7eb0a8d59 Ranks.h: introduce additional Ranks 2022-09-01 17:47:55 +02:00
Giacomo Vercesi 37caa91e6d Ranks: fix Rank keys
Use model::Function::Key for the Function rank instead of the naked
MetaAddress as it allows forward-compatibility if the model::Function
key is ever changed.

Use a std::tuple<uint64_t> for TypeField as it's the current type for
{Struct,Enum,Union}Field.key()
2022-09-01 17:46:57 +02:00
Giacomo Vercesi 7cff7737ac Introduce ModelHelpers.h
ModelHelpers contains helper functions that produce the appropiate
edit path for the given elements of the model.
2022-09-01 17:46:40 +02:00
Giacomo Vercesi e443cd3766 YAMLTraits.h: add traits for std::tuple<T>
This commit introduces a YAML trait for `std:tuple`s of a single
scalar that allows their serialization/deserialization generically.
2022-09-01 17:46:35 +02:00
Giacomo Vercesi 8aab66a517 Rank.h: restrict keys to scalars and enums
Rank keys so far could be of any type as long as it was
yaml-serializable, however this would introduce problems down the
line if a Location contained for example array or mapping.
This commit restricts the type of keys to only scalars and enums,
to limit the chance that a key serializes in an invalid location.
2022-09-01 17:46:30 +02:00
Giacomo Vercesi 7d77d388b5 ConstexprString: allow default construction 2022-09-01 17:46:30 +02:00
Giacomo Vercesi a05737696f Introduce revng/Model/ForwardDecls.h 2022-09-01 17:46:25 +02:00
Giacomo Vercesi b7a23dcd4a Rename and improve ptml::TagScope
Renames ptml::TagScope to ScopeTag and fixes issue when Tag.scope
was called with a temporary.
2022-09-01 17:46:10 +02:00
Giacomo Vercesi 84e29d6b96 Fix linkage of Tag::scope in Tag.h 2022-09-01 15:49:44 +02:00
Massimo Fioravanti 9a4e97d8ea Pipeline: handle having 0 functions 2022-08-31 18:07:47 +02:00
Alessandro Di Federico f93eefda66 replaceAll: move to STLExtras.h 2022-08-31 18:07:47 +02:00
Massimo Fioravanti 9ce7b1e527 Drop Pipe suffix from pipe names 2022-08-29 14:45:45 +02:00
Massimo Fioravanti 633f49c1ef Introduce dedicated namespace for kinds and ranks 2022-08-29 14:44:53 +02:00
Massimo Fioravanti 915c083661 Pipes: reorganize who defines pipes 2022-08-29 14:44:35 +02:00
Massimo Fioravanti a8a8eda9ac Pipeline/Invokable.h: split 2022-08-29 14:44:20 +02:00
Massimo Fioravanti 2a996ef666 Pipeline: allow analyses to fail 2022-08-29 14:44:10 +02:00
Massimo Fioravanti 7e75a1a4b8 Pipeline: introduce preconditions for pipes 2022-08-29 14:44:02 +02:00
Massimo Fioravanti 6b099c57e8 Pipeline: introduce options for analyses 2022-08-29 14:43:25 +02:00
Alessandro Di Federico 178b58b9d5 ImportBinary: turn into an analysis 2022-08-26 09:50:42 +02:00
Alessandro Di Federico 38d91a793b AddPrimitiveTypes: turn into an analysis 2022-08-26 09:50:42 +02:00
Alessandro Di Federico d81fc9a5f6 getAcceptedKinds: introduce new assertion 2022-08-26 09:50:42 +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
Massimo Fioravanti 5894867786 revng-pipeline: s/-p/--resume/ 2022-08-10 09:49:24 +02:00
Massimo Fioravanti d250d43ee4 revng-pipeline: factor out common CLI options
Common CLI options that were used by multiple tools and have now been
isolated into a single include file to be used before declaring main.
2022-08-10 09:49:24 +02:00
Massimo Fioravanti 261a114d6d Pipeline: corner-case fix in backward deduction 2022-08-10 09:49:24 +02:00
Massimo Fioravanti b49062b2d6 revng-pipeline: introduce --produce-all-single 2022-08-10 09:49:24 +02:00
Massimo Fioravanti 4cd5abe2b0 revng-pipeline: introduce --produce and --analyze 2022-08-10 09:49:24 +02:00
Massimo Fioravanti 9c13f8dbdd Introduce revng-artifact 2022-08-10 09:49:24 +02:00
Massimo Fioravanti 96bd5835d8 revng-pipeline: rework file-to-container syntax 2022-08-10 09:49:24 +02:00
Massimo Fioravanti 85a9c9637f revng-pipeline: rework logging 2022-08-10 09:49:24 +02:00
Massimo Fioravanti aa36cb7127 LLVMContainer: deduplicate linkage-related code 2022-08-10 09:49:24 +02:00
Massimo Fioravanti 14d71289fc Minor changes 2022-08-10 09:49:16 +02:00
Alessandro Di Federico 6a6cd939db Rework EarlyFunctionAnalysis 2022-08-08 13:55:34 +02:00
Alessandro Di Federico a844589739 ProgramCounterHandler: align PC address
ProgramCounterHandler now emits code masked with an alignment mask to
ease the job of various analyses.
2022-08-08 13:55:26 +02:00
Alessandro Di Federico cf9a0bc3fc getPrototype: don't fail on indirect calls 2022-08-08 13:55:26 +02:00
Alessandro Di Federico 562bb9959d Reimplement GCBI::getBlocksGeneratedByPC
GCBI::getBlocksGeneratedByPC has been reimplemented using recursive
coroutines.  Caching dominator trees was very error-prone.
2022-08-08 13:55:26 +02:00
Alessandro Di Federico ff8ca0aaff AVI: relax allowed operations on symbol
It is now legal to `and` and `bswap` the address of a symbol.
2022-08-08 13:55:26 +02:00
Alessandro Di Federico 4d69437548 Split moveBlocksInto off moveToNewFunctionType 2022-08-08 13:55:25 +02:00
Alessandro Di Federico 40f672ead9 EFA debug passes: raw_{fd_,}ostream 2022-08-08 13:55:25 +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 6d0fd9ada5 Make abi::FunctionType::Layout::Layout() public 2022-08-08 13:55:25 +02:00
Alessandro Di Federico bdfcbdd8d9 Implement std::set intersection 2022-08-08 13:55:23 +02:00
Alessandro Di Federico 2088a65fa0 Implement SuccessorsList::operator== 2022-08-08 13:54:41 +02:00
Alessandro Di Federico c4ca2e5d14 Introduce MetaAddress::isIn 2022-08-08 13:54:41 +02:00
Alessandro Di Federico c2f16b0907 Minor changes 2022-08-08 13:54:40 +02:00
Ivan Krysak 7b7c4c25b9 Standardize the pipe names to use CamelCase 2022-08-05 21:46:46 +03:00