[llvm-dev] mcjit C interface problems
Toshiyasu Morita via llvm-dev
llvm-dev at lists.llvm.org
Wed Jan 25 18:44:58 PST 2017
Andres Freund wrote:
> On 2017-01-25 18:16:09 -0800, Toshiyasu Morita wrote:
>> Thanks for the tip - getting closer:
>>
>> $ ./capi_test 5 6
>> args[0]: 5
>> args[1]: 6
>> result: 4294959200
>>
>> Here's the code I changed:
>>
>> printf("args[0]: %d\n", (int)LLVMGenericValueToInt(args[0], 0));
>> printf("args[1]: %d\n", (int)LLVMGenericValueToInt(args[1], 0));
>>
>> uint64_t (*func)();
>> func = (uint64_t (*)())LLVMGetFunctionAddress(engine, "sum");
>> printf("result: %lu\n", (*func)());
>
>You're calling the function without arguments, but it's (in IR) declared
>to take two. And you're miscasting the return value to be int64, instead
>of int32 as the function's declared.
Thanks again - revised code snippet:
int (*func)(LLVMGenericValueRef *);
func = (int (*)(LLVMGenericValueRef *))LLVMGetFunctionAddress(engine,
"sum");
int res = (*func)(args);
printf("result: %d\n", res);
Output:
$ ./capi_test 5 6
args[0]: 5
args[1]: 6
result: -7872
Do the two argument pointers need to be passed separately?
Does the function return an LLVMGenericValueRef?
Toshi
On Wed, Jan 25, 2017 at 6:30 PM, Andres Freund <andres at anarazel.de> wrote:
> Hi,
>
> On 2017-01-25 18:16:09 -0800, Toshiyasu Morita wrote:
> > Thanks for the tip - getting closer:
> >
> > $ ./capi_test 5 6
> > args[0]: 5
> > args[1]: 6
> > result: 4294959200
> >
> > Here's the code I changed:
> >
> > printf("args[0]: %d\n", (int)LLVMGenericValueToInt(args[0], 0));
> > printf("args[1]: %d\n", (int)LLVMGenericValueToInt(args[1], 0));
> >
> > uint64_t (*func)();
> > func = (uint64_t (*)())LLVMGetFunctionAddress(engine, "sum");
> > printf("result: %lu\n", (*func)());
>
> You're calling the function without arguments, but it's (in IR) declared
> to take two. And you're miscasting the return value to be int64, instead
> of int32 as the function's declared.
>
> Andres
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170125/ebe70d6f/attachment.html>
More information about the llvm-dev
mailing list