最近、llvmを使用してLLVM-IRに呼び出し命令を挿入しました。問題は、add
という名前の関数がある場合、IRのadd()が_Z3addv_
の可能性があるため、getFuntion(string)を使って見つけることができないということです。私はIRのすべての機能に新しい名前があることを知っていますが、私は新しい名前が正確に何であるか分かりませんでした。LLVM-関数の実名/元の名前で関数を取得する方法
Module *m = f->getParent();
IRBuilder<> builder(m->getContext());
Function *call = m->getFunction("add");
// call is NULL.
std::vector<Value *> args;
......
Module *m = f->getParent();
IRBuilder<> builder(m->getContext());
Function *call = m->getFunction("_Z3addv");
// call is not NULL.
std::vector<Value *> args;
......
どのようにして元の名前で機能を見つけることができますか?
に
にC++の名前を
Function *call = m->getFunction("_Z3addv");
を変更することができますちょうど
cxxabi.h
が含まれ、素敵なデマングルライブラリを持っていますマングリングはclangによって行われるので、clangのAPIを見てください。 –