-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: pointer to parameter info block (PIB)
Call the 32-bit address stored at 0x7fff0000 to invoke the method.
that covers the calling address. If none is found,
it will assume that it is a language without exception
handling, and return the exception to the caller in eax.
- ecx: clobbered
- edx: pointer to args, with out params filled in; in params
- may be clobbered. This will be the same pointer as
- was passed in by the caller.
+ edx: length of exception segment, if any
+ ecx: may be clobbered
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
+
+ Jump to the 32-bit address stored at 0x7fff0004 to return.
Upon return:
-
- params on stack (low addr to high), in params may be clobbered
eax: pointer to exception, or NULL if none.
+ edx: length of exception segment, if any
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.
-
+ ecx: may be clobbered