is an interpreter for LLVM IR, an intermediate representation of source code that can be produced by the Clang
compiler for the C family of programming languages. It is based on the Truffle
framework for implementing interpreters for programming languages and part of the GraalVM
project. In addition to executing programs that were compiled to LLVM IR, Sulong also supports GraalVM's integrated debugging framework to allow users to debug these programs at source-level. At the moment, this debugging support is aimed at providing correct values for all possible symbols. This, however, comes at the cost of a significant run-time overhead since it prevents or even requires undoing several performance optimizations introduced by both Clang and GraalVM.
The goal of this project is to implement an alternative performance mode
for source-level debugging with Sulong. Instead of providing current values for all source-level symbols, in this mode the debugger should display only symbols whose values are still available despite optimizations. This will require analyzing the LLVM IR executed by Sulong and the debug information
it contains. Once GraalVM's debugging framework has halted the running program and requests symbol information from it, the values referenced in the debug information can be compared against the current program state to determine which values are still available. For this project, no knowledge about compiler optimizations performed by either Clang or GraalVM is required.