Joshua Tuttle
2014-Mar-24 15:27 UTC
[LLVMdev] Trouble with passing an array as argument to CreateCall()
Hello All,
I am having a bit of trouble with inserting a function into some IR. My function
takes in more than five arguments so I am trying to use the CreateCall(Value *
Callee, ArrayRef<Value*> Args, const Twine & Name="")
method.
I believe where I am running into problems is the declaration part where I am
using the getOrInsertFunction() method. Here is the code I have written so far:
//Function declaration for "mmap"
/*
Constant *b = M->getOrInsertFunction("mmap",
FunctionType::getInt8PtrTy(F.getContext()),
Type::getInt8PtrTy(F.getContext()),
Type::getInt8PtrTy(F.getContext()),
NULL);
Function *mmap = cast<Function>(b);
*/
Constant *b = M->getOrInsertFunction("mmap",
FunctionType::getInt8PtrTy(F.getContext()),
Type::getInt8PtrTy(F.getContext()),
Type::getInt32Ty(F.getContext()),
Type::getInt32Ty(F.getContext()),
Type::getInt32Ty(F.getContext()),
Type::getInt32Ty(F.getContext()),
Type::getInt32Ty(F.getContext()),
NULL);
Function *mmap = cast<Function>(b);
//IRBuilder responsible for inserting instructions into IR
IRBuilder<> builder(inst);
//Inserts the two variables and call for "open"
Value *strPtr = builder.CreateGlobalStringPtr("/dev/mem",
".str");
ConstantInt *open_Argument = builder.getInt32(9437184);
Value *file_desc = builder.CreateCall2(open,strPtr,open_Argument);
//Inserts the 5 variables needed for "mmap"
ConstantInt *Arg1 = builder.getInt32(0);
ConstantInt *Arg2 = builder.getInt32(4096);
ConstantInt *Arg3 = builder.getInt32(3);
ConstantInt *Arg4 = builder.getInt32(1);
ConstantInt *Arg6 = builder.getInt32(1);
//Creates array of values to pass to "mmap"
std::vector<llvm::Value *> putsArgs;
putsArgs.push_back(Arg1);
putsArgs.push_back(Arg2);
putsArgs.push_back(Arg3);
putsArgs.push_back(Arg4);
putsArgs.push_back(file_desc);
putsArgs.push_back(Arg6);
llvm::ArrayRef<llvm::Value *> argsRef(putsArgs);
builder.CreateCall(mmap, putsArgs, "mmap");
I have written two function declarations, but am unsure of which type I should
use because I am passing an array as an argument. Is the function declaration
supposed to accept each argument individually or will it be expecting a pointer
type if I'm using an array? My assert error is just "Calling a function
with a bad signature!"
Thanks for any help!
Josh
________________________________
This message and all attachments are PRIVATE, and contain information that is
PROPRIETARY to Intelligent Automation, Inc. You are not authorized to transmit
or otherwise disclose this message or any attachments to any third party
whatsoever without the express written consent of Intelligent Automation, Inc.
If you received this message in error or you are not willing to view this
message or any attachments on a confidential basis, please immediately delete
this email and any attachments and notify Intelligent Automation, Inc.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20140324/a3d7ebf2/attachment.html>