LLVM-如何通过函数的真实/原始名称获取函数
LLVM- How to get function by function's real/original name
最近,我使用llvm在llvm-ir中插入呼叫指令。问题是,如果我有一个名为 add
的函数,则我将使用getFuntion(string)找到它,因为ir may _Z3addv_
中的add()。我知道IR中的所有fucntion都有一个新名称,但是我不知道新名称是什么。
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;
......
如何使用其原始名称找到该函数?
您可以从LLVMCore
重复使用Mangler
。
这是用法的示例:
std::string mangledName;
raw_string_ostream mangledNameStream(mangledName);
Mangler::getNameWithPrefix(mangledNameStream, "add", m->getDataLayout());
// now mangledName contains, well, mangled name :)
libstdc 有一个不错的删除库,只需包括 cxxabi.h
那么您可以更改Function *call = m->getFunction("_Z3addv");
to
int status;
Function *call = m->getFunction(abi::__cxa_demangle("_Z3addv"), nullptr, nullptr, &status);
相关文章:
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 如何正确实现具有原始指针的类的复制构造函数?
- C ++引用函数参数似乎包含原始对象的副本,而不是充当"real reference"
- 为什么原始卷曲构造函数 {} 不返回右值?
- 如何在将原始指针移动到基类构造函数之前从unique_ptr中提取原始指针
- 从shared_ptr获取原始指针以将其传递给需要 raw 的函数
- 为什么一次包装 typedef 函数签名与原始签名不匹配
- 将原始指针传递给接受unique_ptr作为参数的函数
- 如何将数组传递给函数,以便在更改该函数中的数组值时原始数组的值不会更改?
- 从.o目标文件中提取函数的原始机器代码?
- 在C++中打破递归和原始函数
- 头文件会导致函数调用后原始数组出现问题
- 包装 C API 通过C++接受迭代器的函数获取原始指针
- 为什么继承的函数忽略了在原始函数中调用的重写函数?
- 是否可以反序列化(从原始内存块)没有默认构造函数的对象?
- 构造函数是否unique_ptr初始化原始指针unique_ptr析构函数是否也删除关联的原始指针?
- 函数采用原始指针试图通过错误msg中概述的参考来接受指针
- 我如何检测类是否具有C 中的隐式构造函数和原始成员
- #defined 函数只能接受原始输入而不接受变量?