aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/lib/getuser_32.S25
-rw-r--r--arch/x86/lib/getuser_64.S36
-rw-r--r--include/asm-x86/asm.h3
3 files changed, 34 insertions, 30 deletions
diff --git a/arch/x86/lib/getuser_32.S b/arch/x86/lib/getuser_32.S
index 8200fde55f57..2cc3ceee8f91 100644
--- a/arch/x86/lib/getuser_32.S
+++ b/arch/x86/lib/getuser_32.S
@@ -11,6 +11,7 @@
11#include <linux/linkage.h> 11#include <linux/linkage.h>
12#include <asm/dwarf2.h> 12#include <asm/dwarf2.h>
13#include <asm/thread_info.h> 13#include <asm/thread_info.h>
14#include <asm/asm.h>
14 15
15 16
16/* 17/*
@@ -28,10 +29,10 @@
28.text 29.text
29ENTRY(__get_user_1) 30ENTRY(__get_user_1)
30 CFI_STARTPROC 31 CFI_STARTPROC
31 GET_THREAD_INFO(%edx) 32 GET_THREAD_INFO(%_ASM_DX)
32 cmp TI_addr_limit(%edx),%eax 33 cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
33 jae bad_get_user 34 jae bad_get_user
341: movzb (%eax),%edx 351: movzb (%_ASM_AX),%edx
35 xor %eax,%eax 36 xor %eax,%eax
36 ret 37 ret
37 CFI_ENDPROC 38 CFI_ENDPROC
@@ -39,12 +40,12 @@ ENDPROC(__get_user_1)
39 40
40ENTRY(__get_user_2) 41ENTRY(__get_user_2)
41 CFI_STARTPROC 42 CFI_STARTPROC
42 add $1,%eax 43 add $1,%_ASM_AX
43 jc bad_get_user 44 jc bad_get_user
44 GET_THREAD_INFO(%edx) 45 GET_THREAD_INFO(%_ASM_DX)
45 cmp TI_addr_limit(%edx),%eax 46 cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
46 jae bad_get_user 47 jae bad_get_user
472: movzwl -1(%eax),%edx 482: movzwl -1(%_ASM_AX),%edx
48 xor %eax,%eax 49 xor %eax,%eax
49 ret 50 ret
50 CFI_ENDPROC 51 CFI_ENDPROC
@@ -52,12 +53,12 @@ ENDPROC(__get_user_2)
52 53
53ENTRY(__get_user_4) 54ENTRY(__get_user_4)
54 CFI_STARTPROC 55 CFI_STARTPROC
55 add $3,%eax 56 add $3,%_ASM_AX
56 jc bad_get_user 57 jc bad_get_user
57 GET_THREAD_INFO(%edx) 58 GET_THREAD_INFO(%_ASM_DX)
58 cmp TI_addr_limit(%edx),%eax 59 cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
59 jae bad_get_user 60 jae bad_get_user
603: mov -3(%eax),%edx 613: mov -3(%_ASM_AX),%edx
61 xor %eax,%eax 62 xor %eax,%eax
62 ret 63 ret
63 CFI_ENDPROC 64 CFI_ENDPROC
@@ -66,7 +67,7 @@ ENDPROC(__get_user_4)
66bad_get_user: 67bad_get_user:
67 CFI_STARTPROC 68 CFI_STARTPROC
68 xor %edx,%edx 69 xor %edx,%edx
69 mov $-14,%eax 70 mov $-14,%_ASM_AX
70 ret 71 ret
71 CFI_ENDPROC 72 CFI_ENDPROC
72END(bad_get_user) 73END(bad_get_user)
diff --git a/arch/x86/lib/getuser_64.S b/arch/x86/lib/getuser_64.S
index 6134752a75fd..63b0e5c1e582 100644
--- a/arch/x86/lib/getuser_64.S
+++ b/arch/x86/lib/getuser_64.S
@@ -13,14 +13,13 @@
13/* 13/*
14 * __get_user_X 14 * __get_user_X
15 * 15 *
16 * Inputs: %rcx contains the address. 16 * Inputs: %rax contains the address.
17 * The register is modified, but all changes are undone 17 * The register is modified, but all changes are undone
18 * before returning because the C code doesn't know about it. 18 * before returning because the C code doesn't know about it.
19 * 19 *
20 * Outputs: %rax is error code (0 or -EFAULT) 20 * Outputs: %rax is error code (0 or -EFAULT)
21 * %rdx contains zero-extended value 21 * %rdx contains zero-extended value
22 * 22 *
23 * %r8 is destroyed.
24 * 23 *
25 * These functions should not modify any other registers, 24 * These functions should not modify any other registers,
26 * as they get called from within inline assembly. 25 * as they get called from within inline assembly.
@@ -32,14 +31,15 @@
32#include <asm/errno.h> 31#include <asm/errno.h>
33#include <asm/asm-offsets.h> 32#include <asm/asm-offsets.h>
34#include <asm/thread_info.h> 33#include <asm/thread_info.h>
34#include <asm/asm.h>
35 35
36 .text 36 .text
37ENTRY(__get_user_1) 37ENTRY(__get_user_1)
38 CFI_STARTPROC 38 CFI_STARTPROC
39 GET_THREAD_INFO(%rdx) 39 GET_THREAD_INFO(%_ASM_DX)
40 cmp TI_addr_limit(%rdx),%rax 40 cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
41 jae bad_get_user 41 jae bad_get_user
421: movzb (%rax),%edx 421: movzb (%_ASM_AX),%edx
43 xor %eax,%eax 43 xor %eax,%eax
44 ret 44 ret
45 CFI_ENDPROC 45 CFI_ENDPROC
@@ -47,12 +47,12 @@ ENDPROC(__get_user_1)
47 47
48ENTRY(__get_user_2) 48ENTRY(__get_user_2)
49 CFI_STARTPROC 49 CFI_STARTPROC
50 add $1,%rax 50 add $1,%_ASM_AX
51 jc bad_get_user 51 jc bad_get_user
52 GET_THREAD_INFO(%rdx) 52 GET_THREAD_INFO(%_ASM_DX)
53 cmp TI_addr_limit(%rdx),%rax 53 cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
54 jae bad_get_user 54 jae bad_get_user
552: movzwl -1(%rax),%edx 552: movzwl -1(%_ASM_AX),%edx
56 xor %eax,%eax 56 xor %eax,%eax
57 ret 57 ret
58 CFI_ENDPROC 58 CFI_ENDPROC
@@ -60,12 +60,12 @@ ENDPROC(__get_user_2)
60 60
61ENTRY(__get_user_4) 61ENTRY(__get_user_4)
62 CFI_STARTPROC 62 CFI_STARTPROC
63 add $3,%rax 63 add $3,%_ASM_AX
64 jc bad_get_user 64 jc bad_get_user
65 GET_THREAD_INFO(%rdx) 65 GET_THREAD_INFO(%_ASM_DX)
66 cmp TI_addr_limit(%rdx),%rax 66 cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
67 jae bad_get_user 67 jae bad_get_user
683: mov -3(%rax),%edx 683: mov -3(%_ASM_AX),%edx
69 xor %eax,%eax 69 xor %eax,%eax
70 ret 70 ret
71 CFI_ENDPROC 71 CFI_ENDPROC
@@ -73,12 +73,12 @@ ENDPROC(__get_user_4)
73 73
74ENTRY(__get_user_8) 74ENTRY(__get_user_8)
75 CFI_STARTPROC 75 CFI_STARTPROC
76 add $7,%rax 76 add $7,%_ASM_AX
77 jc bad_get_user 77 jc bad_get_user
78 GET_THREAD_INFO(%rdx) 78 GET_THREAD_INFO(%_ASM_DX)
79 cmp TI_addr_limit(%rdx),%rax 79 cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
80 jae bad_get_user 80 jae bad_get_user
814: movq -7(%rax),%rdx 814: movq -7(%_ASM_AX),%_ASM_DX
82 xor %eax,%eax 82 xor %eax,%eax
83 ret 83 ret
84 CFI_ENDPROC 84 CFI_ENDPROC
@@ -87,7 +87,7 @@ ENDPROC(__get_user_8)
87bad_get_user: 87bad_get_user:
88 CFI_STARTPROC 88 CFI_STARTPROC
89 xor %edx,%edx 89 xor %edx,%edx
90 mov $(-EFAULT),%rax 90 mov $(-EFAULT),%_ASM_AX
91 ret 91 ret
92 CFI_ENDPROC 92 CFI_ENDPROC
93END(bad_get_user) 93END(bad_get_user)
diff --git a/include/asm-x86/asm.h b/include/asm-x86/asm.h
index 70939820c55f..435402e623e1 100644
--- a/include/asm-x86/asm.h
+++ b/include/asm-x86/asm.h
@@ -14,6 +14,7 @@
14#endif 14#endif
15 15
16#define __ASM_SIZE(inst) __ASM_SEL(inst##l, inst##q) 16#define __ASM_SIZE(inst) __ASM_SEL(inst##l, inst##q)
17#define __ASM_REG(reg) __ASM_SEL(e##reg, r##reg)
17 18
18#define _ASM_PTR __ASM_SEL(.long, .quad) 19#define _ASM_PTR __ASM_SEL(.long, .quad)
19#define _ASM_ALIGN __ASM_SEL(.balign 4, .balign 8) 20#define _ASM_ALIGN __ASM_SEL(.balign 4, .balign 8)
@@ -24,6 +25,8 @@
24#define _ASM_ADD __ASM_SIZE(add) 25#define _ASM_ADD __ASM_SIZE(add)
25#define _ASM_SUB __ASM_SIZE(sub) 26#define _ASM_SUB __ASM_SIZE(sub)
26#define _ASM_XADD __ASM_SIZE(xadd) 27#define _ASM_XADD __ASM_SIZE(xadd)
28#define _ASM_AX __ASM_REG(ax)
29#define _ASM_DX __ASM_REG(dx)
27 30
28/* Exception table entry */ 31/* Exception table entry */
29# define _ASM_EXTABLE(from,to) \ 32# define _ASM_EXTABLE(from,to) \