blob: 56ba37394656c7f211eaebdadf5481eda844acca [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#ifndef _LINUX_LINKAGE_H
2#define _LINUX_LINKAGE_H
3
Jeremy Fitzhardingea7bf0bd2008-05-28 15:02:14 +01004#include <linux/compiler.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07005#include <asm/linkage.h>
6
Ingo Molnarffdc1a02008-05-12 21:20:41 +02007#define notrace __attribute__((no_instrument_function))
8
Linus Torvalds1da177e2005-04-16 15:20:36 -07009#ifdef __cplusplus
10#define CPP_ASMLINKAGE extern "C"
11#else
12#define CPP_ASMLINKAGE
13#endif
14
15#ifndef asmlinkage
16#define asmlinkage CPP_ASMLINKAGE
17#endif
18
Ingo Molnard50efc62008-01-30 13:33:00 +010019#ifndef asmregparm
20# define asmregparm
21#endif
22
Jeremy Fitzhardingea7bf0bd2008-05-28 15:02:14 +010023#define __page_aligned_data __section(.data.page_aligned) __aligned(PAGE_SIZE)
24#define __page_aligned_bss __section(.bss.page_aligned) __aligned(PAGE_SIZE)
25
Linus Torvaldsd10d89e2008-04-10 17:35:23 -070026/*
27 * This is used by architectures to keep arguments on the stack
28 * untouched by the compiler by keeping them live until the end.
29 * The argument stack may be owned by the assembly-language
30 * caller, not the callee, and gcc doesn't always understand
31 * that.
32 *
33 * We have the return value, and a maximum of six arguments.
34 *
35 * This should always be followed by a "return ret" for the
36 * protection to work (ie no more work that the compiler might
37 * end up needing stack temporaries for).
38 */
Heiko Carstensb0fac022008-04-11 13:46:54 +020039/* Assembly files may be compiled with -traditional .. */
40#ifndef __ASSEMBLY__
Roland McGrath54a01512008-04-10 15:37:38 -070041#ifndef asmlinkage_protect
42# define asmlinkage_protect(n, ret, args...) do { } while (0)
Linus Torvalds1da177e2005-04-16 15:20:36 -070043#endif
Heiko Carstensb0fac022008-04-11 13:46:54 +020044#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -070045
46#ifndef __ALIGN
47#define __ALIGN .align 4,0x90
48#define __ALIGN_STR ".align 4,0x90"
49#endif
50
51#ifdef __ASSEMBLY__
52
53#define ALIGN __ALIGN
54#define ALIGN_STR __ALIGN_STR
55
Jan Beulichab7efcc2006-03-24 03:16:17 -080056#ifndef ENTRY
Linus Torvalds1da177e2005-04-16 15:20:36 -070057#define ENTRY(name) \
58 .globl name; \
59 ALIGN; \
60 name:
Jan Beulichab7efcc2006-03-24 03:16:17 -080061#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -070062
Rusty Russell214541d2007-10-21 16:41:34 -070063#ifndef WEAK
64#define WEAK(name) \
65 .weak name; \
66 name:
67#endif
68
Prasanna S Panchamukhid0aaff92005-09-06 15:19:26 -070069#define KPROBE_ENTRY(name) \
Prasanna S.Pd28c4392006-09-26 10:52:34 +020070 .pushsection .kprobes.text, "ax"; \
Jan Beulichab7efcc2006-03-24 03:16:17 -080071 ENTRY(name)
Prasanna S Panchamukhid0aaff92005-09-06 15:19:26 -070072
Prasanna S.Pd28c4392006-09-26 10:52:34 +020073#define KPROBE_END(name) \
74 END(name); \
75 .popsection
76
Jan Beulichab7efcc2006-03-24 03:16:17 -080077#ifndef END
78#define END(name) \
79 .size name, .-name
80#endif
81
John Reiser6b8be6d2008-01-30 13:33:13 +010082/* If symbol 'name' is treated as a subroutine (gets called, and returns)
83 * then please use ENDPROC to mark 'name' as STT_FUNC for the benefit of
84 * static analysis tools such as stack depth analyzer.
85 */
Jan Beulichab7efcc2006-03-24 03:16:17 -080086#ifndef ENDPROC
87#define ENDPROC(name) \
88 .type name, @function; \
89 END(name)
90#endif
Prasanna S Panchamukhid0aaff92005-09-06 15:19:26 -070091
Linus Torvalds1da177e2005-04-16 15:20:36 -070092#endif
93
94#define NORET_TYPE /**/
95#define ATTRIB_NORET __attribute__((noreturn))
96#define NORET_AND noreturn,
97
Linus Torvalds1da177e2005-04-16 15:20:36 -070098#endif