[foreign-abi] On invokers

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Mon Oct 28 16:57:13 UTC 2019


On 28/10/2019 14:41, Jorn Vernee wrote:
> Hi Maurizio,
>
> Thanks for doing the SysV implementation!
>
> Some comments on CallArranger:
> - You are still using the WinABI layout constants in places; e.g. 
> `MemoryLayouts.WinABI.C_POINTER` when generating in memory return 
> bindings.
Whoops - I will fix this.
> - For upcalls with in memory returns there is a return binding for the 
> buffer address, but this is only needed on Windows, so it can be 
> removed for SysV.
I'll take a look.
>
> I didn't review the layout classification, as I'm not familiar with 
> that code (I assume it's still the same any ways?)

The classification is the same logic as we have currently - as I thought 
it would have been safer to start from there - and maybe cleanup the 
code later. So, what I did was to bridge the old classification code and 
make it work with the new API. I originally thought the classification 
logic could be made simpler - e.g. just return a TypeClass; but I later 
realized that the SysV is inherently more complex with structs than 
Win64 and Aarch64 - where we essentially can have only one register kind 
per struct; in SysV a struct can use multiple register kinds, which 
means we need to keep track of a more fine-grained classification. 
Probably there is some simplifying move lurking in there, but I thought 
it would be better to get the test passing and to push back the work, 
and then work on code quality issues.

Cheers
Maurizio

>
> Thanks,
> Jorn
>
> On 26/10/2019 01:55, Maurizio Cimadamore wrote:
>> Sorry for the delay.
>>
>> Here's a port of SysV of the programmable invoker. The code can be 
>> improved, but passes all tests (I fixed one test in 
>> TestUpcall/Downcall which was actually causing certain checks to be 
>> skipped, resulting in spurious passes, so I recommend that other 
>> patches are re-tested also). I also tried the support with a libclang 
>> port I have on top of the foreign-abi support, and everything worked 
>> reliably.
>>
>> Patch here:
>>
>> http://cr.openjdk.java.net/~mcimadamore/panama/programmableInvoker-sysv/
>>
>> Cheers
>> Maurizio
>>
>> On 24/09/2019 10:42, Jorn Vernee wrote:
>>> If you want to do a SysV port that would be much appreciated :). In 
>>> principle everything in the `programmable` package, except for 
>>> CallArranger is a part of the API, though there should be no need to 
>>> interact directly with BindingInterpreter and BufferLayout. So, if 
>>> you want to do a port the only thing you should have to do is add a 
>>> SysV version of CallArranger, (which I based on 
>>> CallingSequenceBuilderImpl, so that's probably a good place to 
>>> start) and then call that from SysVx64ABI.


More information about the panama-dev mailing list