diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-05-20 00:05:58 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-05-21 16:28:34 -0400 |
commit | 243412be9cecfc7fddebb912a277b76119fd4ecd (patch) | |
tree | b74b7d87db67aed2a22acb7571a4349d3507f9b3 /arch/x86/um/shared | |
parent | c6802f4370510fa8674674f11c5578ee057d1d63 (diff) |
um/x86: merge (and trim) 32- and 64-bit variants of ptrace.h
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/x86/um/shared')
-rw-r--r-- | arch/x86/um/shared/sysdep/ptrace.h | 67 | ||||
-rw-r--r-- | arch/x86/um/shared/sysdep/ptrace_32.h | 92 | ||||
-rw-r--r-- | arch/x86/um/shared/sysdep/ptrace_64.h | 101 |
3 files changed, 74 insertions, 186 deletions
diff --git a/arch/x86/um/shared/sysdep/ptrace.h b/arch/x86/um/shared/sysdep/ptrace.h index 2bbe1ec2d96a..6ce2d76eb908 100644 --- a/arch/x86/um/shared/sysdep/ptrace.h +++ b/arch/x86/um/shared/sysdep/ptrace.h | |||
@@ -1,15 +1,74 @@ | |||
1 | #ifndef __SYSDEP_X86_PTRACE_H | 1 | #ifndef __SYSDEP_X86_PTRACE_H |
2 | #define __SYSDEP_X86_PTRACE_H | 2 | #define __SYSDEP_X86_PTRACE_H |
3 | 3 | ||
4 | #include <generated/user_constants.h> | ||
5 | #include "sysdep/faultinfo.h" | ||
6 | |||
7 | #define MAX_REG_OFFSET (UM_FRAME_SIZE) | ||
8 | #define MAX_REG_NR ((MAX_REG_OFFSET) / sizeof(unsigned long)) | ||
9 | |||
10 | #define REGS_IP(r) ((r)[HOST_IP]) | ||
11 | #define REGS_SP(r) ((r)[HOST_SP]) | ||
12 | #define REGS_EFLAGS(r) ((r)[HOST_EFLAGS]) | ||
13 | #define REGS_AX(r) ((r)[HOST_AX]) | ||
14 | #define REGS_BX(r) ((r)[HOST_BX]) | ||
15 | #define REGS_CX(r) ((r)[HOST_CX]) | ||
16 | #define REGS_DX(r) ((r)[HOST_DX]) | ||
17 | #define REGS_SI(r) ((r)[HOST_SI]) | ||
18 | #define REGS_DI(r) ((r)[HOST_DI]) | ||
19 | #define REGS_BP(r) ((r)[HOST_BP]) | ||
20 | #define REGS_CS(r) ((r)[HOST_CS]) | ||
21 | #define REGS_SS(r) ((r)[HOST_SS]) | ||
22 | #define REGS_DS(r) ((r)[HOST_DS]) | ||
23 | #define REGS_ES(r) ((r)[HOST_ES]) | ||
24 | |||
25 | #define UPT_IP(r) REGS_IP((r)->gp) | ||
26 | #define UPT_SP(r) REGS_SP((r)->gp) | ||
27 | #define UPT_EFLAGS(r) REGS_EFLAGS((r)->gp) | ||
28 | #define UPT_AX(r) REGS_AX((r)->gp) | ||
29 | #define UPT_BX(r) REGS_BX((r)->gp) | ||
30 | #define UPT_CX(r) REGS_CX((r)->gp) | ||
31 | #define UPT_DX(r) REGS_DX((r)->gp) | ||
32 | #define UPT_SI(r) REGS_SI((r)->gp) | ||
33 | #define UPT_DI(r) REGS_DI((r)->gp) | ||
34 | #define UPT_BP(r) REGS_BP((r)->gp) | ||
35 | #define UPT_CS(r) REGS_CS((r)->gp) | ||
36 | #define UPT_SS(r) REGS_SS((r)->gp) | ||
37 | #define UPT_DS(r) REGS_DS((r)->gp) | ||
38 | #define UPT_ES(r) REGS_ES((r)->gp) | ||
39 | |||
4 | #ifdef __i386__ | 40 | #ifdef __i386__ |
5 | #include "ptrace_32.h" | 41 | #include "ptrace_32.h" |
6 | #else | 42 | #else |
7 | #include "ptrace_64.h" | 43 | #include "ptrace_64.h" |
8 | #endif | 44 | #endif |
9 | 45 | ||
10 | static inline long regs_return_value(struct uml_pt_regs *regs) | 46 | struct syscall_args { |
11 | { | 47 | unsigned long args[6]; |
12 | return UPT_SYSCALL_RET(regs); | 48 | }; |
13 | } | 49 | |
50 | #define SYSCALL_ARGS(r) ((struct syscall_args) \ | ||
51 | { .args = { UPT_SYSCALL_ARG1(r), \ | ||
52 | UPT_SYSCALL_ARG2(r), \ | ||
53 | UPT_SYSCALL_ARG3(r), \ | ||
54 | UPT_SYSCALL_ARG4(r), \ | ||
55 | UPT_SYSCALL_ARG5(r), \ | ||
56 | UPT_SYSCALL_ARG6(r) } } ) | ||
57 | |||
58 | struct uml_pt_regs { | ||
59 | unsigned long gp[MAX_REG_NR]; | ||
60 | unsigned long fp[MAX_FP_NR]; | ||
61 | struct faultinfo faultinfo; | ||
62 | long syscall; | ||
63 | int is_user; | ||
64 | }; | ||
65 | |||
66 | #define EMPTY_UML_PT_REGS { } | ||
67 | |||
68 | #define UPT_SYSCALL_NR(r) ((r)->syscall) | ||
69 | #define UPT_FAULTINFO(r) (&(r)->faultinfo) | ||
70 | #define UPT_IS_USER(r) ((r)->is_user) | ||
71 | |||
72 | extern int user_context(unsigned long sp); | ||
14 | 73 | ||
15 | #endif /* __SYSDEP_X86_PTRACE_H */ | 74 | #endif /* __SYSDEP_X86_PTRACE_H */ |
diff --git a/arch/x86/um/shared/sysdep/ptrace_32.h b/arch/x86/um/shared/sysdep/ptrace_32.h index befd1df32ed0..b94a108de1dc 100644 --- a/arch/x86/um/shared/sysdep/ptrace_32.h +++ b/arch/x86/um/shared/sysdep/ptrace_32.h | |||
@@ -6,11 +6,7 @@ | |||
6 | #ifndef __SYSDEP_I386_PTRACE_H | 6 | #ifndef __SYSDEP_I386_PTRACE_H |
7 | #define __SYSDEP_I386_PTRACE_H | 7 | #define __SYSDEP_I386_PTRACE_H |
8 | 8 | ||
9 | #include <generated/user_constants.h> | 9 | #define MAX_FP_NR HOST_FPX_SIZE |
10 | #include "sysdep/faultinfo.h" | ||
11 | |||
12 | #define MAX_REG_NR (UM_FRAME_SIZE / sizeof(unsigned long)) | ||
13 | #define MAX_REG_OFFSET (UM_FRAME_SIZE) | ||
14 | 10 | ||
15 | static inline void update_debugregs(int seq) {} | 11 | static inline void update_debugregs(int seq) {} |
16 | 12 | ||
@@ -24,90 +20,16 @@ void set_using_sysemu(int value); | |||
24 | int get_using_sysemu(void); | 20 | int get_using_sysemu(void); |
25 | extern int sysemu_supported; | 21 | extern int sysemu_supported; |
26 | 22 | ||
27 | #define REGS_IP(r) ((r)[HOST_IP]) | ||
28 | #define REGS_SP(r) ((r)[HOST_SP]) | ||
29 | #define REGS_EFLAGS(r) ((r)[HOST_EFLAGS]) | ||
30 | #define REGS_EAX(r) ((r)[HOST_AX]) | ||
31 | #define REGS_EBX(r) ((r)[HOST_BX]) | ||
32 | #define REGS_ECX(r) ((r)[HOST_CX]) | ||
33 | #define REGS_EDX(r) ((r)[HOST_DX]) | ||
34 | #define REGS_ESI(r) ((r)[HOST_SI]) | ||
35 | #define REGS_EDI(r) ((r)[HOST_DI]) | ||
36 | #define REGS_EBP(r) ((r)[HOST_BP]) | ||
37 | #define REGS_CS(r) ((r)[HOST_CS]) | ||
38 | #define REGS_SS(r) ((r)[HOST_SS]) | ||
39 | #define REGS_DS(r) ((r)[HOST_DS]) | ||
40 | #define REGS_ES(r) ((r)[HOST_ES]) | ||
41 | #define REGS_FS(r) ((r)[HOST_FS]) | ||
42 | #define REGS_GS(r) ((r)[HOST_GS]) | ||
43 | |||
44 | #define REGS_SET_SYSCALL_RETURN(r, res) REGS_EAX(r) = (res) | ||
45 | |||
46 | #define IP_RESTART_SYSCALL(ip) ((ip) -= 2) | ||
47 | #define REGS_RESTART_SYSCALL(r) IP_RESTART_SYSCALL(REGS_IP(r)) | ||
48 | |||
49 | #ifndef PTRACE_SYSEMU_SINGLESTEP | 23 | #ifndef PTRACE_SYSEMU_SINGLESTEP |
50 | #define PTRACE_SYSEMU_SINGLESTEP 32 | 24 | #define PTRACE_SYSEMU_SINGLESTEP 32 |
51 | #endif | 25 | #endif |
52 | 26 | ||
53 | struct uml_pt_regs { | 27 | #define UPT_SYSCALL_ARG1(r) UPT_BX(r) |
54 | unsigned long gp[MAX_REG_NR]; | 28 | #define UPT_SYSCALL_ARG2(r) UPT_CX(r) |
55 | unsigned long fp[HOST_FPX_SIZE]; | 29 | #define UPT_SYSCALL_ARG3(r) UPT_DX(r) |
56 | struct faultinfo faultinfo; | 30 | #define UPT_SYSCALL_ARG4(r) UPT_SI(r) |
57 | long syscall; | 31 | #define UPT_SYSCALL_ARG5(r) UPT_DI(r) |
58 | int is_user; | 32 | #define UPT_SYSCALL_ARG6(r) UPT_BP(r) |
59 | }; | ||
60 | |||
61 | #define EMPTY_UML_PT_REGS { } | ||
62 | |||
63 | #define UPT_IP(r) REGS_IP((r)->gp) | ||
64 | #define UPT_SP(r) REGS_SP((r)->gp) | ||
65 | #define UPT_EFLAGS(r) REGS_EFLAGS((r)->gp) | ||
66 | #define UPT_EAX(r) REGS_EAX((r)->gp) | ||
67 | #define UPT_EBX(r) REGS_EBX((r)->gp) | ||
68 | #define UPT_ECX(r) REGS_ECX((r)->gp) | ||
69 | #define UPT_EDX(r) REGS_EDX((r)->gp) | ||
70 | #define UPT_ESI(r) REGS_ESI((r)->gp) | ||
71 | #define UPT_EDI(r) REGS_EDI((r)->gp) | ||
72 | #define UPT_EBP(r) REGS_EBP((r)->gp) | ||
73 | #define UPT_ORIG_EAX(r) ((r)->syscall) | ||
74 | #define UPT_CS(r) REGS_CS((r)->gp) | ||
75 | #define UPT_SS(r) REGS_SS((r)->gp) | ||
76 | #define UPT_DS(r) REGS_DS((r)->gp) | ||
77 | #define UPT_ES(r) REGS_ES((r)->gp) | ||
78 | #define UPT_FS(r) REGS_FS((r)->gp) | ||
79 | #define UPT_GS(r) REGS_GS((r)->gp) | ||
80 | |||
81 | #define UPT_SYSCALL_ARG1(r) UPT_EBX(r) | ||
82 | #define UPT_SYSCALL_ARG2(r) UPT_ECX(r) | ||
83 | #define UPT_SYSCALL_ARG3(r) UPT_EDX(r) | ||
84 | #define UPT_SYSCALL_ARG4(r) UPT_ESI(r) | ||
85 | #define UPT_SYSCALL_ARG5(r) UPT_EDI(r) | ||
86 | #define UPT_SYSCALL_ARG6(r) UPT_EBP(r) | ||
87 | |||
88 | extern int user_context(unsigned long sp); | ||
89 | |||
90 | #define UPT_IS_USER(r) ((r)->is_user) | ||
91 | |||
92 | struct syscall_args { | ||
93 | unsigned long args[6]; | ||
94 | }; | ||
95 | |||
96 | #define SYSCALL_ARGS(r) ((struct syscall_args) \ | ||
97 | { .args = { UPT_SYSCALL_ARG1(r), \ | ||
98 | UPT_SYSCALL_ARG2(r), \ | ||
99 | UPT_SYSCALL_ARG3(r), \ | ||
100 | UPT_SYSCALL_ARG4(r), \ | ||
101 | UPT_SYSCALL_ARG5(r), \ | ||
102 | UPT_SYSCALL_ARG6(r) } } ) | ||
103 | |||
104 | #define UPT_RESTART_SYSCALL(r) REGS_RESTART_SYSCALL((r)->gp) | ||
105 | |||
106 | #define UPT_ORIG_SYSCALL(r) UPT_EAX(r) | ||
107 | #define UPT_SYSCALL_NR(r) UPT_ORIG_EAX(r) | ||
108 | #define UPT_SYSCALL_RET(r) UPT_EAX(r) | ||
109 | |||
110 | #define UPT_FAULTINFO(r) (&(r)->faultinfo) | ||
111 | 33 | ||
112 | extern void arch_init_registers(int pid); | 34 | extern void arch_init_registers(int pid); |
113 | 35 | ||
diff --git a/arch/x86/um/shared/sysdep/ptrace_64.h b/arch/x86/um/shared/sysdep/ptrace_64.h index 031edc53ac57..919789f1071e 100644 --- a/arch/x86/um/shared/sysdep/ptrace_64.h +++ b/arch/x86/um/shared/sysdep/ptrace_64.h | |||
@@ -8,22 +8,8 @@ | |||
8 | #ifndef __SYSDEP_X86_64_PTRACE_H | 8 | #ifndef __SYSDEP_X86_64_PTRACE_H |
9 | #define __SYSDEP_X86_64_PTRACE_H | 9 | #define __SYSDEP_X86_64_PTRACE_H |
10 | 10 | ||
11 | #include <generated/user_constants.h> | 11 | #define MAX_FP_NR HOST_FP_SIZE |
12 | #include "sysdep/faultinfo.h" | ||
13 | 12 | ||
14 | #define MAX_REG_OFFSET (UM_FRAME_SIZE) | ||
15 | #define MAX_REG_NR ((MAX_REG_OFFSET) / sizeof(unsigned long)) | ||
16 | |||
17 | #define REGS_IP(r) ((r)[HOST_IP]) | ||
18 | #define REGS_SP(r) ((r)[HOST_SP]) | ||
19 | |||
20 | #define REGS_RBX(r) ((r)[HOST_BX]) | ||
21 | #define REGS_RCX(r) ((r)[HOST_CX]) | ||
22 | #define REGS_RDX(r) ((r)[HOST_DX]) | ||
23 | #define REGS_RSI(r) ((r)[HOST_SI]) | ||
24 | #define REGS_RDI(r) ((r)[HOST_DI]) | ||
25 | #define REGS_RBP(r) ((r)[HOST_BP]) | ||
26 | #define REGS_RAX(r) ((r)[HOST_AX]) | ||
27 | #define REGS_R8(r) ((r)[HOST_R8]) | 13 | #define REGS_R8(r) ((r)[HOST_R8]) |
28 | #define REGS_R9(r) ((r)[HOST_R9]) | 14 | #define REGS_R9(r) ((r)[HOST_R9]) |
29 | #define REGS_R10(r) ((r)[HOST_R10]) | 15 | #define REGS_R10(r) ((r)[HOST_R10]) |
@@ -32,9 +18,6 @@ | |||
32 | #define REGS_R13(r) ((r)[HOST_R13]) | 18 | #define REGS_R13(r) ((r)[HOST_R13]) |
33 | #define REGS_R14(r) ((r)[HOST_R14]) | 19 | #define REGS_R14(r) ((r)[HOST_R14]) |
34 | #define REGS_R15(r) ((r)[HOST_R15]) | 20 | #define REGS_R15(r) ((r)[HOST_R15]) |
35 | #define REGS_CS(r) ((r)[HOST_CS]) | ||
36 | #define REGS_EFLAGS(r) ((r)[HOST_EFLAGS]) | ||
37 | #define REGS_SS(r) ((r)[HOST_SS]) | ||
38 | 21 | ||
39 | #define HOST_FS_BASE 21 | 22 | #define HOST_FS_BASE 21 |
40 | #define HOST_GS_BASE 22 | 23 | #define HOST_GS_BASE 22 |
@@ -58,45 +41,6 @@ | |||
58 | #define GS (HOST_GS * sizeof(long)) | 41 | #define GS (HOST_GS * sizeof(long)) |
59 | #endif | 42 | #endif |
60 | 43 | ||
61 | #define REGS_FS_BASE(r) ((r)[HOST_FS_BASE]) | ||
62 | #define REGS_GS_BASE(r) ((r)[HOST_GS_BASE]) | ||
63 | #define REGS_DS(r) ((r)[HOST_DS]) | ||
64 | #define REGS_ES(r) ((r)[HOST_ES]) | ||
65 | #define REGS_FS(r) ((r)[HOST_FS]) | ||
66 | #define REGS_GS(r) ((r)[HOST_GS]) | ||
67 | |||
68 | #define REGS_ORIG_RAX(r) ((r)[HOST_ORIG_AX]) | ||
69 | |||
70 | #define REGS_SET_SYSCALL_RETURN(r, res) REGS_RAX(r) = (res) | ||
71 | |||
72 | #define IP_RESTART_SYSCALL(ip) ((ip) -= 2) | ||
73 | #define REGS_RESTART_SYSCALL(r) IP_RESTART_SYSCALL(REGS_IP(r)) | ||
74 | |||
75 | #define REGS_FAULT_ADDR(r) ((r)->fault_addr) | ||
76 | |||
77 | #define REGS_FAULT_WRITE(r) FAULT_WRITE((r)->fault_type) | ||
78 | |||
79 | #define REGS_TRAP(r) ((r)->trap_type) | ||
80 | |||
81 | #define REGS_ERR(r) ((r)->fault_type) | ||
82 | |||
83 | struct uml_pt_regs { | ||
84 | unsigned long gp[MAX_REG_NR]; | ||
85 | unsigned long fp[HOST_FP_SIZE]; | ||
86 | struct faultinfo faultinfo; | ||
87 | long syscall; | ||
88 | int is_user; | ||
89 | }; | ||
90 | |||
91 | #define EMPTY_UML_PT_REGS { } | ||
92 | |||
93 | #define UPT_RBX(r) REGS_RBX((r)->gp) | ||
94 | #define UPT_RCX(r) REGS_RCX((r)->gp) | ||
95 | #define UPT_RDX(r) REGS_RDX((r)->gp) | ||
96 | #define UPT_RSI(r) REGS_RSI((r)->gp) | ||
97 | #define UPT_RDI(r) REGS_RDI((r)->gp) | ||
98 | #define UPT_RBP(r) REGS_RBP((r)->gp) | ||
99 | #define UPT_RAX(r) REGS_RAX((r)->gp) | ||
100 | #define UPT_R8(r) REGS_R8((r)->gp) | 44 | #define UPT_R8(r) REGS_R8((r)->gp) |
101 | #define UPT_R9(r) REGS_R9((r)->gp) | 45 | #define UPT_R9(r) REGS_R9((r)->gp) |
102 | #define UPT_R10(r) REGS_R10((r)->gp) | 46 | #define UPT_R10(r) REGS_R10((r)->gp) |
@@ -105,51 +49,14 @@ struct uml_pt_regs { | |||
105 | #define UPT_R13(r) REGS_R13((r)->gp) | 49 | #define UPT_R13(r) REGS_R13((r)->gp) |
106 | #define UPT_R14(r) REGS_R14((r)->gp) | 50 | #define UPT_R14(r) REGS_R14((r)->gp) |
107 | #define UPT_R15(r) REGS_R15((r)->gp) | 51 | #define UPT_R15(r) REGS_R15((r)->gp) |
108 | #define UPT_CS(r) REGS_CS((r)->gp) | ||
109 | #define UPT_FS_BASE(r) REGS_FS_BASE((r)->gp) | ||
110 | #define UPT_FS(r) REGS_FS((r)->gp) | ||
111 | #define UPT_GS_BASE(r) REGS_GS_BASE((r)->gp) | ||
112 | #define UPT_GS(r) REGS_GS((r)->gp) | ||
113 | #define UPT_DS(r) REGS_DS((r)->gp) | ||
114 | #define UPT_ES(r) REGS_ES((r)->gp) | ||
115 | #define UPT_CS(r) REGS_CS((r)->gp) | ||
116 | #define UPT_SS(r) REGS_SS((r)->gp) | ||
117 | #define UPT_ORIG_RAX(r) REGS_ORIG_RAX((r)->gp) | ||
118 | |||
119 | #define UPT_IP(r) REGS_IP((r)->gp) | ||
120 | #define UPT_SP(r) REGS_SP((r)->gp) | ||
121 | |||
122 | #define UPT_EFLAGS(r) REGS_EFLAGS((r)->gp) | ||
123 | #define UPT_SYSCALL_NR(r) ((r)->syscall) | ||
124 | #define UPT_SYSCALL_RET(r) UPT_RAX(r) | ||
125 | |||
126 | extern int user_context(unsigned long sp); | ||
127 | 52 | ||
128 | #define UPT_IS_USER(r) ((r)->is_user) | 53 | #define UPT_SYSCALL_ARG1(r) UPT_DI(r) |
129 | 54 | #define UPT_SYSCALL_ARG2(r) UPT_SI(r) | |
130 | #define UPT_SYSCALL_ARG1(r) UPT_RDI(r) | 55 | #define UPT_SYSCALL_ARG3(r) UPT_DX(r) |
131 | #define UPT_SYSCALL_ARG2(r) UPT_RSI(r) | ||
132 | #define UPT_SYSCALL_ARG3(r) UPT_RDX(r) | ||
133 | #define UPT_SYSCALL_ARG4(r) UPT_R10(r) | 56 | #define UPT_SYSCALL_ARG4(r) UPT_R10(r) |
134 | #define UPT_SYSCALL_ARG5(r) UPT_R8(r) | 57 | #define UPT_SYSCALL_ARG5(r) UPT_R8(r) |
135 | #define UPT_SYSCALL_ARG6(r) UPT_R9(r) | 58 | #define UPT_SYSCALL_ARG6(r) UPT_R9(r) |
136 | 59 | ||
137 | struct syscall_args { | ||
138 | unsigned long args[6]; | ||
139 | }; | ||
140 | |||
141 | #define SYSCALL_ARGS(r) ((struct syscall_args) \ | ||
142 | { .args = { UPT_SYSCALL_ARG1(r), \ | ||
143 | UPT_SYSCALL_ARG2(r), \ | ||
144 | UPT_SYSCALL_ARG3(r), \ | ||
145 | UPT_SYSCALL_ARG4(r), \ | ||
146 | UPT_SYSCALL_ARG5(r), \ | ||
147 | UPT_SYSCALL_ARG6(r) } } ) | ||
148 | |||
149 | #define UPT_RESTART_SYSCALL(r) REGS_RESTART_SYSCALL((r)->gp) | ||
150 | |||
151 | #define UPT_FAULTINFO(r) (&(r)->faultinfo) | ||
152 | |||
153 | static inline void arch_init_registers(int pid) | 60 | static inline void arch_init_registers(int pid) |
154 | { | 61 | { |
155 | } | 62 | } |