[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