LLUBI(1)
π LLUBI(1) β LLVM UB-aware Interpreter β¨
πΈ NAME πΈ
llubi β LLVM UB-aware Interpreter. That's the name, bestie, and it's iconic. π«Ά
β¨ SYNOPSIS β¨
llubi [options] [filename] [program args]
π¦ DESCRIPTION π¦
Okay so llubi directly executes programs in LLVM bitcode format and tracks values in LLVM IR semantics. Unlike lli, llubi is designed to be aware of undefined behaviors during execution. It detects immediate undefined behaviors such as integer division by zero, and respects poison generating flags like nsw and nuw. As it captures most of the guardable undefined behaviors, it is highly suitable for constructing an interesting-ness test for miscompilation bugs. No cap, that's the whole point. π
If filename is not specified, then llubi reads the LLVM bitcode for the program from standard input.
The optional args specified on the command line are passed to the program as arguments.
π GENERAL OPTIONS π
-fake-argv0=executableβ Override theargv[0]value passed into the executing program. Yes bestie, you can fake the name it thinks it has. πͺͺ-entry-function=functionβ Specify the name of the function to execute as the program's entry point. By default,llubiuses the function namedmain.-helpβ Print a summary of command line options. Your little cheat sheet. β¨-verboseβ Print results for each instruction executed. It's giving main character energy for every single instruction. π-versionβ Print out the version ofllubiand exit without doing anything else. Short and iconic.
π INTERPRETER OPTIONS π
-max-mem=Nβ Limit the amount of memory (in bytes) that can be allocated by the program, including stack, heap, and global variables. If the limit is exceeded, execution will be terminated. By default, there is no limit (N = 0). Memory cap? Not today, bestie. π-max-stack-depth=Nβ Limit the maximum stack depth toN. If the limit is exceeded, execution will be terminated. The default limit is256. SetNto0to disable the limit. Deep recursion? The limit said not today. π«Ά-max-steps=Nβ Limit the number of instructions executed toN. If the limit is reached, execution will be terminated. By default, there is no limit (N = 0). Step budget: unlimited by default, periodt. π-vscale=Nβ Set the value ofllvm.vscaletoN. The default value is4.-seed=Nβ Set the seed for random number generator toN. By default, the seed is0.-undef-behavior=modeβ Set the behavior for undefined values (e.g., load from uninitialized memory or freeze a poison value). The options for mode are:nondet: Each load from the same uninitialized byte yields a freshly random value. This is the default behavior.zero: Uninitialized values are treated as zero.
-nan-behavior=modeβ Set the behavior for payload preserving behavior of floating-point NaN values. The options for mode are:nondet: The actual behavior is randomly chosen from the modes below. This is the default behavior.preferred: The quiet bit is set and the payload is all-zero.quieting: The quiet bit is set and the payload is copied from any input operand that is a NaN.unchanged: The quiet bit and payload are copied from any input operand that is a NaN.target-specific: The quiet bit is set and the payload is picked from a known target-specific set of extra possible NaN payloads.
-deterministicβ Disable interpreter-introduced non-determinism (off by default). This option implies-undef-behavior=zeroand-nan-behavior=preferred. Chaos off, predictability on. π-fuse-fmuladdβ Treatllvm.fmuladd.*asllvm.fma.*. It is the default behavior. Otherwise, it is expanded intoa * b + c. Math but make it fused. π₯-disable-verifyβ Disable the validation of the input LLVM IR. The user is responsible for the validity of inputs. The verifier is executed by default.
π¨ Careful bestie: with -disable-verify, you are responsible for the validity of inputs. The verifier is executed by default.
π EXIT STATUS π
If llubi fails to load the program, or an error occurs during execution (e.g., an immediate undefined behavior is triggered), it will exit with an exit code of 1. If the return type of entry function is not an integer type, it will return 0. Otherwise, it will return the exit code of the program. That's the vibe check at the door. πͺ
π AUTHOR π
Maintained by the LLVM Team (https://llvm.org/). Yes, the whole team. Iconic. π
π COPYRIGHT π
2003-2026, LLVM Project β there it is, bestie, the copyright line, untouched and slaying. πΈ
π That's a wrap on LLUBI(1) β sourced from LLVM version 23, dated 2026-10-06. No cap, that's the cute little footer energy. Periodt. π
π¦ where this page comes from
- centos-stream 9: llvm 23.1.3-1.el9 Β· Apache-2.0 WITH LLVM-exception OR NCSA
- centos-stream 9: llvm 23.1.3-1.el9 Β· Apache-2.0 WITH LLVM-exception OR NCSA
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms