linux/arch/x86/lib/thunk_64.S
<<
>>
Prefs
   1/*
   2 * Save registers before calling assembly functions. This avoids
   3 * disturbance of register allocation in some inline assembly constructs.
   4 * Copyright 2001,2002 by Andi Kleen, SuSE Labs.
   5 * Subject to the GNU public license, v.2. No warranty of any kind.
   6 */
   7
   8        #include <linux/linkage.h>
   9        #include <asm/dwarf2.h>
  10        #include <asm/calling.h>                        
  11        #include <asm/rwlock.h>
  12                
  13        /* rdi: arg1 ... normal C conventions. rax is saved/restored. */        
  14        .macro thunk name,func
  15        .globl \name
  16\name:  
  17        CFI_STARTPROC
  18        SAVE_ARGS
  19        call \func
  20        jmp  restore
  21        CFI_ENDPROC
  22        .endm
  23
  24        /* rdi: arg1 ... normal C conventions. rax is passed from C. */         
  25        .macro thunk_retrax name,func
  26        .globl \name
  27\name:  
  28        CFI_STARTPROC
  29        SAVE_ARGS
  30        call \func
  31        jmp  restore_norax
  32        CFI_ENDPROC
  33        .endm
  34        
  35
  36        .section .sched.text
  37#ifdef CONFIG_RWSEM_XCHGADD_ALGORITHM
  38        thunk rwsem_down_read_failed_thunk,rwsem_down_read_failed
  39        thunk rwsem_down_write_failed_thunk,rwsem_down_write_failed
  40        thunk rwsem_wake_thunk,rwsem_wake
  41        thunk rwsem_downgrade_thunk,rwsem_downgrade_wake
  42#endif  
  43        
  44        thunk __down_failed,__down
  45        thunk_retrax __down_failed_interruptible,__down_interruptible
  46        thunk_retrax __down_failed_trylock,__down_trylock
  47        thunk __up_wakeup,__up
  48
  49#ifdef CONFIG_TRACE_IRQFLAGS
  50        thunk trace_hardirqs_on_thunk,trace_hardirqs_on
  51        thunk trace_hardirqs_off_thunk,trace_hardirqs_off
  52#endif
  53
  54#ifdef CONFIG_DEBUG_LOCK_ALLOC
  55        thunk lockdep_sys_exit_thunk,lockdep_sys_exit
  56#endif
  57        
  58        /* SAVE_ARGS below is used only for the .cfi directives it contains. */
  59        CFI_STARTPROC
  60        SAVE_ARGS
  61restore:
  62        RESTORE_ARGS
  63        ret     
  64        CFI_ENDPROC
  65        
  66        CFI_STARTPROC
  67        SAVE_ARGS
  68restore_norax:  
  69        RESTORE_ARGS 1
  70        ret
  71        CFI_ENDPROC
  72