Changeset 2497
- Timestamp:
- 02/14/07 20:24:35 (2 years ago)
- Files:
-
- trunk/lib/syscall-alternative.h (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/syscall-alternative.h
r2495 r2497 1 // from http://vserver.13thfloor.at/Experimental/SYSCALL/syscall_shiny1 5.h1 // from http://vserver.13thfloor.at/Experimental/SYSCALL/syscall_shiny16.h 2 2 3 3 #ifndef __SYSCALL_NEW_H … … 29 29 __sysc_con_ret ... return value contraint (def: "=r") 30 30 __sysc_con_err ... error value contraint (def: "=r") 31 32 hard core replacements 33 34 __sc_body(n,type,name,...) 35 __sc_results 36 __sc_cidvar(N) 37 __sc_input(n,...) 38 __sc_syscall(n,N,...) 39 __sc_return(t) 31 40 32 41 */ … … 237 246 #define __sysc_max_err 129 238 247 239 #ifndef __PIC__ 240 #define __sysc_clbrs "memory", "ebx", "ecx", "edx", "esi", "edi" 241 #else 242 #define __sysc_clbrs "memory", "memory", "ecx", "edx", "esi", "edi" 243 #endif 248 #define __sc_reg1(...) __sc_cast(__arg_1(__VA_ARGS__,,,,,,)) 249 #define __sc_reg6(...) __sc_cast(__arg_6(__VA_ARGS__,,,,,,)) 250 251 #define __scsd struct { __sc_ldef(__a); __sc_ldef(__b); } __scs 252 #define __scsa(n,...) \ 253 __scs.__a = __sc_reg1(__VA_ARGS__); \ 254 __scs.__b = __sc_reg6(__VA_ARGS__); 255 256 #define __sc_input(n,...) __casm(n,6,0, \ 257 __scsd; __scsa(n,__VA_ARGS__), ) 258 259 #define __cm , 260 #define __sc_null(n) __arg_##n( \ 261 __cm,__cm,__cm,__cm,__cm,__cm) 262 263 #define __sc_rvcs(r,v) r (__sc_cast(v)) 264 265 #define __sc_rvrd(n,N) __arg_##n(, \ 266 __cm __sc_rvcs("c", N), \ 267 __cm __sc_rvcs("d", N), \ 268 __cm __sc_rvcs("S", N), \ 269 __cm __sc_rvcs("D", N),) 270 271 #define __sc_arg1(n,...) __Casm(n,1,6,0,, \ 272 __sc_rvcs("ri", __sc_reg1(__VA_ARGS__)),\ 273 __sc_rvcs("0", &__scs)) 274 275 #define __sc_syscall(n,N,...) \ 276 __sc_asm_vol (__sysc_cmd(n) \ 277 : __sc_oregs \ 278 : __sc_cidval(N) __sc_null(n) \ 279 __sc_arg1(n,__VA_ARGS__) \ 280 __con_##n(__sc_rvrd,__VA_ARGS__) \ 281 : "memory" __nopic(__cm "ebx")) 244 282 245 283 #define __sysc_cmd(n) \ 246 __casm(n,6,1, "movl %7, %%eax" ,)\247 __casm(n,5,1, "movl %6, %%edi" ,)\248 __casm(n,4,1, "movl %5, %%esi" ,)\249 __casm(n,3,1, "movl %4, %%edx" ,)\250 __casm(n,2,1, "movl %3, %%ecx" ,)\251 284 __pasm(n,1,1, "pushl %%ebx" ,)\ 252 __ casm(n,1,1,"movl %2, %%ebx" ,)\285 __Casm(n,1,6,1,,"movl %2, %%ebx" ,)\ 253 286 __casm(n,6,1, "pushl %%ebp" ,)\ 254 __casm(n,6,1, "movl %%eax, %%ebp" ,)\ 287 __casm(n,6,1, "movl 0(%2), %%ebx" ,)\ 288 __casm(n,6,1, "movl 4(%2), %%ebp" ,)\ 255 289 __casm(n,0,1, "movl %1, %%eax" ,)\ 256 290 __casm(n,0,1, "int $0x80" ,)\ … … 258 292 __pasm(n,1,1, "popl %%ebx" ,) 259 293 260 #define __sysc_acon(n) "g"261 294 #define __sysc_reg_ret "eax" 262 295 #define __sysc_con_ret "=a" … … 675 708 #define __lst_0(x,a0) 676 709 677 /* argument selection */678 679 #define __arg_0(...)680 #define __arg_1(a1,...) a1681 #define __arg_2(a1,a2,...) a2682 #define __arg_3(a1,a2,a3,...) a3683 #define __arg_4(a1,a2,a3,a4,...) a4684 #define __arg_5(a1,a2,a3,a4,a5,...) a5685 #define __arg_6(a1,a2,a3,a4,a5,a6) a6686 687 710 /* argument concatenation */ 688 711 … … 695 718 #define __con_0(x,a0) 696 719 720 /* argument selection */ 721 722 #define __arg_0(...) 723 #define __arg_1(a1,...) a1 724 #define __arg_2(a1,a2,...) a2 725 #define __arg_3(a1,a2,a3,...) a3 726 #define __arg_4(a1,a2,a3,a4,...) a4 727 #define __arg_5(a1,a2,a3,a4,a5,...) a5 728 #define __arg_6(a1,a2,a3,a4,a5,a6,...) a6 729 697 730 /* list remainder */ 698 731 … … 791 824 792 825 #define __casm(n,a,r,v,w) __casm_##n##a(v,w,r) 826 #define __Casm(n,a,b,r,u,v,w) __casm_##n##b(w,__casm_##n##a(v,u,r),r) 793 827 794 828 #define __pasm(n,a,r,v,w) __pic(__casm(n,a,r,v,w)) 829 #define __Pasm(n,a,b,r,u,v,w) __pic(__Casm(n,a,b,r,u,v,w)) 830 795 831 #define __nasm(n,a,r,v,w) __nopic(__casm(n,a,r,v,w)) 832 #define __Nasm(n,a,b,r,u,v,w) __nopic(__Casm(n,a,b,r,u,v,w)) 833 796 834 797 835 #define __sc_cast(v) (__sysc_type)(v) … … 816 854 #define __sc_ivals(n,...) __lst_##n(__sc_rval,__VA_ARGS__) 817 855 #else 818 #define __sc_input(n,...)819 856 #define __sc_ivals(n,...) __lst_##n(__sc_ival,__VA_ARGS__) 820 857 #endif … … 824 861 __sysc_reg_cid, __sysc_cid(N)) 825 862 #define __sc_cidval(N) __sysc_con_cid (__sc_id) 863 #endif 864 865 #ifndef __sc_input 866 #define __sc_input(n,...) 826 867 #endif 827 868 … … 858 899 #ifdef __sc_complex /* complex result */ 859 900 901 #ifndef __sc_results 860 902 #define __sc_results __sc_def_ret; __sc_def_err 903 #endif 861 904 862 905 #ifndef __sysc_errc … … 875 918 #define __sc_oregs __sysc_con_ret (__sc_ret), \ 876 919 __sysc_con_err (__sc_err) 920 #ifndef __sc_return 877 921 #define __sc_return(t) ret = __sc_ret; err = __sc_err; \ 878 922 __sysc_retv(t, ret, err) 879 923 #endif 880 924 #else /* simple result */ 881 925 926 #ifndef __sc_results 882 927 #define __sc_results __sc_def_ret 928 #endif 883 929 884 930 #ifndef __sysc_errc … … 898 944 899 945 #define __sc_oregs __sysc_con_ret (__sc_ret) 946 #ifndef __sc_return 900 947 #define __sc_return(t) ret = __sc_ret; __sysc_retv(t, ret) 901 948 #endif 902 949 #endif /* simple/complex */ 903 950 … … 909 956 #define __sc_asm_vol __asm__ __volatile__ 910 957 958 #ifndef __sc_syscall 911 959 #define __sc_syscall(n,N,...) \ 912 __sc_asm_vol (__sysc_cmd(n) \960 __sc_asm_vol (__sysc_cmd(n) \ 913 961 : __sc_oregs \ 914 962 : __sc_cidval(N) __sc_ivals(n,__VA_ARGS__) \ 915 963 : __sysc_clobber __sc_cregs(n,__sysc_clbrs)) 916 917 964 #endif 965 966 #ifndef __sc_body 918 967 #define __sc_body(n, type, name, ...) \ 919 968 { \ … … 923 972 __sc_return(type); \ 924 973 } 925 974 #endif 926 975 927 976 #define _syscall0(type, name) \
