aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-04-10 20:35:23 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-10 20:35:23 -0400
commitd10d89ec78114f925f63c5126a2b2490f501a462 (patch)
tree16b617325619c841ec1de6fe11b3f8f8f92fdd04 /include/asm-x86
parent598af051a79d05b751fe793f1fe09fcf74763e02 (diff)
Add commentary about the new "asmlinkage_protect()" macro
It's really a pretty ugly thing to need, and some day it will hopefully be obviated by teaching gcc about the magic calling conventions for the low-level system call code, but in the meantime we can at least add big honking comments about why we need these insane and strange macros. I took my comments from my version of the macro, but I ended up deciding to just pick Roland's version of the actual code instead (with his prettier syntax that uses vararg macros). Thus the previous two commits that actually implement it. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/asm-x86')
-rw-r--r--include/asm-x86/linkage.h11
1 files changed, 11 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...) \