1 #ifndef _LINUX_LINKAGE_H 2 #define _LINUX_LINKAGE_H 3 4 #include <linux/config.h> 5 6 #ifdef __cplusplus 7 #define CPP_ASMLINKAGE extern "C" 8 #else 9 #define CPP_ASMLINKAGE 10 #endif 11 12 #if defined __i386__ 13 #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0))) 14 #elif defined __ia64__ 15 #define asmlinkage CPP_ASMLINKAGE __attribute__((syscall_linkage)) 16 #else 17 #define asmlinkage CPP_ASMLINKAGE 18 #endif 19 20 #define SYMBOL_NAME_STR(X) #X 21 #define SYMBOL_NAME(X) X 22 #ifdef __STDC__ 23 #define SYMBOL_NAME_LABEL(X) X##: 24 #else 25 #define SYMBOL_NAME_LABEL(X) X/**/: 26 #endif 27 28 #ifdef __arm__ 29 #define __ALIGN .align 0 30 #define __ALIGN_STR ".align 0" 31 #else 32 #ifdef __mc68000__ 33 #define __ALIGN .align 4 34 #define __ALIGN_STR ".align 4" 35 #else 36 #ifdef __sh__ 37 #define __ALIGN .balign 4 38 #define __ALIGN_STR ".balign 4" 39 #else 40 #if defined(__i386__) && defined(CONFIG_X86_ALIGNMENT_16) 41 #define __ALIGN .align 16,0x90 42 #define __ALIGN_STR ".align 16,0x90" 43 #else 44 #define __ALIGN .align 4,0x90 45 #define __ALIGN_STR ".align 4,0x90" 46 #endif 47 #endif /* __sh__ */ 48 #endif /* __mc68000__ */ 49 #endif /* __arm__ */ 50 51 #ifdef __ASSEMBLY__ 52 53 #define ALIGN __ALIGN 54 #define ALIGN_STR __ALIGN_STR 55 56 #define ENTRY(name) \ 57 .globl SYMBOL_NAME(name); \ 58 ALIGN; \ 59 SYMBOL_NAME_LABEL(name) 60 61 #endif 62 63 #endif 64