File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/linkage.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: #ifndef _ASM_X86_LINKAGE_H
       2: #define _ASM_X86_LINKAGE_H
       3: 
       4: #include <linux/stringify.h>
       5: 
       6: #undef notrace
       7: #define notrace __attribute__((no_instrument_function))
       8: 
       9: #ifdef CONFIG_X86_32
      10: #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
      11: 
      12: /*
      13:  * Make sure the compiler doesn't do anything stupid with the
      14:  * arguments on the stack - they are owned by the *caller*, not
      15:  * the callee. This just fools gcc into not spilling into them,
      16:  * and keeps it from doing tailcall recursion and/or using the
      17:  * stack slots for temporaries, since they are live and "used"
      18:  * all the way to the end of the function.
      19:  *
      20:  * NOTE! On x86-64, all the arguments are in registers, so this
      21:  * only matters on a 32-bit kernel.
      22:  */
      23: #define asmlinkage_protect(n, ret, args...) \
      24:     __asmlinkage_protect##n(ret, ##args)
      25: #define __asmlinkage_protect_n(ret, args...) \
      26:     __asm__ __volatile__ ("" : "=r" (ret) : "0" (ret), ##args)
      27: #define __asmlinkage_protect0(ret) \
      28:     __asmlinkage_protect_n(ret)
      29: #define __asmlinkage_protect1(ret, arg1) \
      30:     __asmlinkage_protect_n(ret, "m" (arg1))
      31: #define __asmlinkage_protect2(ret, arg1, arg2) \
      32:     __asmlinkage_protect_n(ret, "m" (arg1), "m" (arg2))
      33: #define __asmlinkage_protect3(ret, arg1, arg2, arg3) \
      34:     __asmlinkage_protect_n(ret, "m" (arg1), "m" (arg2), "m" (arg3))
      35: #define __asmlinkage_protect4(ret, arg1, arg2, arg3, arg4) \
      36:     __asmlinkage_protect_n(ret, "m" (arg1), "m" (arg2), "m" (arg3), \
      37:                   "m" (arg4))
      38: #define __asmlinkage_protect5(ret, arg1, arg2, arg3, arg4, arg5) \
      39:     __asmlinkage_protect_n(ret, "m" (arg1), "m" (arg2), "m" (arg3), \
      40:                   "m" (arg4), "m" (arg5))
      41: #define __asmlinkage_protect6(ret, arg1, arg2, arg3, arg4, arg5, arg6) \
      42:     __asmlinkage_protect_n(ret, "m" (arg1), "m" (arg2), "m" (arg3), \
      43:                   "m" (arg4), "m" (arg5), "m" (arg6))
      44: 
      45: #endif /* CONFIG_X86_32 */
      46: 
      47: #ifdef __ASSEMBLY__
      48: 
      49: #define GLOBAL(name)    \
      50:     .globl name;    \
      51:     name:
      52: 
      53: #if defined(CONFIG_X86_64) || defined(CONFIG_X86_ALIGNMENT_16)
      54: #define __ALIGN        .p2align 4, 0x90
      55: #define __ALIGN_STR    __stringify(__ALIGN)
      56: #endif
      57: 
      58: #endif /* __ASSEMBLY__ */
      59: 
      60: #endif /* _ASM_X86_LINKAGE_H */
      61: 
      62: