<div dir="ltr"><div><div><div><span class="gmail-im">Andres Freund wrote:<br><br>> On 2017-01-25 18:16:09 -0800, Toshiyasu Morita wrote:<br>
>> Thanks for the tip - getting closer:<br>
>><br>
>> $ ./capi_test 5 6<br>
>> args[0]: 5<br>
>> args[1]: 6<br>
>> result: 4294959200<br>
>><br>
>> Here's the code I changed:<br>
>><br>
>>   printf("args[0]: %d\n", (int)LLVMGenericValueToInt(<wbr>args[0], 0));<br>
>>   printf("args[1]: %d\n", (int)LLVMGenericValueToInt(<wbr>args[1], 0));<br>
>><br>
>>   uint64_t (*func)();<br>
>>   func = (uint64_t (*)())LLVMGetFunctionAddress(<wbr>engine, "sum");<br>
>>   printf("result: %lu\n", (*func)());<br>
><br>
</span>>You're calling the function without arguments, but it's (in IR) declared<br>
>to take two. And you're miscasting the return value to be int64, instead<br>
>of int32 as the function's declared.<br><br></div>Thanks again - revised code snippet:<br><br>  int (*func)(LLVMGenericValueRef *);<br>  func = (int (*)(LLVMGenericValueRef *))LLVMGetFunctionAddress(engine, "sum");<br>  int res = (*func)(args);<br>  printf("result: %d\n", res);<br><br></div><div>Output:<br><br>$ ./capi_test 5 6<br>args[0]: 5<br>args[1]: 6<br>result: -7872<br><br></div>Do the two argument pointers need to be passed separately?<br></div><div>Does the function return an LLVMGenericValueRef?<br></div><div><br></div>Toshi<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 25, 2017 at 6:30 PM, Andres Freund <span dir="ltr"><<a href="mailto:andres@anarazel.de" target="_blank">andres@anarazel.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<span class=""><br>
On 2017-01-25 18:16:09 -0800, Toshiyasu Morita wrote:<br>
> Thanks for the tip - getting closer:<br>
><br>
> $ ./capi_test 5 6<br>
> args[0]: 5<br>
> args[1]: 6<br>
> result: 4294959200<br>
><br>
> Here's the code I changed:<br>
><br>
>   printf("args[0]: %d\n", (int)LLVMGenericValueToInt(<wbr>args[0], 0));<br>
>   printf("args[1]: %d\n", (int)LLVMGenericValueToInt(<wbr>args[1], 0));<br>
><br>
>   uint64_t (*func)();<br>
>   func = (uint64_t (*)())LLVMGetFunctionAddress(<wbr>engine, "sum");<br>
>   printf("result: %lu\n", (*func)());<br>
<br>
</span>You're calling the function without arguments, but it's (in IR) declared<br>
to take two. And you're miscasting the return value to be int64, instead<br>
of int32 as the function's declared.<br>
<span class="HOEnZb"><font color="#888888"><br>
Andres<br>
</font></span></blockquote></div><br></div>