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