Commit Graph

2939 Commits

Author SHA1 Message Date
Pietro Fezzardi 4188b709be Merge BeautifyGHAST back into RestructureCFG
The beautification library was split into a separate library for
historical reason, having to do with LLVM passes, their dependencies,
and dirty hacks we had around.

Now the LLVM passes, and the hacks are gone, so we can merge back
everything together.
2022-05-11 15:19:34 +02:00
Pietro Fezzardi 97f0f8c521 IRHelpers: add deleteOnlyBody helper 2022-05-11 15:19:34 +02:00
Pietro Fezzardi 604d370239 Remove LLVM passes RestructureCFG, BeautifyGHAST
Now that the late stage of the decompilation pipeline is managed with
revng-pipeline, and we have a standalone tool for decompilation, we
have no need to use LLVM passes anymore for those stages.

This commit also renames the directories to avoid the confusing Pass
suffix, not what LLVM passes are gone.
2022-05-11 15:19:34 +02:00
Pietro Fezzardi fc40f646a4 Replace CBackendPass with revng-decompile tool
This commit replace the old CBackendPass with a standalone tool:
revng-decompile.
This pass at the moment runs the three stages of decompilation:
  - CFG restructuring
  - Beautify GHAST
  - C Code generation
2022-05-11 15:19:25 +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
Pietro Fezzardi 238b98c3da Switch all revng-c to revng-pipeline 2022-05-11 12:42:38 +02:00
Pietro Fezzardi f8c512f0b8 Drop LLVM passes from lib/HeadersGeneration
Now the emission of C headers for decompilation is entirely handled
through the new revng-pipeline infrastructure and/or via standalone
tools.
2022-05-11 12:42:38 +02:00
Pietro Fezzardi c88504afbf Drop old flag -single-decompilation
This flag was used with the old C backend to decompile only a single
function from a binary.

The logic of selecting functions in a binary for decompilation is now
part of revng-pipeline, so the -single-decompilation option and the
associated TargetFunctionOption library can be dropped.
2022-05-11 12:42:38 +02:00
Pietro Fezzardi 5071fe8dc4 Add CDecompilationPipe 2022-05-11 12:42:38 +02:00
Pietro Fezzardi 56de892efb Add HelpersToHeaderPipe 2022-05-11 12:42:38 +02:00
Pietro Fezzardi 7e926db200 Add ModelToHeaderPipe 2022-05-11 12:36:32 +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
Pietro Fezzardi a4dae8c903 Add LoadGHASTWrapperPass 2022-05-05 14:53:30 +02:00
Alessandro Di Federico f85f08e410 SegregateStackAccesses: handle CABIFunctionType
This commit heavily reworks SegregateStackAccesses in order to have
`llvm::Function`s reflect the prototype in the model.
2022-05-03 21:48:07 +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
Alessandro Di Federico 9e46d4fdcc Introduce getLLVMTypeForScalar(QualifiedType) 2022-04-29 17:57:49 +02:00
Alessandro Di Federico 0f3c29fa1b Split moveToNewFunctionType off changeFunctionType 2022-04-29 17:57:49 +02:00
Alessandro Di Federico a355a90c7e model::Binary::getPointerTo(model::QualifiedType) 2022-04-29 17:57:49 +02:00
Alessandro Di Federico 85e031c218 FunctionType::Layout: construct from model::Type 2022-04-29 17:57:49 +02:00
Alessandro Di Federico 4904f8cbe1 GeneratorIterator: simplify iterators 2022-04-29 17:57:49 +02:00
Massimo Fioravanti 016a9464b8 Model diff: handle UpcastablePointer correctly 2022-04-29 17:57:49 +02:00
Alessandro Di Federico e6f6010cfd Build with -fvisibility-inlines-hidden
`-fvisibility-inlines-hidden` ensures that each dynamic library uses its
own version of each `inline` function.

This reduces the number of exported symbols and resolves issues related
to picking a version of a weak symbol that has already been deleted upon
`dlclose`.

The downside of this flag is that the address of `inline` functions can
be different across different libraries. This commit drops certain
assertions that were relying on this behavior.
2022-04-29 16:40:24 +02:00
Giacomo Vercesi 168eab6cc5 Use /proc/self/maps to determine root
Use the path of the mapped librevngSupport.so to determine the root
directory.
2022-04-28 22:18:08 +02:00
Pietro Fezzardi e9470d031d Add std::map-like methods to StringMapContainer 2022-04-27 17:40:21 +02:00
Pietro Fezzardi de0398754d Add makeStringMapContainerFactory 2022-04-27 17:09:28 +02:00
Giacomo Vercesi 4445a841b2 revng-pipeline: introduce artifacts
Add a new key to a Step, named Artifacts. If present, it indicates that
the step has a "default" Kind and Container that can be easily retrieved
without explicitly specifying either when producing an artifact.
2022-04-26 15:59:35 +02:00
Giacomo Vercesi 99ae9c98e0 Add MIMEType to container
Add additional field MIMEType to Container.

This allows API consumers to know at runtime how to treat the data
within a container without any prior knowledge.
2022-04-26 15:59:35 +02:00
Giacomo Vercesi f4d63759de PipelineC: expose kinds, ranks and more
Adds missing API functions to PipelineC that will be needed by the
GraphQL API:

* Kinds enumeration
* Get Rank and parent of a Kind
* Enumerate and inspect Ranks
* Get a Step's parent

Included are some docstring fixes
2022-04-26 15:05:30 +02:00
Giacomo Vercesi 87b09fd401 PipelineC: Refactor headers
Split PipelineC.h in 4 separate header, this is due to cffi not
being able to interpret `#ifdef`s so C++ declarations need to be
in a separate file.
2022-04-26 15:05:30 +02:00
Giacomo Vercesi a831fa8e74 ContainerSet: add isContainerRegistered
This function allows to check if a container is registered,
irrespective of its initialization status
2022-04-26 15:05:30 +02:00
Filippo Cremonese 1af425c730 Minor changes 2022-04-26 15:05:30 +02:00
Pietro Fezzardi fbe4f7520c Add SegregateStackAccessesPipe 2022-04-26 14:33:05 +02:00