[foreign-jextract] Wrong MemoryLayout and VarHandle carrier for integer field
Filip Krakowski
krakowski at hhu.de
Thu Aug 27 14:19:21 UTC 2020
Hi,
sure! The package is called "rdma-core" and should be available on many
distros (https://pkgs.org/search/?q=rdma-core). Alternatively, you could
compile the library from source using the GitHub repository
(https://github.com/linux-rdma/rdma-core). It should be as simple as
cloning the repository and running the "build.sh" script inside of it.
Of course some dependencies (listed inside README.md) must be installed
first in this case. After this the headers should be located inside
"build/include/infiniband".
Best regards,
Filip
On 27.08.20 16:07, Maurizio Cimadamore wrote:
> What do I need to have installed to try this out? It seems like the
> header you linked has some dependencies on <infiniband> headers which
> are not in the github repo. Could you please point me at how you set
> up your machine to get those?
>
> Maurizio
>
> On 27/08/2020 14:01, Filip Krakowski wrote:
>> Hi,
>>
>> this is source file generation. I noticed that the constants class
>> file is no longer generated (in source mode) and instead several
>> constants source files are created.
>>
>> Best regards,
>> Filip
>>
>> On 27.08.20 14:54, Maurizio Cimadamore wrote:
>>> Out of curiousity - is this source or classfile generation?
>>>
>>> Maurizio
>>>
>>> On 27/08/2020 12:56, Filip Krakowski wrote:
>>>> Hi,
>>>>
>>>> I already use the latest build (commit 06675b build yesterday
>>>> 10:28PM -
>>>> https://urldefense.com/v3/__https://coconucos.cs.hhu.de/forschung/jdk/panama-20200826202808-06675b.zip__;!!GqivPVa7Brio!LZ_9YbqVSPqVFBgvUpbtN5NZ8u_rK2LJJ7qkmpZ3wI-4vNinKdeqRIz1TVuiE2o7wL_IUwA$
>>>> ). Other structs containing "int" fields (for example
>>>> "ibv_device_attr") work well and use "C_INT". I also checked my
>>>> local header files.
>>>>
>>>> Best regards,
>>>> Filip
>>>>
>>>> On 27.08.20 13:26, sundararajan.athijegannathan at oracle.com wrote:
>>>>> I don't have the complete dependencies on my machine
>>>>>
>>>>> I locally filled the struct definition you gave with appropriate
>>>>> dependencies (dummy struct, enum declarations) and jextracted it.
>>>>>
>>>>> I see C_INT is being generated as layout for sq_sig_all. I suspect
>>>>> most likely you're using old panama build. I'd recommend building
>>>>> latest panama build from repo and trying your header with the same.
>>>>>
>>>>> -Sundar
>>>>>
>>>>> On 27/08/20 4:14 pm, Filip Krakowski wrote:
>>>>>> Hi,
>>>>>>
>>>>>> I would like to report a bug regarding jextract. The header file
>>>>>> (https://urldefense.com/v3/__https://github.com/linux-rdma/rdma-core/blob/master/libibverbs/verbs.h__;!!GqivPVa7Brio!LZ_9YbqVSPqVFBgvUpbtN5NZ8u_rK2LJJ7qkmpZ3wI-4vNinKdeqRIz1TVuiE2o7emilnN0$
>>>>>> ) I give to jextract contains the following struct.
>>>>>>
>>>>>> struct ibv_qp_init_attr {
>>>>>> void *qp_context;
>>>>>> struct ibv_cq *send_cq;
>>>>>> struct ibv_cq *recv_cq;
>>>>>> struct ibv_srq *srq;
>>>>>> struct ibv_qp_cap cap;
>>>>>> enum ibv_qp_type qp_type;
>>>>>> int sq_sig_all;
>>>>>> };
>>>>>>
>>>>>>
>>>>>> The Code generated for the "sq_sig_all" field looks like this.
>>>>>>
>>>>>> private static final MemoryLayout sq_sig_all$LAYOUT_ =C_BOOL;
>>>>>> private static final VarHandle sq_sig_all$VH_
>>>>>> =sq_sig_all$LAYOUT_.varHandle(byte.class);
>>>>>>
>>>>>> public static int sq_sig_all$get(MemorySegment seg) {
>>>>>> return (int)verbs_h$constants$3.sq_sig_all$VH().get(seg);
>>>>>> }
>>>>>>
>>>>>> public static void
>>>>>> sq_sig_all$set(jdk.incubator.foreign.MemorySegment seg,int x) {
>>>>>> verbs_h$constants$3.sq_sig_all$VH().set(seg, x);
>>>>>> }
>>>>>>
>>>>>> As you can see jextract chooses "C_BOOL" as the MemoryLayout for
>>>>>> the "sq_sig_all" field and uses "byte" for the VarHandle's
>>>>>> carrier. In contrast to this, getters and setters work with "int"
>>>>>> which leads to an Exception during runtime.
>>>>>>
>>>>>> java.lang.invoke.WrongMethodTypeException: cannot convert
>>>>>> MethodHandle(VarHandle,MemorySegment,byte)void to
>>>>>> (VarHandle,MemorySegment,int)void
>>>>>>
>>>>>>
>>>>
>>
More information about the panama-dev
mailing list