]> git.buserror.net Git - polintos/scott/priv.git/blobdiff - doc/abi/x86
Always use eax/edx; this makes throwing an exception during method
[polintos/scott/priv.git] / doc / abi / x86
index 2038cd50b1b42aad48f2793d5decac698168e462..fd0c51a2a4835a2d7a7b0adfe40ae036b648eb23 100644 (file)
@@ -1,12 +1,8 @@
-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.
       
@@ -18,43 +14,18 @@ Out-of-Process Method Invocation:
            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