1 diff -Nurp util-vserver-0.30.210.orig/lib/syscall-alternative.h util-vserver-0.30.210.shiny10/lib/syscall-alternative.h
2 --- util-vserver-0.30.210.orig/lib/syscall-alternative.h 2005-10-28 18:33:50.000000000 +0200
3 +++ util-vserver-0.30.210.shiny10/lib/syscall-alternative.h 2006-04-02 21:07:52.000000000 +0200
5 - // from http://vserver.13thfloor.at/Experimental/SYSCALL/syscall_shiny7.h
7 #ifndef __SYSCALL_NEW_H
8 #define __SYSCALL_NEW_H
10 -/* Copyright (C) 2005 Herbert Pötzl
11 +/* Copyright (C) 2005-2006 Herbert Pötzl
16 __sysc_rcon(n) ... syscall register constraint
17 __sysc_regs ... list of input regs for clobber
18 __sysc_type ... register type
19 + __sysc_aout ... asm code output constraint
23 __sc_asmload(n,N,...) ... asm code to prepare arguments
24 __sc_asmsysc(n,N) ... asm code to execute syscall
25 - __sc_asmsave(n,r,e) ... asm code to store results
26 + __sc_asmsave(n) ... asm code to store results
32 serr: (sret >= (unsigned)-EMAXERRNO)
33 call: ble 0x100(%%sr2, %%r0)
34 - clob: r1, r2, r4, r20, r29, r31, memory
35 + clob: r1, r2, (r4), r20, r29, r31, memory
39 #define __sysc_max_err 4095
41 ("r26", "r25", "r24", "r23", "r22", "r21")
43 #define __sysc_cmd_sys "ble 0x100(%%sr2,%%r0)"
44 -#define __sysc_cmd_fin "ldi %0,%%r20"
46 -#define __sysc_clobber __sysc_regs, \
47 - "r1", "r2", "r4", "r20", "r29", "r31", "memory"
48 +#define __sysc_pre(n) \
49 + __pasm(n,1,1, "copy %%r19, %%r4" , )
51 -#warning syscall arch hppa not tested yet
52 +#define __sysc_fin(n) \
53 + __casm(n,1,1, "ldi %0,%%r20" , )\
54 + __pasm(n,1,1, "copy %%r4, %%r19" , )
57 +#define __sysc_clobber __sysc_regs, \
58 + "r1", "r2", "r20", "r29", "r31", "memory"
60 +#define __sysc_clobber __sysc_regs, \
61 + "r1", "r2", "r4", "r20", "r29", "r31", "memory"
65 /* *****************************************
68 serr: (sret >= (unsigned)-EMAXERRNO)
75 __casm(n,6,1, "pushl %%ebp" , )\
76 ""::__sc_iregs(n,__VA_ARGS__):__sysc_clobber)
78 +#define __sc_asmsave(n)
80 #define __sysc_pre(n) \
81 __casm(n,6,1, "movl %%eax,%%ebp" , )\
82 - __casm(n,0,1, "movl %0,%%eax" , )\
83 + __casm(n,0,1, "movl %1,%%eax" , )\
85 #define __sysc_fin(n) \
86 __casm(n,6,1, "popl %%ebp" , )\
87 __pasm(n,1,1, "popl %%ebx" , )\
89 -#define __sysc_clobber __sysc_regs, "eax", "memory"
90 +#define __sysc_aout "=a"(__res)
91 +#define __sysc_clobber __sysc_regs, "memory"
94 /* *****************************************
97 #elif defined(__mips__)
99 -#error syscall arch mips not implemented yet
100 +/* The ABIO32 calling convention uses a0-a3 to pass the first
101 + four arguments, the rest is passed on the userspace stack. The 5th arg
104 + ABIN32 and ABI64 pass 6 args in a0-a3, t0-t1.
107 + args: a1(a0), a2(a1), a3(a2), a4(a3), a5(16($sp)), a6(20($sp))
111 + clob: at, v0, t0-t7, t8-t9
114 +#define __sysc_reg_cid "v0"
115 +#define __sysc_reg_ret "v0"
116 +#define __sysc_reg_err "a3"
117 +#define __sysc_cmd_sys "syscall"
119 +#define __sysc_reg(n) __arg_##n\
120 + ("a0","a1","a2","a3", "t0", "t1")
122 +#define __sysc_clobber "$1", "$3", "$8", "$9", "$10", "$11", "$12", \
123 + "$13", "$14", "$15", "$24", "$25", "memory"
125 +#if _MIPS_SIM == _ABIO32
126 +#define __sysc_pre(n) \
127 + __casm(n,5,1,"addiu $sp,$sp,-32",) \
128 + __casm(n,6,1,"sw $9,20($sp)",) \
129 + __casm(n,5,1,"sw $8, 16($sp)",)
130 +#define __sysc_fin(n) \
131 + __casm(n,5,1,"addiu $sp,$sp,32",)
132 +#elif (_MIPS_SIM == _ABIN32) || (_MIPS_SIM == _ABI64)
133 +#warning syscall arch mips with ABI N32 and 64 not tested yet
135 +#error unknown mips ABI version
139 /* *****************************************
141 #define __sysc_clobber __sysc_regs, \
142 "cc", "r11", "rcx", "memory"
144 +#define __sysc_aout "=a"(__res)
147 #error unknown kernel arch
149 #define __sc_inp_def(n,value)
153 +#if !defined(__sysc_save) && !defined(__sysc_aout)
154 #define __sc_res_def(n,r) __sc_asm_reg(n, r);
156 #define __sc_res_def(n,r) __sc_reg(n);
162 #ifdef __sc_complex /* complex result */
170 #define __sc_results \
171 __sc_res_def(__res, __sysc_reg_res)
174 __casm(n,3,0,"%3 ",) __casm(n,4,0,"%4 ",) __casm(n,5,0,"%5 ",) \
175 __casm(n,6,0,"%6 ",) "*/"
178 +#define __sc_dummy_save(n)
179 +#define __sc_asmsave(n)
181 #define __sc_dummy_save(n) "/* gcc dummy save " \
182 __casm(n,0,0,"%0 ",) __casm(n,1,0,"%1 ",) "*/"
185 #define __comment(name) "\t/* kernel sys_" \
186 #name "[" __stringify(__sc_id(name)) "] */"
187 @@ -1006,10 +1059,14 @@
196 #define __sc_asmsysc(n,N) __sc_asm_vol( \
197 __casm(n,0,0, __sc_cmds(n,N) , )\
198 - ::"i"(__sc_id(N)) : __sysc_clobber)
199 + :__sysc_aout:"i"(__sc_id(N)) : __sysc_clobber)
203 @@ -1031,33 +1088,33 @@
207 -#define _syscall0(type, name) \
208 +#define _syscall0(type, name) \
210 __sc_body(0, type, name, *)
212 -#define _syscall1(type, name, type1, arg1) \
213 +#define _syscall1(type, name, type1, arg1) \
214 type name(type1 arg1) \
215 __sc_body(1, type, name, arg1)
217 -#define _syscall2(type, name, type1, arg1, type2, arg2) \
218 +#define _syscall2(type, name, type1, arg1, type2, arg2) \
219 type name(type1 arg1, type2 arg2) \
220 __sc_body(2, type, name, arg1, arg2)
222 -#define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3) \
223 +#define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3) \
224 type name(type1 arg1, type2 arg2, type3 arg3) \
225 __sc_body(3, type, name, arg1, arg2, arg3)
227 -#define _syscall4(type, name, type1, arg1, type2, arg2, type3, arg3, \
228 +#define _syscall4(type, name, type1, arg1, type2, arg2, type3, arg3, \
230 type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
231 __sc_body(4, type, name, arg1, arg2, arg3, arg4)
233 -#define _syscall5(type, name, type1, arg1, type2, arg2, type3, arg3, \
234 - type4, arg4, type5, arg5) \
235 +#define _syscall5(type, name, type1, arg1, type2, arg2, type3, arg3, \
236 + type4, arg4, type5, arg5) \
237 type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
238 __sc_body(5, type, name, arg1, arg2, arg3, arg4, arg5)
240 -#define _syscall6(type, name, type1, arg1, type2, arg2, type3, arg3, \
241 +#define _syscall6(type, name, type1, arg1, type2, arg2, type3, arg3, \
242 type4, arg4, type5, arg5, type6, arg6) \
243 type name(type1 arg1, type2 arg2, type3 arg3, \
244 type4 arg4, type5 arg5, type6 arg6) \