gpt4 book ai didi

c++ - 如何为 llvm IR 调用指令创建结构参数?

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:51 27 4
gpt4 key购买 nike

我想在 IR 文件中插入一个函数调用指令。但是当我尝试创建结构参数时出现了一些问题。

功能:

 "__myfun(int addr,struct buginfor struct_var)" 

结构是:

 typedef struct buginfor{
int line;
char *str1;
char *str2;
};

我的代码:

Value* args[] = { addr };

// struct parameter create
Value *struct_line = ConstantInt::get(IntegerType::get(M->getContext(), 64), 4);
Value *struct_filename= llvm::PointerType::get(IntegerType::get(M->getContext(), 8),20);//20 bytes
Value *struct_dir= llvm::PointerType::get(IntegerType::get(M->getContext(), 8),100);//100 tytes
Type* struct_Ty[] = { struct_line->getType(),struct_filename->getType(),struct_dir->getType()};
llvm::StructType * struct_var= llvm::StructType::create(M->getContext(),"buginfor");
struct_var->setBody(struct_Ty);
Value* arg2 = struct_var;

Type* argsTy[] = { addr->getType(),arg2->getType()};
FunctionType *funcTy = FunctionType::get(Type::getVoidTy(M->getContext()), ArrayRef<Type*>(argsTy, 2), false);
Function *hook;
hook = cast<Function>( M->getOrInsertFunction("__myfun", funcTy, attribute(M)));
CallInst *newInst = CallInst::Create(hook, ArrayRef<Value *>(args, 1), "");

谁能告诉我创建像 buginfor 这样的结构参数的正确方法?

附言:我想获取三个参数并将其设为 llvm IR constantstruct

          DILocation Loc(N);    // DILocation is in DebugInfo.h
unsigned Line = Loc.getLineNumber();
StringRef File = Loc.getFilename();
StringRef Dir = Loc.getDirectory();

最佳答案

您似乎想要创建一个 ConstantStruct 或一个 undef 结构,然后使用 insertvalue 指令将值插入其中。取决于您是否有常量或运行时值。

关于c++ - 如何为 llvm IR 调用指令创建结构参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33364871/

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