diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-x86/linkage.h | 24 | ||||
-rw-r--r-- | include/linux/linkage.h | 4 |
2 files changed, 25 insertions, 3 deletions
diff --git a/include/asm-x86/linkage.h b/include/asm-x86/linkage.h index 31739c7d66a9..d605eeba0f70 100644 --- a/include/asm-x86/linkage.h +++ b/include/asm-x86/linkage.h | |||
@@ -8,12 +8,34 @@ | |||
8 | 8 | ||
9 | #ifdef CONFIG_X86_32 | 9 | #ifdef CONFIG_X86_32 |
10 | #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0))) | 10 | #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0))) |
11 | #define prevent_tail_call(ret) __asm__ ("" : "=r" (ret) : "0" (ret)) | ||
12 | /* | 11 | /* |
13 | * For 32-bit UML - mark functions implemented in assembly that use | 12 | * For 32-bit UML - mark functions implemented in assembly that use |
14 | * regparm input parameters: | 13 | * regparm input parameters: |
15 | */ | 14 | */ |
16 | #define asmregparm __attribute__((regparm(3))) | 15 | #define asmregparm __attribute__((regparm(3))) |
16 | |||
17 | #define asmlinkage_protect(n, ret, args...) \ | ||
18 | __asmlinkage_protect##n(ret, ##args) | ||
19 | #define __asmlinkage_protect_n(ret, args...) \ | ||
20 | __asm__ __volatile__ ("" : "=r" (ret) : "0" (ret), ##args) | ||
21 | #define __asmlinkage_protect0(ret) \ | ||
22 | __asmlinkage_protect_n(ret) | ||
23 | #define __asmlinkage_protect1(ret, arg1) \ | ||
24 | __asmlinkage_protect_n(ret, "g" (arg1)) | ||
25 | #define __asmlinkage_protect2(ret, arg1, arg2) \ | ||
26 | __asmlinkage_protect_n(ret, "g" (arg1), "g" (arg2)) | ||
27 | #define __asmlinkage_protect3(ret, arg1, arg2, arg3) \ | ||
28 | __asmlinkage_protect_n(ret, "g" (arg1), "g" (arg2), "g" (arg3)) | ||
29 | #define __asmlinkage_protect4(ret, arg1, arg2, arg3, arg4) \ | ||
30 | __asmlinkage_protect_n(ret, "g" (arg1), "g" (arg2), "g" (arg3), \ | ||
31 | "g" (arg4)) | ||
32 | #define __asmlinkage_protect5(ret, arg1, arg2, arg3, arg4, arg5) \ | ||
33 | __asmlinkage_protect_n(ret, "g" (arg1), "g" (arg2), "g" (arg3), \ | ||
34 | "g" (arg4), "g" (arg5)) | ||
35 | #define __asmlinkage_protect6(ret, arg1, arg2, arg3, arg4, arg5, arg6) \ | ||
36 | __asmlinkage_protect_n(ret, "g" (arg1), "g" (arg2), "g" (arg3), \ | ||
37 | "g" (arg4), "g" (arg5), "g" (arg6)) | ||
38 | |||
17 | #endif | 39 | #endif |
18 | 40 | ||
19 | #ifdef CONFIG_X86_ALIGNMENT_16 | 41 | #ifdef CONFIG_X86_ALIGNMENT_16 |
diff --git a/include/linux/linkage.h b/include/linux/linkage.h index 0592936344c4..fe2a39c489b6 100644 --- a/include/linux/linkage.h +++ b/include/linux/linkage.h | |||
@@ -17,8 +17,8 @@ | |||
17 | # define asmregparm | 17 | # define asmregparm |
18 | #endif | 18 | #endif |
19 | 19 | ||
20 | #ifndef prevent_tail_call | 20 | #ifndef asmlinkage_protect |
21 | # define prevent_tail_call(ret) do { } while (0) | 21 | # define asmlinkage_protect(n, ret, args...) do { } while (0) |
22 | #endif | 22 | #endif |
23 | 23 | ||
24 | #ifndef __ALIGN | 24 | #ifndef __ALIGN |