[LLVMdev] using external functions from llvm

Óscar Fuentes ofv at wanadoo.es
Thu Aug 19 17:55:56 PDT 2010


Alec Benzer <alecbenzer at gmail.com> writes:

> Ok, so calling lle_X_FUNCTIONNAME instead of FUNCTIONNAME works (is there
> any reason the post used the lle_X_ prefix other than convention? was it
> once possible to call external functions as I was originally trying, or, why
> did the blog post think it was possible?)

AFAIK you can name the function as you please (with some reasonable
restrictions on the character set, etc)

> I'm now running into trouble when trying to access arguments however.
> printing args.size() from the function yields 12105250188025543488. The
> generated call to it looks like:
>
> %object_tmp = call %object_structure* @lle_X_create_number_object(double
> 5.000000e+00) ; <%object_structure*> [#uses=1]

You are calling a function that takes a single argument of type
`double'. But on a previous post you showed the function with this
signature:

llvm::GenericValue
lle_X_create_number_object(llvm::FunctionType* ft,
                           const std::vector<llvm::GenericValue>& args)

so as the execution enters the function above from your call, the stack
can be considered corrupt. Also, the return type of the `call' might not
be right (it depends on the ABI of your platform.)

It is strange to generate GenericValue's from JITted code. Are you doing
some kind of meta-interpreter? I'm afraid that you might be utterly
confused about how to use LLVM.




More information about the llvm-dev mailing list