home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-x86_64 / calling.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.0 KB  |  163 lines

  1. /* 
  2.  * Some macros to handle stack frames in assembly.
  3.  */ 
  4.  
  5.  
  6. #define R15 0
  7. #define R14 8
  8. #define R13 16
  9. #define R12 24
  10. #define RBP 32
  11. #define RBX 40
  12. /* arguments: interrupts/non tracing syscalls only save upto here*/
  13. #define R11 48
  14. #define R10 56    
  15. #define R9 64
  16. #define R8 72
  17. #define RAX 80
  18. #define RCX 88
  19. #define RDX 96
  20. #define RSI 104
  21. #define RDI 112
  22. #define ORIG_RAX 120       /* + error_code */ 
  23. /* end of arguments */     
  24. /* cpu exception frame or undefined in case of fast syscall. */
  25. #define RIP 128
  26. #define CS 136
  27. #define EFLAGS 144
  28. #define RSP 152
  29. #define SS 160
  30. #define ARGOFFSET R11
  31. #define SWFRAME ORIG_RAX
  32.  
  33.     .macro SAVE_ARGS addskip=0,norcx=0,nor891011=0
  34.     subq  $9*8+\addskip,%rsp
  35.     CFI_ADJUST_CFA_OFFSET    9*8+\addskip
  36.     movq  %rdi,8*8(%rsp) 
  37.     CFI_REL_OFFSET    rdi,8*8
  38.     movq  %rsi,7*8(%rsp) 
  39.     CFI_REL_OFFSET    rsi,7*8
  40.     movq  %rdx,6*8(%rsp)
  41.     CFI_REL_OFFSET    rdx,6*8
  42.     .if \norcx
  43.     .else
  44.     movq  %rcx,5*8(%rsp)
  45.     CFI_REL_OFFSET    rcx,5*8
  46.     .endif
  47.     movq  %rax,4*8(%rsp) 
  48.     CFI_REL_OFFSET    rax,4*8
  49.     .if \nor891011
  50.     .else
  51.     movq  %r8,3*8(%rsp) 
  52.     CFI_REL_OFFSET    r8,3*8
  53.     movq  %r9,2*8(%rsp) 
  54.     CFI_REL_OFFSET    r9,2*8
  55.     movq  %r10,1*8(%rsp) 
  56.     CFI_REL_OFFSET    r10,1*8
  57.     movq  %r11,(%rsp) 
  58.     CFI_REL_OFFSET    r11,0*8
  59.     .endif
  60.     .endm
  61.  
  62. #define ARG_SKIP 9*8
  63.     .macro RESTORE_ARGS skiprax=0,addskip=0,skiprcx=0,skipr11=0,skipr8910=0,skiprdx=0
  64.     .if \skipr11
  65.     .else
  66.     movq (%rsp),%r11
  67.     CFI_RESTORE r11
  68.     .endif
  69.     .if \skipr8910
  70.     .else
  71.     movq 1*8(%rsp),%r10
  72.     CFI_RESTORE r10
  73.     movq 2*8(%rsp),%r9
  74.     CFI_RESTORE r9
  75.     movq 3*8(%rsp),%r8
  76.     CFI_RESTORE r8
  77.     .endif
  78.     .if \skiprax
  79.     .else
  80.     movq 4*8(%rsp),%rax
  81.     CFI_RESTORE rax
  82.     .endif
  83.     .if \skiprcx
  84.     .else
  85.     movq 5*8(%rsp),%rcx
  86.     CFI_RESTORE rcx
  87.     .endif
  88.     .if \skiprdx
  89.     .else
  90.     movq 6*8(%rsp),%rdx
  91.     CFI_RESTORE rdx
  92.     .endif
  93.     movq 7*8(%rsp),%rsi
  94.     CFI_RESTORE rsi
  95.     movq 8*8(%rsp),%rdi
  96.     CFI_RESTORE rdi
  97.     .if ARG_SKIP+\addskip > 0
  98.     addq $ARG_SKIP+\addskip,%rsp
  99.     CFI_ADJUST_CFA_OFFSET    -(ARG_SKIP+\addskip)
  100.     .endif
  101.     .endm    
  102.  
  103.     .macro LOAD_ARGS offset
  104.     movq \offset(%rsp),%r11
  105.     movq \offset+8(%rsp),%r10
  106.     movq \offset+16(%rsp),%r9
  107.     movq \offset+24(%rsp),%r8
  108.     movq \offset+40(%rsp),%rcx
  109.     movq \offset+48(%rsp),%rdx
  110.     movq \offset+56(%rsp),%rsi
  111.     movq \offset+64(%rsp),%rdi
  112.     movq \offset+72(%rsp),%rax
  113.     .endm
  114.             
  115. #define REST_SKIP 6*8            
  116.     .macro SAVE_REST
  117.     subq $REST_SKIP,%rsp
  118.     CFI_ADJUST_CFA_OFFSET    REST_SKIP
  119.     movq %rbx,5*8(%rsp) 
  120.     CFI_REL_OFFSET    rbx,5*8
  121.     movq %rbp,4*8(%rsp) 
  122.     CFI_REL_OFFSET    rbp,4*8
  123.     movq %r12,3*8(%rsp) 
  124.     CFI_REL_OFFSET    r12,3*8
  125.     movq %r13,2*8(%rsp) 
  126.     CFI_REL_OFFSET    r13,2*8
  127.     movq %r14,1*8(%rsp) 
  128.     CFI_REL_OFFSET    r14,1*8
  129.     movq %r15,(%rsp) 
  130.     CFI_REL_OFFSET    r15,0*8
  131.     .endm        
  132.  
  133.     .macro RESTORE_REST
  134.     movq (%rsp),%r15
  135.     CFI_RESTORE r15
  136.     movq 1*8(%rsp),%r14
  137.     CFI_RESTORE r14
  138.     movq 2*8(%rsp),%r13
  139.     CFI_RESTORE r13
  140.     movq 3*8(%rsp),%r12
  141.     CFI_RESTORE r12
  142.     movq 4*8(%rsp),%rbp
  143.     CFI_RESTORE rbp
  144.     movq 5*8(%rsp),%rbx
  145.     CFI_RESTORE rbx
  146.     addq $REST_SKIP,%rsp
  147.     CFI_ADJUST_CFA_OFFSET    -(REST_SKIP)
  148.     .endm
  149.         
  150.     .macro SAVE_ALL
  151.     SAVE_ARGS
  152.     SAVE_REST
  153.     .endm
  154.         
  155.     .macro RESTORE_ALL addskip=0
  156.     RESTORE_REST
  157.     RESTORE_ARGS 0,\addskip
  158.     .endm
  159.  
  160.     .macro icebp
  161.     .byte 0xf1
  162.     .endm
  163.