Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 88238
b: refs/heads/master
c: d10d89e
h: refs/heads/master
v: v3
  • Loading branch information
Linus Torvalds committed Apr 11, 2008
1 parent d1e1b17 commit f0b0cf3
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 598af051a79d05b751fe793f1fe09fcf74763e02
refs/heads/master: d10d89ec78114f925f63c5126a2b2490f501a462
11 changes: 11 additions & 0 deletions trunk/include/asm-x86/linkage.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,17 @@
*/
#define asmregparm __attribute__((regparm(3)))

/*
* Make sure the compiler doesn't do anything stupid with the
* arguments on the stack - they are owned by the *caller*, not
* the callee. This just fools gcc into not spilling into them,
* and keeps it from doing tailcall recursion and/or using the
* stack slots for temporaries, since they are live and "used"
* all the way to the end of the function.
*
* NOTE! On x86-64, all the arguments are in registers, so this
* only matters on a 32-bit kernel.
*/
#define asmlinkage_protect(n, ret, args...) \
__asmlinkage_protect##n(ret, ##args)
#define __asmlinkage_protect_n(ret, args...) \
Expand Down
13 changes: 13 additions & 0 deletions trunk/include/linux/linkage.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,19 @@
# define asmregparm
#endif

/*
* This is used by architectures to keep arguments on the stack
* untouched by the compiler by keeping them live until the end.
* The argument stack may be owned by the assembly-language
* caller, not the callee, and gcc doesn't always understand
* that.
*
* We have the return value, and a maximum of six arguments.
*
* This should always be followed by a "return ret" for the
* protection to work (ie no more work that the compiler might
* end up needing stack temporaries for).
*/
#ifndef asmlinkage_protect
# define asmlinkage_protect(n, ret, args...) do { } while (0)
#endif
Expand Down

0 comments on commit f0b0cf3

Please sign in to comment.