]> git.buserror.net Git - polintos/scott/priv.git/blob - doc/abi/x86
Even simpler license.
[polintos/scott/priv.git] / doc / abi / x86
1 Function Calls and In-Process Method Invocation:
2    SysV i386 ABI
3
4 Out-of-Process Method Invocation:
5    Caller:
6       eax: object ID
7       ecx: method ID
8
9       edx: pointer to parameter info block (PIB), described below
10
11       Call the 32-bit address stored at 0x7fff0000 to invoke the method.
12       
13       Upon return:
14       ebx, esi, edi, ebp, esp: preserved
15       eax: pointer to exception, or NULL if none.
16            If there is an exception, the user part of the syscall
17            function will search for an exception handling function
18            that covers the calling address.  If none is found,
19            it will assume that it is a language without exception
20            handling, and return the exception to the caller in eax.
21       ecx: clobbered
22       edx: pointer to args, with out params filled in; in params
23            may be clobbered.  This will be the same pointer as
24            was passed in by the caller.
25       
26    Callee:
27       params on stack (low addr to high), ids replaced with pointers,
28       at least 4 bytes of spare space beyond the high element
29
30       eax: object pointer
31       edx: pointer to caller information struct, if such was
32            requested
33       ecx: return address
34       
35       Upon return:
36       
37       params on stack (low addr to high), in params may be clobbered
38       eax: pointer to exception, or NULL if none.
39       ebx, esi, edi, ebp, esp: should be preserved
40       ecx, edx: may be clobbered
41
42 Stack:
43    esp is stack pointer, grows down, decrement before store
44       
45 Object structure:
46    The object ID is stored as a 32-bit quantity at an offset
47    specified by calling a method TBD.
48
49 Wrapper object creation:
50         The function to create wrapper objects is specified by calling a method
51    TBD.  The function shall conform to the local ABI, and takes an ID as a
52    32-bit integer as the first parameter, and a pointer to the class as
53    the second. It returns a pointer.
54    
55    Wrapper objects may be preemptively declared to avoid infinite loops by
56    calling a method TBD.
57
58 Struct padding:
59    All fields are padded so that basic types are naturally aligned.
60