Diablo
Submitted by jmaebe on Tue, 15/09/2009 - 11:13
Diablo is a retargetable link-time binary rewriting framework. While our focus has been mostly on program compaction, binary rewriting has a much broader range of applications: speed optimizations, power consumption optimizations, size optimizations, program obfuscation and watermarking, instrumentation, etc. A binary rewriting framework is also very useful for program analysis and understanding. For instance, Diablo can print out the control flow graph for all functions in a program, annotated with for example liveness information.
Overview

What is Diablo:
- Diablo is a rewriting linker: its inputs are the object files and libraries from which the program is built, instead of just the program executable. A drawback of this approach is that Diablo is not useful for purposes such as binary translation, where binary programs are translated to run on a completely different architecture.
- Diablo is safe: because of the extra information that is available at link time (in particular relocation information), it is possible to correctly interpret the complete binary, something that is not always possible without this information.
- Diablo is retargetable. At the moment, ports exist for the ARM, i386, x86_64, PowerPC32 and PowerPC64 architectures. In the past, it has also supported MIPS, Alpha, IA64 and x86_64. A partial port for the Cell BE is also available.
Diablo is a prototype tool, intended primarily for research. As such, we cannot guarantee it to be production-quality code, even though we have an extensive collection of regression tests that try to ensure Diablo is as bug-free as possible. There are some caveats in using Diablo:
- Diablo generally only works on statically linked programs. There is some support for dynamically linked programs, but it is limited.
- Diablo actually needs a little more information about a program than most standard tool chains provide. If you want to use Diablo on programs generated by a GCC-based tool chain, you need to apply some patches to your tool chain first. These patches do not influence the code that is generated, they just preserve some information about the code and data that would otherwise be lost after compilation. These patches can be downloaded from this web site. Alternatively, we offer a number of precompiled toolchains for different architectures with the patches already applied.
Where to get it
See the Diablo home page.
Contact
Adaptive Compilation
Adaptive compilation
- Home page
- Kick-off Meeting
- Research Areas
- Call For Funding (Feb 2008)
- Context-Aware Optimization and Run-Time Adaptation of Sequential Libraries for Multi-Core Systems
- Barcelona Meeting (June 2008)
- Using Adaptive Compilation to Produce High Performance Sparse Computations
- Split Compilation and Code Specialization
- Split Vectorisation Using Gcc and Mono
- Value-Based Optimisation
- Performance Counter-Based Power and Temperature Prediction
- Paris Meeting (November 2008)
- Related Research Groups and Activities
- Paphos Meeting (January 2009)
- Munich Meeting (June 2009)
