2008-01-30 13:31:07 +01:00
# ifndef __ASM_LINKAGE_H
# define __ASM_LINKAGE_H
2008-04-17 17:40:51 +02:00
# undef notrace
# define notrace __attribute__((no_instrument_function))
2008-01-30 13:31:07 +01:00
# ifdef CONFIG_X86_64
# define __ALIGN .p2align 4,,15
# define __ALIGN_STR ".p2align 4,,15"
# endif
2007-10-11 11:20:03 +02:00
# ifdef CONFIG_X86_32
2008-01-30 13:31:07 +01:00
# define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
2008-01-30 13:33:00 +01:00
/*
* For 32 - bit UML - mark functions implemented in assembly that use
* regparm input parameters :
*/
# define asmregparm __attribute__((regparm(3)))
2008-04-10 15:37:38 -07:00
2008-04-10 17:35:23 -07:00
/*
* Make sure the compiler doesn ' t do anything stupid with the
* arguments on the stack - they are owned by the * caller * , not
* the callee . This just fools gcc into not spilling into them ,
* and keeps it from doing tailcall recursion and / or using the
* stack slots for temporaries , since they are live and " used "
* all the way to the end of the function .
*
* NOTE ! On x86 - 64 , all the arguments are in registers , so this
* only matters on a 32 - bit kernel .
*/
2008-04-10 15:37:38 -07:00
# define asmlinkage_protect(n, ret, args...) \
__asmlinkage_protect # # n ( ret , # # args )
# define __asmlinkage_protect_n(ret, args...) \
__asm__ __volatile__ ( " " : " =r " ( ret ) : " 0 " ( ret ) , # # args )
# define __asmlinkage_protect0(ret) \
__asmlinkage_protect_n ( ret )
# define __asmlinkage_protect1(ret, arg1) \
__asmlinkage_protect_n ( ret , " g " ( arg1 ) )
# define __asmlinkage_protect2(ret, arg1, arg2) \
__asmlinkage_protect_n ( ret , " g " ( arg1 ) , " g " ( arg2 ) )
# define __asmlinkage_protect3(ret, arg1, arg2, arg3) \
__asmlinkage_protect_n ( ret , " g " ( arg1 ) , " g " ( arg2 ) , " g " ( arg3 ) )
# define __asmlinkage_protect4(ret, arg1, arg2, arg3, arg4) \
__asmlinkage_protect_n ( ret , " g " ( arg1 ) , " g " ( arg2 ) , " g " ( arg3 ) , \
" g " ( arg4 ) )
# define __asmlinkage_protect5(ret, arg1, arg2, arg3, arg4, arg5) \
__asmlinkage_protect_n ( ret , " g " ( arg1 ) , " g " ( arg2 ) , " g " ( arg3 ) , \
" g " ( arg4 ) , " g " ( arg5 ) )
# define __asmlinkage_protect6(ret, arg1, arg2, arg3, arg4, arg5, arg6) \
__asmlinkage_protect_n ( ret , " g " ( arg1 ) , " g " ( arg2 ) , " g " ( arg3 ) , \
" g " ( arg4 ) , " g " ( arg5 ) , " g " ( arg6 ) )
2008-01-30 13:31:07 +01:00
# endif
# ifdef CONFIG_X86_ALIGNMENT_16
# define __ALIGN .align 16,0x90
# define __ALIGN_STR ".align 16,0x90"
# endif
2007-10-11 11:20:03 +02:00
# endif
2008-01-30 13:31:07 +01:00