[foreign-jextract] Missing getters/setters for pointers within generated classes
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Fri Jun 26 20:48:48 UTC 2020
This looks very nice! If you want feel free to submit a PR and I'm sure
that Jorn or Sundar will be more than happy to have a look!
Thanks!
Maurizio
On 26/06/2020 21:11, Filip Krakowski wrote:
> 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