To provide some additional context around this change. We (Facebook) have been using this for some internal testing and believe that this pass is generally useful and others may benefit from it. It provides a clean, flexible mechanism for symbol inter-positioning which is very useful in scenarios related to profiling. Furthermore, this pass may be directly useful in LLVM itself for the santizers which perform symbol inter-positioning for code analysis purposes. As such, we would like to merge this pass into the public LLVM repository.
This introduces the symbol rewriter. This is an IR->IR transformation that is
implemented as a CodeGenPrepare pass. This allows for the transparent
adjustment of the symbols during compilation.
It provides a clean, simple, elegant solution for symbol inter-positioning. This
technique is often used, such as in the various sanitizers and performance
analysis.
The control of this is via a custom YAML syntax map file that indicates source
to destination mapping, so as to avoid having the compiler to know the exact
details of the source to destination transformations.
This drops the const-ness of the return value. Do we need to do that?