X-Git-Url: http://git.buserror.net/cgi-bin/gitweb.cgi?p=polintos%2Fscott%2Fpriv.git;a=blobdiff_plain;f=doc%2Fabi%2Fx86;h=41f4bb43269ae23594c0a335bb9cb0d5d25be089;hp=2038cd50b1b42aad48f2793d5decac698168e462;hb=5ee1a4b6695c7889466f97d42b8c416b080b361d;hpb=fb885066ed6d2f0c352f974507db6a596a435ff3 diff --git a/doc/abi/x86 b/doc/abi/x86 index 2038cd5..41f4bb4 100644 --- a/doc/abi/x86 +++ b/doc/abi/x86 @@ -1,12 +1,10 @@ -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. @@ -24,37 +22,13 @@ Out-of-Process Method Invocation: 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. -