Skip to content

Passes

xollvm is a toolbox of composable passes. You enable them per function via annotations; the driver runs them in a fixed topological order. All parameters are optional — unspecified keys use their defaults.

The function pipeline

expression control flow call post-hardening virtualisation

Pass ID Category What it does
Constant encryption constenc expr Encrypts scalar int/FP constant operands into runtime-opaque materializations.
MBA mba expr Rewrites integer expressions as Mixed Boolean/Arithmetic equivalents.
Substitution substitution expr Replaces instructions with equivalent idiom sequences.
Virtual call vcall call Virtualises direct calls via synthetic vtables.
Basic-block split split cfg Splits blocks to increase graph complexity.
Semantic diffusion sdiff expr Volatile-slot masking that resists local simplification.
Bogus control flow bcf cfg Opaque predicates + fake edges.
CFG flattening flattening cfg Replaces structured control flow with a dispatcher.
Anti-optimization shield shield post Volatile barriers + opaque identities.
Anti-decompiler adec post indirectbr trampolines, asm junk, pointer aliasing.
Code virtualisation vm vm Compiles the function body into a private bytecode stream.

Module-only passes (run before the function pipeline):

Pass ID What it does
Function merging fmerge Collapses same-group= functions into one selector-dispatched super-function.
String encryption strenc Encrypts string literals; AES-128-CTR / ChaCha20 / XOR.

Picking passes

vm conflicts with flattening

Both restructure the whole CFG. Use one or the other per function; the pipeline rejects the combination.