Arguments passing to External Function Call in llvm pass

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Arguments passing to External Function Call in llvm pass

Abhinash Jain
This post was updated on .
I have a external function which is like this :-
void foo(int num, ...)
{
       va_list arguments;
       va_start(arguments,num);
       for(int x=0;x<num;x++)
       {
                long long *oprnd=va_arg ( arguments, long long* );
        }
        va_end ( arguments );
}

And on llvm pass i have one vector of Value* (i.e. vector<Value*> vect). which basically contains getoperand(0) of all Load instruction present on some test program.
eg.

  load i32* %a, align 4
  vect.push_back(getoperand(0))
  load i32* %b, align 4
  vect.push_back(getoperand(0))     . So on.

Now How can I pass this vector to the external foo(int, ...) function???

What should I use to declare the foo function in my pass (so that it works fine on both 32-bit and 64-bit system)-
Type::getInt32Ty(*Context) or
Type::getInt64Ty(*Context) or
Type::getIntPtr32Ty(*Context) or
Type::getInt64Ty(*Context). etc.