aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/asm-x86/linkage.h11
-rw-r--r--include/linux/linkage.h13
2 files changed, 24 insertions, 0 deletions
diff --git a/include/asm-x86/linkage.h b/include/asm-x86/linkage.h
index d605eeba0f70..c048353f4b85 100644
--- a/include/asm-x86/linkage.h
+++ b/include/asm-x86/linkage.h
@@ -14,6 +14,17 @@
14 */ 14 */
15#define asmregparm __attribute__((regparm(3))) 15#define asmregparm __attribute__((regparm(3)))
16 16
17/*
18 * Make sure the compiler doesn't do anything stupid with the
19 * arguments on the stack - they are owned by the *caller*, not
20 * the callee. This just fools gcc into not spilling into them,
21 * and keeps it from doing tailcall recursion and/or using the
22 * stack slots for temporaries, since they are live and "used"
23 * all the way to the end of the function.
24 *
25 * NOTE! On x86-64, all the arguments are in registers, so this
26 * only matters on a 32-bit kernel.
27 */
17#define asmlinkage_protect(n, ret, args...) \ 28#define asmlinkage_protect(n, ret, args...) \
18 __asmlinkage_protect##n(ret, ##args) 29 __asmlinkage_protect##n(ret, ##args)
19#define __asmlinkage_protect_n(ret, args...) \ 30#define __asmlinkage_protect_n(ret, args...) \
diff --git a/include/linux/linkage.h b/include/linux/linkage.h
index fe2a39c489b6..b163c5c40dbc 100644
--- a/include/linux/linkage.h
+++ b/include/linux/linkage.h
@@ -17,6 +17,19 @@
17# define asmregparm 17# define asmregparm
18#endif 18#endif
19 19
20/*
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 */
20#ifndef asmlinkage_protect 33#ifndef asmlinkage_protect
21# define asmlinkage_protect(n, ret, args...) do { } while (0) 34# define asmlinkage_protect(n, ret, args...) do { } while (0)
22#endif 35#endif