blob: b163c5c40dbcf2bb7a156d8a04b4f88731c025d7 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#ifndef _LINUX_LINKAGE_H
2#define _LINUX_LINKAGE_H
3
Linus Torvalds1da177e2005-04-16 15:20:36 -07004#include <asm/linkage.h>
5
6#ifdef __cplusplus
7#define CPP_ASMLINKAGE extern "C"
8#else
9#define CPP_ASMLINKAGE
10#endif
11
12#ifndef asmlinkage
13#define asmlinkage CPP_ASMLINKAGE
14#endif
15
Ingo Molnard50efc62008-01-30 13:33:00 +010016#ifndef asmregparm
17# define asmregparm
18#endif
19
Linus Torvaldsd10d89e2008-04-10 17:35:23 -070020/*
21 * This is used by architectures to keep arguments on the stack
22 * untouched by the compiler by keeping them live until the end.
23 * The argument stack may be owned by the assembly-language
24 * caller, not the callee, and gcc doesn't always understand
25 * that.
26 *
27 * We have the return value, and a maximum of six arguments.
28 *
29 * This should always be followed by a "return ret" for the
30 * protection to work (ie no more work that the compiler might
31 * end up needing stack temporaries for).
32 */
Roland McGrath54a01512008-04-10 15:37:38 -070033#ifndef asmlinkage_protect
34# define asmlinkage_protect(n, ret, args...) do { } while (0)
Linus Torvalds1da177e2005-04-16 15:20:36 -070035#endif
36
37#ifndef __ALIGN
38#define __ALIGN .align 4,0x90
39#define __ALIGN_STR ".align 4,0x90"
40#endif
41
42#ifdef __ASSEMBLY__
43
44#define ALIGN __ALIGN
45#define ALIGN_STR __ALIGN_STR
46
Jan Beulichab7efcc2006-03-24 03:16:17 -080047#ifndef ENTRY
Linus Torvalds1da177e2005-04-16 15:20:36 -070048#define ENTRY(name) \
49 .globl name; \
50 ALIGN; \
51 name:
Jan Beulichab7efcc2006-03-24 03:16:17 -080052#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -070053
Rusty Russell214541d2007-10-21 16:41:34 -070054#ifndef WEAK
55#define WEAK(name) \
56 .weak name; \
57 name:
58#endif
59
Prasanna S Panchamukhid0aaff92005-09-06 15:19:26 -070060#define KPROBE_ENTRY(name) \
Prasanna S.Pd28c4392006-09-26 10:52:34 +020061 .pushsection .kprobes.text, "ax"; \
Jan Beulichab7efcc2006-03-24 03:16:17 -080062 ENTRY(name)
Prasanna S Panchamukhid0aaff92005-09-06 15:19:26 -070063
Prasanna S.Pd28c4392006-09-26 10:52:34 +020064#define KPROBE_END(name) \
65 END(name); \
66 .popsection
67
Jan Beulichab7efcc2006-03-24 03:16:17 -080068#ifndef END
69#define END(name) \
70 .size name, .-name
71#endif
72
John Reiser6b8be6d2008-01-30 13:33:13 +010073/* If symbol 'name' is treated as a subroutine (gets called, and returns)
74 * then please use ENDPROC to mark 'name' as STT_FUNC for the benefit of
75 * static analysis tools such as stack depth analyzer.
76 */
Jan Beulichab7efcc2006-03-24 03:16:17 -080077#ifndef ENDPROC
78#define ENDPROC(name) \
79 .type name, @function; \
80 END(name)
81#endif
Prasanna S Panchamukhid0aaff92005-09-06 15:19:26 -070082
Linus Torvalds1da177e2005-04-16 15:20:36 -070083#endif
84
85#define NORET_TYPE /**/
86#define ATTRIB_NORET __attribute__((noreturn))
87#define NORET_AND noreturn,
88
Linus Torvalds1da177e2005-04-16 15:20:36 -070089#endif