-Function Calls and In-Process Method Invocation:
- SysV i386 ABI
+Basic ABI: SysV i386
Out-of-Process Method Invocation:
Caller:
- eax: object ID
- ecx: method ID
-
- edx: pointer to parameter info block (PIB), described below
+ eax: reserved, must be zero
+ edx: pointer to parameter info block (PIB)
+ ecx: maximum "out" bytes, excluding Inlines
Call the 32-bit address stored at 0x7fff0000 to invoke the method.
was passed in by the caller.
Callee:
- params on stack (low addr to high), ids replaced with pointers,
- at least 4 bytes of spare space beyond the high element
-
- eax: object pointer
+ eax: pointer to PIB
edx: pointer to caller information struct, if such was
requested
ecx: return address
Upon return:
- params on stack (low addr to high), in params may be clobbered
eax: pointer to exception, or NULL if none.
ebx, esi, edi, ebp, esp: should be preserved
ecx, edx: may be clobbered
-
-Stack:
- esp is stack pointer, grows down, decrement before store
-
-Object structure:
- The object ID is stored as a 32-bit quantity at an offset
- specified by calling a method TBD.
-
-Wrapper object creation:
- The function to create wrapper objects is specified by calling a method
- TBD. The function shall conform to the local ABI, and takes an ID as a
- 32-bit integer as the first parameter, and a pointer to the class as
- the second. It returns a pointer.
-
- Wrapper objects may be preemptively declared to avoid infinite loops by
- calling a method TBD.
-
-Struct padding:
- All fields are padded so that basic types are naturally aligned.
-