gpt4 book ai didi

c++ - LLVM Callinst函数如何获取(真实)名称?

转载 作者:行者123 更新时间:2023-11-30 02:41:31 28 4
gpt4 key购买 nike


我有一个对象 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com