GraalVM & LLVM

GraalVM provides an implementation of the lli tool to directly execute programs from LLVM bitcode. In contrast to static compilation that is normally used for LLVM based languages, LLI first interprets the bitcode and then dynamically compiles the hot parts of the program using the GraalVM compiler. This allows seamless interoperability with the dynamic languages supported by GraalVM.


YOUTUBE YIGoNVQctOU EuroLLVM Developers’ Meeting (2019): J. Kreindl “LLVM IR in GraalVM: Multi-Level, Polyglot Debug...”

LLVM IR in GraalVM: Multi-Level, Polyglot Debugging with Sulong - Jacob Kreindl (Johannes Kepler University Linz) Slides: — Sulong is an execution engine for LLVM bitcode that has support for debugging programs at the level of source code as well as textual LLVM IR. It is part of GraalVM, a polyglot virtual machine that can also execute programs written in multiple dynamic programming languages such as Ruby and Python. Sulong supports GraalVM's language-agnostic tooling interface to provide a rich debugging experience to developers. This includes source-level debugging of native extensions compiled to LLVM bitcode and the dynamic language programs that use them, together in the same debugger session and front-end. Sulong also enables developers to debug programs at the level of LLVM IR, including stepping through the textual IR and inspecting the symbols it contains. In this talk we will describe different ways GraalVM enables users to debug programs that were compiled to LLVM bitcode. We will introduce the general features of GraalVM-based debuggers by demonstrating source-level debugging of a standalone C/C++ application. Building on this we will showcase GraalVM's ability to provide a truly integrated debugging experience for native extensions of dynamic language programs to users. We will further demonstrate Sulong's support for debugging programs at the LLVM-IR level.

# See also

- Safe and sandboxed execution of native code - medium - GraalVM - Ahead-of-Time Compilation - Micronaut