gdb: JIT Interface

 
 29 JIT Compilation Interface
 ****************************
 
 This chapter documents GDB's "just-in-time" (JIT) compilation interface.
 A JIT compiler is a program or library that generates native executable
 code at runtime and executes it, usually in order to achieve good
 performance while maintaining platform independence.
 
    Programs that use JIT compilation are normally difficult to debug
 because portions of their code are generated at runtime, instead of
 being loaded from object files, which is where GDB normally finds the
 program's symbols and debug information.  In order to debug programs
 that use JIT compilation, GDB has an interface that allows the program
 to register in-memory symbol files with GDB at runtime.
 
    If you are using GDB to debug a program that uses this interface,
 then it should work transparently so long as you have not stripped the
 binary.  If you are developing a JIT compiler, then the interface is
 documented in the rest of this chapter.  At this time, the only known
 client of this interface is the LLVM JIT.
 
    Broadly speaking, the JIT interface mirrors the dynamic loader
 interface.  The JIT compiler communicates with GDB by writing data into
 a global variable and calling a fuction at a well-known symbol.  When
 GDB attaches, it reads a linked list of symbol files from the global
 variable to find existing code, and puts a breakpoint in the function so
 that it can find out about additional code.
 

Menu