> So you don't want a high level IDL?
At the bottom level seen by the operating system, the IPC spec is *defined* to move:
four registers
one data string
the length of the string moved
four capabilities, one possibly a generated resume cap
Ultimately, any capability invocation must be defined in terms of what ends up in these registers. That definition should be consistent across machines, and probably should *not* be done automatically by the IDL compiler. It isn't that hard to annotate the arguments ("this little piggy goes in R1, this one in R2, all others in the data string in order of appearance..")
While the IDL compiler can usefully suggest a layout, once chosen the layout must remain fixed for reasons of binary compatibility, and must therefore be specified as part of the interface. You may build a smarter IDL compiler later, but a particular interface, once defined, must always continue to pass the same arguments in the same registers for a particular method. The required registers must therefore be specified in the IDL input description.
shap