This patch implements the initial support for upstreaming [llubi](https://github.com/dtcxzyw/llvm-ub-aware-interpreter). It only provides the minimal functionality to run a simple main function. I hope we can focus on the interface design in this PR, rather than trivial implementations for each instruction. RFC link: https://discourse.llvm.org/t/rfc-upstreaming-llvm-ub-aware-interpreter/89645 Excluding the driver `llubi.cpp`, this patch contains three components for better decoupling: + `Value.h/cpp`: Value representation + `Context.h/cpp`: Global state management (e.g., memory) and interpreter configuration + `Interpreter.cpp`: The main interpreter loop Compared to the out-of-tree version, the major differences are listed below: + The interpreter logic always returns the control to its caller, i.e., it never calls `exit/abort` when immediate UBs are triggered. + `EventHandler` provides an interface to dump the trace. It also allows callers to inspect the actual value and verify the correctness of analysis passes (e.g, KnownBits/SCEV). + The context is designed to be reentrant. That is, you can call `runFunction` multiple times. But its usefulness remains in doubt due to side effects made by previous calls. + `runFunction` handles function calls with a loop, instead of calling itself recursively. This makes it no longer bounded by the stack depth. + Uninitialized memory is planned to be approximated by returning random values each time an uninitialized byte is loaded.
105 lines
1.6 KiB
ReStructuredText
105 lines
1.6 KiB
ReStructuredText
LLVM Command Guide
|
|
------------------
|
|
|
|
The following documents are command descriptions for all of the LLVM tools.
|
|
These pages describe how to use the LLVM commands and what their options are.
|
|
Note that these pages do not describe all of the options available for all
|
|
tools. To get a complete listing, pass the ``--help`` (general options) or
|
|
``--help-hidden`` (general and debugging options) arguments to the tool you are
|
|
interested in.
|
|
|
|
Basic Commands
|
|
~~~~~~~~~~~~~~
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
dsymutil
|
|
llc
|
|
lli
|
|
llubi
|
|
llvm-as
|
|
llvm-cgdata
|
|
llvm-config
|
|
llvm-cov
|
|
llvm-cxxmap
|
|
llvm-debuginfo-analyzer
|
|
llvm-diff
|
|
llvm-dis
|
|
llvm-dwarfdump
|
|
llvm-dwarfutil
|
|
llvm-ir2vec
|
|
llvm-lib
|
|
llvm-libtool-darwin
|
|
llvm-link
|
|
llvm-lipo
|
|
llvm-mc
|
|
llvm-mca
|
|
llvm-opt-report
|
|
llvm-otool
|
|
llvm-profdata
|
|
llvm-readobj
|
|
llvm-reduce
|
|
llvm-stress
|
|
llvm-symbolizer
|
|
opt
|
|
|
|
GNU binutils replacements
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
llvm-addr2line
|
|
llvm-ar
|
|
llvm-cxxfilt
|
|
llvm-install-name-tool
|
|
llvm-nm
|
|
llvm-objcopy
|
|
llvm-objdump
|
|
llvm-ranlib
|
|
llvm-readelf
|
|
llvm-size
|
|
llvm-strings
|
|
llvm-strip
|
|
|
|
Debugging Tools
|
|
~~~~~~~~~~~~~~~
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
bugpoint
|
|
llvm-extract
|
|
llvm-bcanalyzer
|
|
|
|
Developer Tools
|
|
~~~~~~~~~~~~~~~
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
FileCheck
|
|
tblgen
|
|
clang-tblgen
|
|
lldb-tblgen
|
|
llvm-tblgen
|
|
mlir-tblgen
|
|
lit
|
|
llvm-exegesis
|
|
llvm-ifs
|
|
llvm-locstats
|
|
llvm-test-mustache-spec
|
|
llvm-pdbutil
|
|
llvm-profgen
|
|
llvm-tli-checker
|
|
llvm-offload-binary
|
|
|
|
Remarks Tools
|
|
~~~~~~~~~~~~~~
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
llvm-remarkutil
|