Joeq includes back-end assemblers that generate executable code from the compiler's intermediate representation. In addition to the executable code, the back-ends generate metadata about the code, such as reference maps for garbage collection, exception tables, line numbers for debugging and generating exception tracebacks, and the locations of heap and code references in the code. This metadata is used by the runtime system and garbage collector, and to support code relocation. To allow for efficient generated code, the backend allows absolute memory references to be in the code. If the code or the referenced object moves due to compaction in the garbage collector, the absolute reference is updated. The back-end also has generalized support for atomically patching code fragments without synchronization[17].
The code from the back-end can be output in three formats. The first is to put the code into memory, for immediate execution. The second and third are to output the code in standard ELF or COFF object file formats, respectively. The object files include the code relocations contained in the metadata. These object files can be linked into standalone executables.