Changeset 2497

Show
Ignore:
Timestamp:
02/14/07 20:24:35 (2 years ago)
Author:
dhozac
Message:

Update to latest shiny.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/syscall-alternative.h

    r2495 r2497  
    1  // from http://vserver.13thfloor.at/Experimental/SYSCALL/syscall_shiny15.h 
     1 // from http://vserver.13thfloor.at/Experimental/SYSCALL/syscall_shiny16.h 
    22 
    33#ifndef __SYSCALL_NEW_H 
     
    2929        __sysc_con_ret  ... return value contraint (def: "=r") 
    3030        __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) 
    3140 
    3241*/ 
     
    237246#define __sysc_max_err  129 
    238247 
    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")) 
    244282 
    245283#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"      ,)\ 
    251284        __pasm(n,1,1,   "pushl  %%ebx"          ,)\ 
    252         __casm(n,1,1,  "movl  %2, %%ebx"      ,)\ 
     285        __Casm(n,1,6,1,,"movl %2, %%ebx"      ,)\ 
    253286        __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"   ,)\ 
    255289        __casm(n,0,1,   "movl   %1, %%eax"      ,)\ 
    256290        __casm(n,0,1,   "int    $0x80"          ,)\ 
     
    258292        __pasm(n,1,1,   "popl   %%ebx"          ,) 
    259293 
    260 #define __sysc_acon(n)  "g" 
    261294#define __sysc_reg_ret  "eax" 
    262295#define __sysc_con_ret  "=a" 
     
    675708#define __lst_0(x,a0) 
    676709 
    677         /* argument selection */ 
    678  
    679 #define __arg_0(...) 
    680 #define __arg_1(a1,...)                 a1 
    681 #define __arg_2(a1,a2,...)              a2 
    682 #define __arg_3(a1,a2,a3,...)           a3 
    683 #define __arg_4(a1,a2,a3,a4,...)        a4 
    684 #define __arg_5(a1,a2,a3,a4,a5,...)     a5 
    685 #define __arg_6(a1,a2,a3,a4,a5,a6)      a6 
    686  
    687710        /* argument concatenation */ 
    688711 
     
    695718#define __con_0(x,a0) 
    696719 
     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 
    697730        /* list remainder */ 
    698731 
     
    791824 
    792825#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) 
    793827 
    794828#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 
    795831#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 
    796834 
    797835#define __sc_cast(v)            (__sysc_type)(v) 
     
    816854#define __sc_ivals(n,...)       __lst_##n(__sc_rval,__VA_ARGS__) 
    817855#else 
    818 #define __sc_input(n,...) 
    819856#define __sc_ivals(n,...)       __lst_##n(__sc_ival,__VA_ARGS__) 
    820857#endif 
     
    824861                                __sysc_reg_cid, __sysc_cid(N)) 
    825862#define __sc_cidval(N)          __sysc_con_cid (__sc_id) 
     863#endif 
     864 
     865#ifndef __sc_input 
     866#define __sc_input(n,...) 
    826867#endif 
    827868 
     
    858899#ifdef  __sc_complex    /* complex result */ 
    859900 
     901#ifndef __sc_results 
    860902#define __sc_results    __sc_def_ret; __sc_def_err 
     903#endif 
    861904 
    862905#ifndef __sysc_errc 
     
    875918#define __sc_oregs      __sysc_con_ret (__sc_ret),                      \ 
    876919                        __sysc_con_err (__sc_err) 
     920#ifndef __sc_return 
    877921#define __sc_return(t)  ret = __sc_ret; err = __sc_err;                 \ 
    878922                        __sysc_retv(t, ret, err) 
    879  
     923#endif 
    880924#else                   /* simple result  */ 
    881925 
     926#ifndef __sc_results 
    882927#define __sc_results    __sc_def_ret 
     928#endif 
    883929 
    884930#ifndef __sysc_errc 
     
    898944 
    899945#define __sc_oregs      __sysc_con_ret (__sc_ret) 
     946#ifndef __sc_return 
    900947#define __sc_return(t)  ret = __sc_ret; __sysc_retv(t, ret) 
    901  
     948#endif 
    902949#endif                  /* simple/complex */ 
    903950 
     
    909956#define __sc_asm_vol    __asm__ __volatile__ 
    910957 
     958#ifndef __sc_syscall 
    911959#define __sc_syscall(n,N,...)                                           \ 
    912         __sc_asm_vol (__sysc_cmd(n)                                            
     960        __sc_asm_vol (__sysc_cmd(n)                                     
    913961          : __sc_oregs                                                  \ 
    914962          : __sc_cidval(N) __sc_ivals(n,__VA_ARGS__)                    \ 
    915963          : __sysc_clobber __sc_cregs(n,__sysc_clbrs)) 
    916  
    917  
     964#endif 
     965 
     966#ifndef __sc_body 
    918967#define __sc_body(n, type, name, ...)                                   \ 
    919968{                                                                       \ 
     
    923972        __sc_return(type);                                              \ 
    924973} 
    925  
     974#endif 
    926975 
    927976#define _syscall0(type, name)                                           \