|
@@ -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...) \
|