mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
acf5858099d4e29a9d7f67ca4acaa7079b25ec11
(the following is the original commit message) Now that the nodes are placed into the grid (at least horizontally), it's possible to focus on the edges. Since, the information about the number of edges going from/to each of the layers is known, it's possible to determine the number of horizontal space needed to placed those. In this part of the layouter, the focus is on three different laning points: - horizontal lanes between layers. - entry lanes for each of the nodes. - exit lanes for each of the nodes. Indexation is done independently for each of the lane types.
*******
Purpose
*******
``revng`` is a static binary translator. Given a input ELF binary for one of the
supported architectures (currently i386, x86-64, MIPS, ARM, AArch64 and s390x)
it will analyze it and emit an equivalent LLVM IR. To do so, ``revng`` employs
the QEMU intermediate representation (a series of TCG instructions) and then
translates them to LLVM IR.
************
How to build
************
``revng`` employs CMake as a build system.
In order to build ``revng``, use orchestra:
https://github.com/revng/orchestra
To run the test suite simply, from the build directory, run:
.. code-block:: sh
# Enter in the build directory
orc shell -c revng
# Run the tests
ctest -j$(nproc)
***********
Example run
***********
The simplest possible example consists in the following:
.. code-block:: sh
# Install the ARM toolchain
orc install toolchain/arm/gcc
# Enter in the build directory
orc shell -c revng
# Build programs (skip building test material)
ninja revng-all-binaries
# Create hello world program
cat > hello.c <<EOF
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello, world!\n");
}
EOF
# Compile
armv7a-hardfloat-linux-uclibceabi-gcc \
-Wl,-Ttext-segment=0x20000 \
-static hello.c \
-o hello.arm
# Translate
./bin/revng translate hello.arm
# Run translated version
./hello.arm.translated
# Hello, world!
Languages
C++
77.1%
Python
12.6%
MLIR
4.4%
CMake
1.9%
LLVM
1.4%
Other
2.5%