gpt4 book ai didi

c++ - llvm 以 char * 作为参数调用外部函数

转载 作者:行者123 更新时间:2023-11-30 04:46:31 29 4
gpt4 key购买 nike

我想在创建的调用中使用 char * 作为参数调用外部函数,但我一直在努力。

我试着查看文档,但它只显示了如何传递常量整数。

这是代码的相关部分:

// not sure if the line below is correct. I am trying to call an external function: FPRCLAP_path(char * string)
std::vector<llvm::Type*> arg_types = {llvm::Type::getInt8PtrTy(context)};

llvm::FunctionType *function_type = llvm::FunctionType::get(llvm::Type::getVoidTy(context), arg_types, false);
llvm::FunctionCallee instrumentation_function = function.getParent()->getOrInsertFunction("FPRCLAP_path", function_type);

llvm::IRBuilder<> builder(&instruction);
builder.SetInsertPoint(&basic_block, ++builder.GetInsertPoint());
// I want to pass a string for instrumentation but I am not sure how to do it using llvm. I think I am supposed to allocate a string or reference an existing string.
llvm::ArrayRef<llvm::Value*> arguments = {???};
builder.CreateCall(instrumentation_function, arguments);

最佳答案

考虑你的代码

llvm::IRBuilder<> builder(&instruction);
builder.SetInsertPoint(&basic_block, ++builder.GetInsertPoint());
// I want to pass a string for instrumentation but I am not sure how to do it using llvm. I think I am supposed to allocate a string or reference an existing string.
llvm::ArrayRef<llvm::Value*> arguments = {???};
builder.CreateCall(instrumentation_function, arguments);

下面的片段应该做你想做的

如果运行,LLVM 优化将使字符串成为本地字符串。如果您在没有优化的情况下生成 IR,您可能会有点草率。

//str is a char*
llvm::Value *strPointer = program->builder.CreateGlobalStringPtr(str);
//Using a Vector instead of ArrayRef
const std::vector<llvm::Value *> args{strPointer};
builder.CreateCall(instrumentation_function, args);

关于c++ - llvm 以 char * 作为参数调用外部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56696238/

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