0.4.1 Release Notes

Version: 0.4.1
Release Date: december 16 2005
Modules: support object flowgraph anopt lancet

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 release (november 1 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 public consumption called Lancet. Lancet is a graphical user interface built on top of Diablo. Lancet is the ideal tool to visualize and navigate through the control flow graphs of compiled code. It can be used to modify these graphs, to edit the basic blocks containing assembly instructions, insert instrumentation code and much more.

Futhermore, this release includes bug fixes and code cleanups since 0.4.0 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.1

To download and install diablo 0.4.1, go to http://diablo.elis.ugent.be/sites/diablo/files/release-0.4.1/

  • 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 


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

To compile this frontend, do:

export PKG_CONFIG_PATH=/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 -lm

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).
Linux kernel module is disabled (bug in arm compression code).

If all goes well, the above issues will be solved in the 0.4.2 release (see website for roadmap).

FIT (instrumentation) is disabled. Expect it in the 0.4.3 release (see website for roadmap).

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.1 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).