Diablo is released under the GNU General Public License v2. As such you are free to use, modify and redistribute it free of charge, as long as you contribute all changes back to the community. We would very much appreciate it if you cited our LCTES paper [bibtex] if you publish something based on work you've done with Diablo.

Diablo is a research prototype that is under heavy development. Do not expect Diablo releases to be production quality code! However, we are willing to support Diablo users, so if you experience any problems using Diablo, or if you have any questions or suggestions, please contact us.

Latest development version

You can get the latest version by anonymous SVN with the following command:

svn co --username anon --password anon diablo

A number of sample frontends for different architectures are included (in the frontends/ directory), which can be built with the corresponding Makefile.<arch>. Use these makefiles and frontends as inspiration to build your own Diablo-based tools. Running make without parameters lists the currently buildable targets.

Auxiliary downloads:

In order to work correctly, Diablo needs some information about code and data in a program that a regular GCC-based toolchain does not preserve (the ARM ADS v1.1 and RVCT toolchains do preserve this information). Therefore, you need to patch any GCC-based tool chain before you can use Diablo on programs generated by it. These patches do not influence the generated code, they only preserve some compile-time information that is also useful for Diablo but not for a regular linker.

Current toolchains and patches

  • diablo-binutils-2.18a-gcc-4.3.6-eglibc-2.11-arm-eabi.tar.bz2: ARM/Linux-EABI (softfloat) GCC 4.3.6, GNU Binutils 2.18a, EGLIBC 2.11. Usage instructions: unpack and execute to get help.
  • qemu-1.5.0-full-trace.patch: Qemu/ARM 1.5.0 patch. Patch that can be applied to Qemu 1.5.0 (and 1.5.1) so that it produces full traces that can be converted into Diablo profile inputs. Execute diablo/scripts/ for more info.

Older patches and toolchains

  • Binutils 2.16.1 patch
  • GNU Binutils 2.13.2/2.14 patch
  • GCC 3.3.2 patch (should apply to any GCC 3.x version)
  • GLIBC 2.3.2 patch
  • toolchain-i386-glibc.tar.bz2: native toolchain i386/Linux, GCC 3.2.2, GNU Binutils, GLIBC 2.3.2 (precompiled). Note that that there is a small error in this package, in that some dynamic libraries are looked up in a hardcoded absolute directory. You can fix using the following commands:
    mkdir -p /export/home/dchanet/i686-pc-linux-gnu/lib
    ln -s /lib/ /export/home/dchanet/i686-pc-linux-gnu/lib/
    ln -s /lib/ /export/home/dchanet/i686-pc-linux-gnu/lib/
    ln -s /lib/ /export/home/dchanet/i686-pc-linux-gnu/lib/
  • toolchain-arm-glibc.tar.bz2: cross toolchain Linux/i386 -> ARM/OABI (little endian), GCC 3.3.2, Binutils 2.14, GLIBC 2.3.2 (precompiled).

Old Diablo releases (unsupported, not buildable on modern Linux distributions)