- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个对象 callInst。如何获取函数的真实名称而不是 IR 代码中的名称?如果我在我的通行证中运行此代码(Useless 在另一个问题中发布)
StringRef get_function_name(CallInst *call)
{
Function *fun = call->getCalledFunction();
if (fun)
return call->getName();
else
return StringRef("indirect call");
}
这给我 IR 代码的名称(例如 call、call1、call2)。我想要 callInst 的真实名称(printf、foo、main)。
有什么想法吗?
非常感谢
最佳答案
你得到的是函数的错位名称。您必须对其进行分解才能取回“真实”名称。我假设您正在使用 linux 并使用 clang 生成您的 IR(因为您的问题上有 clang 标签)。在 Linux 上你可以使用
#include <iostream>
#include <memory>
#include <string>
#include <cxxabi.h>
using namespace std;
inline std::string demangle(const char* name)
{
int status = -1;
std::unique_ptr<char, void(*)(void*)> res { abi::__cxa_demangle(name, NULL, NULL, &status), std::free };
return (status == 0) ? res.get() : std::string(name);
}
int main() {
cout << demangle("mangled name here");
return 0;
}
分解函数的名称。
关于c++ - LLVM Callinst函数如何获取(真实)名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28045339/
我正在尝试使用 LLVM C++ 绑定(bind)来编写生成以下 IR 的传递 %1 = call i64 @time(i64* null) #3 @time 这里是 C 标准库的 time() 函数
我正在尝试使用 LLVM 构建一个简单版本的代码分析工具。我有一些包含某些程序的中间 LLVM 表示的 .ll 文件,我正在尝试获取已执行的函数调用列表在程序的每个函数中。 这是我的代码,由于我之前的
我的 llvm ir 看起来像这样: call void bitcast (void (%struct.type1*, %opencl.image2d_t addrspace(1)*, i32, %s
考虑 static CallInst *Create(Value *Func, ArrayRef Args, c
Function *fun = call->getCalledFunction(); getCalledFunction(); 如果是间接调用则返回 null。如何获取函数名或指针名? 我在 Stac
我有一个 CallInst 类型的对象。我怎样才能得到被调用函数的名称(又名被调用者)。假设函数被直接调用(即没有间接函数调用)。 最佳答案 StringRef get_function_name(C
这就是我想要做的: if(isa(&(*BI)) ) { ArrayRef arguments('c'); StringRe
如果是直接调用函数,可以通过以下代码获取Function类型。 Function * fun = callInst->getCalledFunction(); Function * funTyp
我是一名优秀的程序员,十分优秀!