Commit Graph

2666 Commits

Author SHA1 Message Date
Ivan Krysak 67bc7f8331 ABI: rename TheBinary into Binary 2023-03-15 10:19:02 +01:00
Ivan Krysak 0b0aab2161 ImportDebugInfo: explicitly depend on libABI 2023-03-15 10:19:02 +01:00
Ivan Krysak f5679262e9 DwarfImporter: prevent removal of valid arrays
The algorithm was looking for any array qualifier on a zero-sized
type, which led to some valid types being discarded in the case
when there was a pointer qualifier in-between.

`void a[100]` is not a valid type, while void *a[100]` is.
2023-03-15 10:19:02 +01:00
Ivan Krysak 8521f6bedc YAML: enable manual [de]serialization of enums 2023-03-15 10:19:02 +01:00
Ivan Krysak eb67826da6 PathList: accept non-owning strings as arguments 2023-03-15 10:19:02 +01:00
Ivan Krysak 75feff6186 model::Register: introduce isUsedInArchitecture 2023-03-15 10:19:02 +01:00
Ivan Krysak 058807ca00 model::Register: rename getArchitecture
The new name is `getReferenceArchitecture`
2023-03-15 10:19:02 +01:00
Ivan Krysak 9148f70b24 model::Register::getSize: leave a TODO 2023-03-15 10:19:02 +01:00
Ivan Krysak 7442bdc4a9 Model: introduce model::ABI::getPointerSize 2023-03-15 10:19:02 +01:00
Ivan Krysak c45b7778c1 Model: introduce copyMetadata and moveMetadata 2023-03-15 10:19:02 +01:00
Ivan Krysak 3c0c49c785 Model: add ABI::getRegisterArchitecture 2023-03-15 10:19:02 +01:00
Ivan Krysak 07837d9b9b Model: add model::Binary::recordNewTypes 2023-03-15 10:19:02 +01:00
Ivan Krysak b0e481cdef Model: add model::Binary::makeType 2023-03-15 10:19:02 +01:00
Ivan Krysak 726baf5318 Model: make Binary::recordNewType stricter 2023-03-15 10:19:02 +01:00
Ivan Krysak 69c292102d Pipeline: improve InvokableWrapperImpl::dump() 2023-03-15 10:19:02 +01:00
Ivan Krysak 3904e525b0 SortedVector: improve new element insertion
This introduces `emplace` and `emplace_or_assign` members
allowing population of the container without copying values in.

It also reworks the batch insertion. On top of adding the ability
to move the elements in (without making a copy) and constructing
them in place, it also makes the non-assign version of the inserter
a lot safer by explicitly asserting the fact that while it was
in use no duplicates were added to the vector. Before now,
the duplicates were just silently removed from the container.

It also optimizes the batch insertion somewhat by using non-stable
`std::sort` for unique case as well as replacing `std::unique`
invocation with `std::find_adjacent`.
2023-03-15 10:19:02 +01:00
Ivan Krysak 64a4672f32 STLExtras: introduce ranges::views::as_rvalue 2023-03-15 10:19:01 +01:00
Ivan Krysak a06d9fedbd STLExtras: extend revng::find family 2023-03-15 10:19:01 +01:00
Ivan Krysak e79870e7c6 STLExtras: rework the skip range modifier
Note that all this is going to be obsolete once we can start using
the compiler with c++20 `views` support.
2023-03-15 10:19:01 +01:00
Ivan Krysak 1248f8532d TTG: enable vectors of enumerations 2023-03-15 10:19:01 +01:00
Ivan Krysak 3687869795 Model: make AddPrimitiveTypes a pure analysis 2023-03-15 10:19:01 +01:00
Ivan Krysak 03be19fab8 Pipeline: fix pure (model only) analysis support
Because of a missing function overload, no container-less analysis
could have been created. This adds the said overload.
2023-03-15 10:19:01 +01:00
Giacomo Vercesi 15da250710 api/daemon: fix single analysis handling
* Let GraphQL accept zero or more parameters for analyses
* Handle the general case of analyses using zero or more containers with
  a variable ammount of targets
2023-03-15 10:19:01 +01:00
Ivan Krysak 11c0d7f02e Stop using \brief doxygen command 2023-03-15 10:19:01 +01:00
Ivan Krysak 1c44e492af yield: improve command-less pipe error messages 2023-03-15 10:19:01 +01:00
Ivan Krysak 0b1aaeaede Minor improvements 2023-03-15 10:19:01 +01:00
Alessandro Di Federico c40c22fdef Merge branch 'feature/fix-llvm-linking' 2023-03-14 20:50:59 +01:00
Giacomo Vercesi 7751143aad revng daemon: add timeout-keep-alive option
Add the `--timeout-keep-alive` option for all invocations of `revng
daemon`. This avoids some edge cases where connections are abruply
closed.
2023-03-14 20:50:28 +01:00
Alessandro Di Federico bd61df1ddd PromoteCSVs::getUsedCSVs: fix non-helpers 2023-03-13 22:53:44 +01:00
Alessandro Di Federico 6b166bf0b9 Import TaggedFunctionPass 2023-03-13 22:53:44 +01:00
Alessandro Di Federico 09541be398 getUniqueString: do not rely on named metadata
`getUniqueString` returns a dedup'd char array `GlobalVariable` given a
string. We used to rely on named metadata to dedup them. However, this
lead to issues with `LLVMContainer` cloning and linking.

The new implementation uses the name of the variable as the
de-decuplication key, circumventing the problem entirely and improving
performance.
2023-03-13 22:53:44 +01:00
Alessandro Di Federico 6f47231695 LLVMContainer: pruneDICompileUnits pre linking 2023-03-13 22:53:44 +01:00
Alessandro Di Federico 8d813e169a LLVMContainer: drop certain named MD pre linking 2023-03-13 22:53:44 +01:00
Alessandro Di Federico 4353beff22 LLVMContainer: fix how we adjust linkage
We used to turn `internal` linkage to the equivalent of C++'s inline.
We need to do the same for `private`. If we don't do this, the number of
`private` variables grows exponentially.
2023-03-13 22:53:44 +01:00
Alessandro Di Federico 927f5b38be PromoteCSVs/EnforceABI: handle declarations
PromoteCSVs and EnforceABI were not handling declarated functions
properly, leading to issues downstream.
2023-03-13 22:53:44 +01:00
Giacomo Vercesi 8e05ae5ead rcc: fix report output with multiple rules
The rule output logic was wrongly coded to do `"\n".join` where
appending a newline to each line was the correct behavior.
Also remove a leftover typo in `rcc-config.yml`.
2023-03-13 22:53:44 +01:00
Alessandro Di Federico 54e8393cb8 Minor changes 2023-03-13 22:53:44 +01:00
Alessandro Di Federico 7361da3629 Merge branch 'feature/fixes-for-hostname' 2023-02-23 14:51:35 +01:00
Alessandro Di Federico 9efe5e1366 PromoteCSVs: rename metadata to revng.abi_register 2023-02-23 14:51:10 +01:00
Alessandro Di Federico f68b7866b3 Introduce BasicBlockID
This commit introduces `BasicBlockID` as the unique identifier for a
`efa::BasicBlock` into the CFG. A `BasicBlockID` is defined by a
`MetaAddress` plus an incremental integer. This enables us to have
multiple instances of the same block in a single function, which is
particularly useful when inlining multiple times the same function.

Apart from this, the commit also does the following:

* It drops representing `MetaAddress`es a `structs` in the IR. This created
  several issues related to ABI. We now represent them as strings.

* It defines more functions in `support.h`, instead of defining prototypes
  by hand in `CodeGenerator.cpp` and the like. Specifically, `unknownPC`
  and `raise_exception_helper`. We also introduce a C "constructor" for
  `PlainMetaAddress`.

* It significantly reduces the API of `GeneratedCodeBasicInfo`, which
  was supposed to be put on a diet since a long time.  Specifically,
  many jump target related methods have been moved to free functions in
  `IRHelpers.h`.  Also `GCBI::getSuccessors` has been pushed into its
  only user, `PruneRetSuccessors`, to prevent further usage of a
  deprecated API. In the future, it would be nice to drop it entirely.

* It introduces `efa::BasicBlock::InlinedFrom`.

* Introduce an enum to represent named argument indices for `newpc`.
  This enables us to more effectively manipulate its argument list.

* It improves the verification and error reporting for
  `efa::FunctionMetadata`.

* Update tests.

This commit is preliminary to another piece of work to improve the
generality of inlining beyond the simple "fake function" scenario, for
which the feature was originally conceived.
2023-02-23 14:51:10 +01:00
Alessandro Di Federico 892922794e rcc-config.yml: ban "#pragma clang optimize off" 2023-02-23 14:51:10 +01:00
Alessandro Di Federico 1d4fc9de5b rcc-config.yml: add documentation 2023-02-23 14:51:10 +01:00
Alessandro Di Federico 8886792ebb Logger: ensure we consume llvm::Error 2023-02-23 14:51:03 +01:00
Alessandro Di Federico d3f6d43ffe PromoteCSV: tag init_ functions with register
This enables downstream passes to selectively purge calls to `init_`
functions.
2023-02-23 08:30:22 +01:00
Alessandro Di Federico 969b3c0cb7 SystemV_x86_64: ignore fs register 2023-02-23 08:30:22 +01:00
Giacomo Vercesi 2b4cfafe55 revng.api: Fix file upload/buffer reading
This commit fixes file output `revng.api` in two ways:
* The buffer's size is properly reported in `PipelineC.cpp`
* The function `deserialize_container` in `revng.api.manager` no longer
  appends a `\0` to `content`, while avoiding a redundant copy
2023-02-16 15:11:00 +01:00
Giacomo Vercesi 5c6274aff7 Yield/SVG: fix xmlns attribute value
The `xmlns` attribute outputted contained two sets of `""` (one
introducted by the format string and one from `Tag`) which would break
strict XML parsers
2023-02-16 15:09:31 +01:00
Djordje Todorovic 24a5705e12 Importer: Attach attributes when copying types 2023-02-16 11:07:52 +01:00
Massimo Fioravanti 230036d5b1 Introduce TrackingContainer
TrackingContainer is a wrapper around KeyedObjectContainers (notably,
SortedVector) intended to figure out which elements of the underlying
container have been accessed.
2023-02-16 10:58:02 +01:00
Alessandro Di Federico 2e329b2d0a Merge branch 'feature/no-error-list' 2023-02-09 14:15:01 +01:00