]> git.buserror.net Git - polintos/scott/priv.git/blobdiff - doc/abi/x86
xfer to odin
[polintos/scott/priv.git] / doc / abi / x86
index 2038cd50b1b42aad48f2793d5decac698168e462..805eb76a630f16fa019b67b3e493c509c7c9b799 100644 (file)
@@ -1,60 +1,51 @@
-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.
       
       Upon return:
       ebx, esi, edi, ebp, esp: preserved
-      eax: pointer to exception, or NULL if none.
+      eax: pointer to exception, or NULL if none
            If there is an exception, the user part of the syscall
            function will search for an exception handling function
            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
-      edx: pointer to caller information struct, if such was
+      eax: pointer to PIB
+      edx: pointer to caller information struct, or NULL if not
            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
+      esp: NULL.
 
-Stack:
-   esp is stack pointer, grows down, decrement before store
+      Jump to the 32-bit address stored at 0x7fff0004 to return.
       
-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.
-
+      Upon return:
+      eax: pointer to exception, or NULL if none
+      edx: length of exception segment, if any
+      ebx, esi, edi, ebp, esp: may be clobbered
+
+Object registration:
+       eax: number of objects to register with initial refcount 1
+       edx: pointer to list of NewObject structs
+       
+       Call the 32-bit address stored at 0x7fff0008.
+       
+       Upon return:
+       eax: pointer to exception, or NULL if none
+       edx: length of exception segment, if any
+
+GUID hash retrieval:
+       eax: object id
+       edx: 16-byte buffer
+       
+       Call the 32-bit address stored at 0x7fff000c.
+       
+       Upon return:
+       eax: pointer to exception, or NULL if none
+       edx: length of exception segment, if any