[foreign-jextract] Missing getters/setters for pointers within generated classes
Filip Krakowski
krakowski at hhu.de
Fri Jun 26 20:11:21 UTC 2020
Hi,
thanks for leading me in the right direction. I have implemented the
mentioned approach directly in the ConstantHelper class and hope that it
goes in the right direction.
https://github.com/krakowski/panama-foreign/commit/3596f8da924419896c652e1e8abd4eaad9ae02d3
Would this work?
Best regards,
Filip
Email Signature
On 26.06.20 19:55, Maurizio Cimadamore wrote:
>
> On 26/06/2020 16:57, Filip Krakowski wrote:
>> Hi,
>>
>> since this is a real problem for us, I would like to ask if I can
>> help in any way.
>>
>> I ran jextract through IntelliJ with a debugger attached and found
>> that OutputFactory#visitVariable specifically checks for pointer
>> fields and skips them
>> <https://github.com/openjdk/panama-foreign/blob/d8febd61c206db4f2d94dba3b5be48b701b28f1c/src/jdk.incubator.jextract/share/classes/jdk/incubator/jextract/tool/OutputFactory.java#L401-L405>.
>> Does this mean getting and setting pointer fields is not supported by
>> design? By removing the mentioned check (clazz ==
>> MemoryAddress.class), the expected methods are generated, but fail
>> when called with an IllegalArgumentException.
>
> The IAE is issued because the underlying VarHandle is created with a
> MemoryAddress carrier, which is not supported. Like the synthetic
> Cpointer class does, a `long` VarHandle should be created and then
> adapted using the MemoryHandles.asAddressVarHandle adapter.
>
> Maurizio
>
>>
>> Is there an issue within the Java Bug System I can follow regarding
>> this problem?
>>
>> Best regards,
>> Filip
>> Email Signature
>> On 6/22/20 12:59 PM, sundararajan.athijegannathan at oracle.com wrote:
>>> Hi Filip,
>>>
>>> I tried with a simple struct with one pointer type field. As you
>>> mentioned, getters/setters are not generated for pointer fields.
>>> Thanks for reporting the issue.
>>>
>>> Thanks
>>>
>>> -Sundar
>>>
>>> On 22/06/20 3:46 pm, Filip Krakowski wrote:
>>>> Hi,
>>>>
>>>> I am currently experimenting with Project Panama and using jextract
>>>> to generate bindings for the ibverbs library. I just noticed that
>>>> within the generated classes pointers are skipped since no
>>>> getter/setters are created for them. The header file parsed by
>>>> jextract can be found here :
>>>>
>>>> https://github.com/linux-rdma/rdma-core/blob/55b51135cab1c0a7f28516a636d5790c2cfca225/libibverbs/verbs.h
>>>>
>>>>
>>>>
>>>> As an example you can look at the struct ibv_mw :
>>>>
>>>> https://github.com/linux-rdma/rdma-core/blob/55b51135cab1c0a7f28516a636d5790c2cfca225/libibverbs/verbs.h#L646-L652
>>>>
>>>>
>>>>
>>>> The generated class Cibv_mw contains getters and setters for rkey,
>>>> handle and type but is missing them for context and pd. In some
>>>> places the ibverbs API requires setting pointers within structs.
>>>> Are these missing methods the normal behavior or am I doing
>>>> something wrong here?
>>>>
>>>> Best regards,
>>>> Filip
>>
More information about the panama-dev
mailing list