Diablo 0.4.2 released

News Item:
Version: 0.4.2
Release Date: February 3 2006
Modules: support object flowgraph anopt lancet kdiablo

Diablo (Diablo Is A Better Link-Time Optimizer) is a collection of reusable libraries that can be used to write retargetable link-time program rewriters. More information about Diablo can be found on the website.
These release notes cover the changes since the 0.4.1 release (December 16 2005), download and installation instructions, known issues and acknowledgements.
We are definitely interested in your feedback. If you have problems using Diablo, or if you have suggestions or questions, subscribe to the mailing list and/or send mail to
diablo at elis.ugent.be.
Changes since the last release
Since the last release we have added a new module for optimizing 2.4 linux kernels called kDiablo.
Futhermore, this release includes bug fixes, code cleanups, generic address fixes, new spec files and build cleanups since 0.4.1 as well as some preliminary work to support new architectures. For a complete list of changes see the Changelog in the release directory.
Downloading and Installing Diablo 0.4.2
To download and install diablo 0.4.2, go to http://diablo.elis.ugent.be/sites/diablo/files/release-0.4.2/

  • Option 1: automated build
    Get the download and build script called get_current.bash. Save it in a directory in which you want to install diablo. Execute the script. It will fetch the tarballs listed in the above directory, extract them and build local versions of all the libraries that make up diablo. After the script finishes (takes some time), you end up with a directory called current. It contains the diablo libraries in current/lib and headers in current/include, as well as pkg-config information in current/lib/pkgconfig.
  • Option 2: manual build
    The diablo libraries need to be build in the following order
    1. diablosupport
    2. diabloobject
    3. diabloflowgraph
    4. diabloanopt
    5. lancet

    Normally you should only enable support for 32 bit architectures and static libraries (
    ./configure --enable-32-bit --disable_shared

  • Option 3: precompiled
    Check if there are precompiled libraries for your architecture in http://diablo.elis.ugent.be/sites/diablo/files/release-0.4.2/rpms.
    If we do not host rpms for your architecture and you want to volunteer to build packages, send us an email.

Once this is done, you can go to http://diablo.elis.ugent.be/sites/diablo/files/release-0.4.2/ and download one of the
frontends listed there, e.g., frontend_diablo_arm.c.
To compile this frontend, do:

export PKG_CONFIG_PATH=&lt replace with path to current &gt/current/lib/pkgconfig
gcc -g -o diablo_arm `pkg-config --libs --cflags diabloanopt_opt32` frontend_diablo_arm.c \
`pkg-config --libs --cflags diabloanopt_opt32` -lJudy

or use the new config scripts:

export PATH=$PATH:&lt replace with path to current &gt/current/bin
gcc -g -o diablo_arm `diabloanopt_opt32-config --cflags` frontend_diablo_arm.c `diabloanopt_opt32-config --libs`

A lancet frontend is included in the lancet module. After compiling the lancet module it should be installed in prefix/bin
Known Issues
MIPS support is disabled (no maintainer/not enough interest).
FIT (instrumentation) is disabled.
x86 instruction assembly in the GUI is disabled. We have a working version, but we want to release it as a seperate library as it is not developed by ourselves.
The following people contributed to the 0.4.2 release(*):
Active developers (people that make (and made) too many changes to Diablo to list them here):

  • Bruno De Bus (bdebus at elis.ugent.be)
  • Bjorn De Sutter (brdsutte at elis.ugent.be)
  • Dominique Chanet (dchanet at elis.ugent.be)
  • Ludo Van Put (lvanput at elis.ugent.be)
  • Bertrand Anckaert (bankaer at elis.ugent.be)
  • Matias Madou (mmadou at elis.ugent.be)

Preliminary work on the PPC port:

  • Ramon Bertran (rbertran at ac.upc.edu)

Non-active contributors (people that once contributed code to Diablo, e.g. students,... that wrote a backend for Diablo at some point in time):

  • Luk Claes (SH3 backend, currently unmaintained)
  • Daan Mervielde (original i386 backend, code no longer in the distribution, rewritten by Dominique)
  • Wim Hillewaert (original i386 backend, code no longer in the distribution, rewritten by Dominique)
  • Frederik Vandeputte (wrote the (currently unmaintained) IA64 backend with Bertrand)
  • Wouter Verlinden (PPC backend, currently unmaintained, rewrite in progress)
  • Pieter Ruts (did some code for factoring, never finished, removed and replaced by Dominique's factoring code)
  • Wim De Houwer (Thumb backend support for the ARM)
  • Dieter Govaerts (Optimization of data accesses in ARM code)
  • Christophe Hanssens (Some obfuscation transformations, rewritten by Matias)
  • Kristof Smits (Lancet, the Diablo GUI, partialy rewritten by Ludo)
  • Sven Vermeulen (Tamperproofing, currently unmaintained)

(*) If your name should be listed here, and it isn't then contact Jonas
(jmaebe at elis.ugent.be).