RFC: Refactoring SystemABI

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Fri Nov 16 10:06:47 UTC 2018


Hi Henry,
the work looks like a good initial step. But I think you didn't go all 
the way through with it. That is, the binder code (HeaderImplGenerator 
and ScopeImpl) still rely on UpcallHandler/NativeInvoker. I think it 
would be nice if we could completely decouple these things. After all, 
everything that HeaderImplGenerator needs is a way to get a method 
handle for a given downcall, and that can be done directly through 
SystemABI, now.

For upcalls its a bit harder, given that for an upcall there's currently 
some info associated to it:

* receiver object

* address of the generated stub

* target method handle

plus a way to 'free' the stub generated by the VM.

I think the best way to get there is to create an intermediate 
abstraction that holds these info (plus a free() method), call it 
'UpcallHandle' (removed the final 'R') and then let the binder program 
against this. Then, a Callback object is essentially an UpcallHandle + a 
Java carrier (functional interface) + a scope.

But UpcallHandler as it is now, is not a mere abstraction describing an 
upcall - it also embodies the strategy by which the upcall is performed 
(e.g. direct vs. universal) in the same way a NativeInvoker does. So I 
think that moving forward we would probably want to just have SystemABI 
select the right NativeInvoker/UpcallHandler to do the job - and these 
things don't have to be superclasses, or induce a hierarchy of any kind 
- e.g. it would be ok for a DirectInvoker to be completely unrelated 
from a UniversalInvoker. As long as the rest of the binder only 
interacts with SystemABI, that's ok.

Maurizio



On 15/11/2018 22:44, Henry Jen wrote:
> Hi,
>
> Please have a look at the webrev[1] refactor the SystemABI APIs based on Mauricio’s proposal. SystemABI is suppose to encapsulate platform-specific details, this patch make NativeInvoker/UpcallHander and CalllingSequence to be implementation details, and thus can further be simplified/removed if we need to.
>
> The binder suppose to only interact with SystemABI, that’s not completed yet in this webrev, but follow up work should get us there.
>
> Concept of CallingConvention is introduced as an abstraction for now and is currently simply support default.
>
> Anyway, it’s just first step, and I would like to see if it make sense to us.
>
> Cheers,
> Henry
>
> [1] http://cr.openjdk.java.net/~henryjen/panama/SystemABI/webrev/


More information about the panama-dev mailing list