Commit 243412be9cecfc7fddebb912a277b76119fd4ecd
1 parent
c6802f4370
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
um/x86: merge (and trim) 32- and 64-bit variants of ptrace.h
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Showing 13 changed files with 150 additions and 279 deletions Side-by-side Diff
- arch/um/kernel/process.c
- arch/um/kernel/skas/syscall.c
- arch/x86/um/asm/elf.h
- arch/x86/um/asm/ptrace.h
- arch/x86/um/asm/ptrace_32.h
- arch/x86/um/asm/ptrace_64.h
- arch/x86/um/shared/sysdep/ptrace.h
- arch/x86/um/shared/sysdep/ptrace_32.h
- arch/x86/um/shared/sysdep/ptrace_64.h
- arch/x86/um/signal.c
- arch/x86/um/sysrq_32.c
- arch/x86/um/sysrq_64.c
- arch/x86/um/tls_32.c
arch/um/kernel/process.c
... | ... | @@ -196,7 +196,7 @@ |
196 | 196 | if (current->thread.forking) { |
197 | 197 | memcpy(&p->thread.regs.regs, ®s->regs, |
198 | 198 | sizeof(p->thread.regs.regs)); |
199 | - REGS_SET_SYSCALL_RETURN(p->thread.regs.regs.gp, 0); | |
199 | + UPT_SET_SYSCALL_RETURN(&p->thread.regs.regs, 0); | |
200 | 200 | if (sp != 0) |
201 | 201 | REGS_SP(p->thread.regs.regs.gp) = sp; |
202 | 202 |
arch/um/kernel/skas/syscall.c
arch/x86/um/asm/elf.h
... | ... | @@ -34,25 +34,25 @@ |
34 | 34 | #define ELF_ARCH EM_386 |
35 | 35 | |
36 | 36 | #define ELF_PLAT_INIT(regs, load_addr) do { \ |
37 | - PT_REGS_EBX(regs) = 0; \ | |
38 | - PT_REGS_ECX(regs) = 0; \ | |
39 | - PT_REGS_EDX(regs) = 0; \ | |
40 | - PT_REGS_ESI(regs) = 0; \ | |
41 | - PT_REGS_EDI(regs) = 0; \ | |
42 | - PT_REGS_EBP(regs) = 0; \ | |
43 | - PT_REGS_EAX(regs) = 0; \ | |
37 | + PT_REGS_BX(regs) = 0; \ | |
38 | + PT_REGS_CX(regs) = 0; \ | |
39 | + PT_REGS_DX(regs) = 0; \ | |
40 | + PT_REGS_SI(regs) = 0; \ | |
41 | + PT_REGS_DI(regs) = 0; \ | |
42 | + PT_REGS_BP(regs) = 0; \ | |
43 | + PT_REGS_AX(regs) = 0; \ | |
44 | 44 | } while (0) |
45 | 45 | |
46 | 46 | /* Shamelessly stolen from include/asm-i386/elf.h */ |
47 | 47 | |
48 | 48 | #define ELF_CORE_COPY_REGS(pr_reg, regs) do { \ |
49 | - pr_reg[0] = PT_REGS_EBX(regs); \ | |
50 | - pr_reg[1] = PT_REGS_ECX(regs); \ | |
51 | - pr_reg[2] = PT_REGS_EDX(regs); \ | |
52 | - pr_reg[3] = PT_REGS_ESI(regs); \ | |
53 | - pr_reg[4] = PT_REGS_EDI(regs); \ | |
54 | - pr_reg[5] = PT_REGS_EBP(regs); \ | |
55 | - pr_reg[6] = PT_REGS_EAX(regs); \ | |
49 | + pr_reg[0] = PT_REGS_BX(regs); \ | |
50 | + pr_reg[1] = PT_REGS_CX(regs); \ | |
51 | + pr_reg[2] = PT_REGS_DX(regs); \ | |
52 | + pr_reg[3] = PT_REGS_SI(regs); \ | |
53 | + pr_reg[4] = PT_REGS_DI(regs); \ | |
54 | + pr_reg[5] = PT_REGS_BP(regs); \ | |
55 | + pr_reg[6] = PT_REGS_AX(regs); \ | |
56 | 56 | pr_reg[7] = PT_REGS_DS(regs); \ |
57 | 57 | pr_reg[8] = PT_REGS_ES(regs); \ |
58 | 58 | /* fake once used fs and gs selectors? */ \ |
... | ... | @@ -130,13 +130,13 @@ |
130 | 130 | #define ELF_ARCH EM_X86_64 |
131 | 131 | |
132 | 132 | #define ELF_PLAT_INIT(regs, load_addr) do { \ |
133 | - PT_REGS_RBX(regs) = 0; \ | |
134 | - PT_REGS_RCX(regs) = 0; \ | |
135 | - PT_REGS_RDX(regs) = 0; \ | |
136 | - PT_REGS_RSI(regs) = 0; \ | |
137 | - PT_REGS_RDI(regs) = 0; \ | |
138 | - PT_REGS_RBP(regs) = 0; \ | |
139 | - PT_REGS_RAX(regs) = 0; \ | |
133 | + PT_REGS_BX(regs) = 0; \ | |
134 | + PT_REGS_CX(regs) = 0; \ | |
135 | + PT_REGS_DX(regs) = 0; \ | |
136 | + PT_REGS_SI(regs) = 0; \ | |
137 | + PT_REGS_DI(regs) = 0; \ | |
138 | + PT_REGS_BP(regs) = 0; \ | |
139 | + PT_REGS_AX(regs) = 0; \ | |
140 | 140 | PT_REGS_R8(regs) = 0; \ |
141 | 141 | PT_REGS_R9(regs) = 0; \ |
142 | 142 | PT_REGS_R10(regs) = 0; \ |
arch/x86/um/asm/ptrace.h
1 | +#ifndef __UM_X86_PTRACE_H | |
2 | +#define __UM_X86_PTRACE_H | |
3 | + | |
1 | 4 | #ifdef CONFIG_X86_32 |
2 | 5 | # include "ptrace_32.h" |
3 | 6 | #else |
4 | 7 | # include "ptrace_64.h" |
5 | 8 | #endif |
9 | + | |
10 | +#define PT_REGS_AX(r) UPT_AX(&(r)->regs) | |
11 | +#define PT_REGS_BX(r) UPT_BX(&(r)->regs) | |
12 | +#define PT_REGS_CX(r) UPT_CX(&(r)->regs) | |
13 | +#define PT_REGS_DX(r) UPT_DX(&(r)->regs) | |
14 | + | |
15 | +#define PT_REGS_SI(r) UPT_SI(&(r)->regs) | |
16 | +#define PT_REGS_DI(r) UPT_DI(&(r)->regs) | |
17 | +#define PT_REGS_BP(r) UPT_BP(&(r)->regs) | |
18 | +#define PT_REGS_EFLAGS(r) UPT_EFLAGS(&(r)->regs) | |
19 | + | |
20 | +#define PT_REGS_CS(r) UPT_CS(&(r)->regs) | |
21 | +#define PT_REGS_SS(r) UPT_SS(&(r)->regs) | |
22 | +#define PT_REGS_DS(r) UPT_DS(&(r)->regs) | |
23 | +#define PT_REGS_ES(r) UPT_ES(&(r)->regs) | |
24 | + | |
25 | +#define PT_REGS_ORIG_SYSCALL(r) PT_REGS_AX(r) | |
26 | +#define PT_REGS_SYSCALL_RET(r) PT_REGS_AX(r) | |
27 | + | |
28 | +#define PT_FIX_EXEC_STACK(sp) do ; while(0) | |
29 | + | |
30 | +#define profile_pc(regs) PT_REGS_IP(regs) | |
31 | + | |
32 | +#define UPT_RESTART_SYSCALL(r) (UPT_IP(r) -= 2) | |
33 | +#define UPT_SET_SYSCALL_RETURN(r, res) (UPT_AX(r) = (res)) | |
34 | + | |
35 | +static inline long regs_return_value(struct uml_pt_regs *regs) | |
36 | +{ | |
37 | + return UPT_AX(regs); | |
38 | +} | |
39 | +#endif /* __UM_X86_PTRACE_H */ |
arch/x86/um/asm/ptrace_32.h
... | ... | @@ -11,29 +11,6 @@ |
11 | 11 | #include "linux/compiler.h" |
12 | 12 | #include "asm/ptrace-generic.h" |
13 | 13 | |
14 | -#define PT_REGS_EAX(r) UPT_EAX(&(r)->regs) | |
15 | -#define PT_REGS_EBX(r) UPT_EBX(&(r)->regs) | |
16 | -#define PT_REGS_ECX(r) UPT_ECX(&(r)->regs) | |
17 | -#define PT_REGS_EDX(r) UPT_EDX(&(r)->regs) | |
18 | -#define PT_REGS_ESI(r) UPT_ESI(&(r)->regs) | |
19 | -#define PT_REGS_EDI(r) UPT_EDI(&(r)->regs) | |
20 | -#define PT_REGS_EBP(r) UPT_EBP(&(r)->regs) | |
21 | - | |
22 | -#define PT_REGS_CS(r) UPT_CS(&(r)->regs) | |
23 | -#define PT_REGS_SS(r) UPT_SS(&(r)->regs) | |
24 | -#define PT_REGS_DS(r) UPT_DS(&(r)->regs) | |
25 | -#define PT_REGS_ES(r) UPT_ES(&(r)->regs) | |
26 | -#define PT_REGS_FS(r) UPT_FS(&(r)->regs) | |
27 | -#define PT_REGS_GS(r) UPT_GS(&(r)->regs) | |
28 | - | |
29 | -#define PT_REGS_EFLAGS(r) UPT_EFLAGS(&(r)->regs) | |
30 | - | |
31 | -#define PT_REGS_ORIG_SYSCALL(r) PT_REGS_EAX(r) | |
32 | -#define PT_REGS_SYSCALL_RET(r) PT_REGS_EAX(r) | |
33 | -#define PT_FIX_EXEC_STACK(sp) do ; while(0) | |
34 | - | |
35 | -#define profile_pc(regs) PT_REGS_IP(regs) | |
36 | - | |
37 | 14 | #define user_mode(r) UPT_IS_USER(&(r)->regs) |
38 | 15 | |
39 | 16 | /* |
arch/x86/um/asm/ptrace_64.h
... | ... | @@ -15,13 +15,6 @@ |
15 | 15 | |
16 | 16 | #define HOST_AUDIT_ARCH AUDIT_ARCH_X86_64 |
17 | 17 | |
18 | -#define PT_REGS_RBX(r) UPT_RBX(&(r)->regs) | |
19 | -#define PT_REGS_RCX(r) UPT_RCX(&(r)->regs) | |
20 | -#define PT_REGS_RDX(r) UPT_RDX(&(r)->regs) | |
21 | -#define PT_REGS_RSI(r) UPT_RSI(&(r)->regs) | |
22 | -#define PT_REGS_RDI(r) UPT_RDI(&(r)->regs) | |
23 | -#define PT_REGS_RBP(r) UPT_RBP(&(r)->regs) | |
24 | -#define PT_REGS_RAX(r) UPT_RAX(&(r)->regs) | |
25 | 18 | #define PT_REGS_R8(r) UPT_R8(&(r)->regs) |
26 | 19 | #define PT_REGS_R9(r) UPT_R9(&(r)->regs) |
27 | 20 | #define PT_REGS_R10(r) UPT_R10(&(r)->regs) |
28 | 21 | |
... | ... | @@ -31,27 +24,8 @@ |
31 | 24 | #define PT_REGS_R14(r) UPT_R14(&(r)->regs) |
32 | 25 | #define PT_REGS_R15(r) UPT_R15(&(r)->regs) |
33 | 26 | |
34 | -#define PT_REGS_FS(r) UPT_FS(&(r)->regs) | |
35 | -#define PT_REGS_GS(r) UPT_GS(&(r)->regs) | |
36 | -#define PT_REGS_DS(r) UPT_DS(&(r)->regs) | |
37 | -#define PT_REGS_ES(r) UPT_ES(&(r)->regs) | |
38 | -#define PT_REGS_SS(r) UPT_SS(&(r)->regs) | |
39 | -#define PT_REGS_CS(r) UPT_CS(&(r)->regs) | |
40 | - | |
41 | -#define PT_REGS_ORIG_RAX(r) UPT_ORIG_RAX(&(r)->regs) | |
42 | -#define PT_REGS_RIP(r) UPT_IP(&(r)->regs) | |
43 | -#define PT_REGS_SP(r) UPT_SP(&(r)->regs) | |
44 | - | |
45 | -#define PT_REGS_EFLAGS(r) UPT_EFLAGS(&(r)->regs) | |
46 | - | |
47 | 27 | /* XXX */ |
48 | 28 | #define user_mode(r) UPT_IS_USER(&(r)->regs) |
49 | -#define PT_REGS_ORIG_SYSCALL(r) PT_REGS_RAX(r) | |
50 | -#define PT_REGS_SYSCALL_RET(r) PT_REGS_RAX(r) | |
51 | - | |
52 | -#define PT_FIX_EXEC_STACK(sp) do ; while(0) | |
53 | - | |
54 | -#define profile_pc(regs) PT_REGS_IP(regs) | |
55 | 29 | |
56 | 30 | struct user_desc; |
57 | 31 |
arch/x86/um/shared/sysdep/ptrace.h
1 | 1 | #ifndef __SYSDEP_X86_PTRACE_H |
2 | 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 | 40 | #ifdef __i386__ |
5 | 41 | #include "ptrace_32.h" |
6 | 42 | #else |
7 | 43 | #include "ptrace_64.h" |
8 | 44 | #endif |
9 | 45 | |
10 | -static inline long regs_return_value(struct uml_pt_regs *regs) | |
11 | -{ | |
12 | - return UPT_SYSCALL_RET(regs); | |
13 | -} | |
46 | +struct syscall_args { | |
47 | + unsigned long args[6]; | |
48 | +}; | |
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 | 74 | #endif /* __SYSDEP_X86_PTRACE_H */ |
arch/x86/um/shared/sysdep/ptrace_32.h
... | ... | @@ -6,12 +6,8 @@ |
6 | 6 | #ifndef __SYSDEP_I386_PTRACE_H |
7 | 7 | #define __SYSDEP_I386_PTRACE_H |
8 | 8 | |
9 | -#include <generated/user_constants.h> | |
10 | -#include "sysdep/faultinfo.h" | |
9 | +#define MAX_FP_NR HOST_FPX_SIZE | |
11 | 10 | |
12 | -#define MAX_REG_NR (UM_FRAME_SIZE / sizeof(unsigned long)) | |
13 | -#define MAX_REG_OFFSET (UM_FRAME_SIZE) | |
14 | - | |
15 | 11 | static inline void update_debugregs(int seq) {} |
16 | 12 | |
17 | 13 | /* syscall emulation path in ptrace */ |
18 | 14 | |
... | ... | @@ -24,90 +20,16 @@ |
24 | 20 | int get_using_sysemu(void); |
25 | 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 | 23 | #ifndef PTRACE_SYSEMU_SINGLESTEP |
50 | 24 | #define PTRACE_SYSEMU_SINGLESTEP 32 |
51 | 25 | #endif |
52 | 26 | |
53 | -struct uml_pt_regs { | |
54 | - unsigned long gp[MAX_REG_NR]; | |
55 | - unsigned long fp[HOST_FPX_SIZE]; | |
56 | - struct faultinfo faultinfo; | |
57 | - long syscall; | |
58 | - int is_user; | |
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) | |
27 | +#define UPT_SYSCALL_ARG1(r) UPT_BX(r) | |
28 | +#define UPT_SYSCALL_ARG2(r) UPT_CX(r) | |
29 | +#define UPT_SYSCALL_ARG3(r) UPT_DX(r) | |
30 | +#define UPT_SYSCALL_ARG4(r) UPT_SI(r) | |
31 | +#define UPT_SYSCALL_ARG5(r) UPT_DI(r) | |
32 | +#define UPT_SYSCALL_ARG6(r) UPT_BP(r) | |
111 | 33 | |
112 | 34 | extern void arch_init_registers(int pid); |
113 | 35 |
arch/x86/um/shared/sysdep/ptrace_64.h
... | ... | @@ -8,22 +8,8 @@ |
8 | 8 | #ifndef __SYSDEP_X86_64_PTRACE_H |
9 | 9 | #define __SYSDEP_X86_64_PTRACE_H |
10 | 10 | |
11 | -#include <generated/user_constants.h> | |
12 | -#include "sysdep/faultinfo.h" | |
11 | +#define MAX_FP_NR HOST_FP_SIZE | |
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 | 13 | #define REGS_R8(r) ((r)[HOST_R8]) |
28 | 14 | #define REGS_R9(r) ((r)[HOST_R9]) |
29 | 15 | #define REGS_R10(r) ((r)[HOST_R10]) |
... | ... | @@ -32,9 +18,6 @@ |
32 | 18 | #define REGS_R13(r) ((r)[HOST_R13]) |
33 | 19 | #define REGS_R14(r) ((r)[HOST_R14]) |
34 | 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 | 22 | #define HOST_FS_BASE 21 |
40 | 23 | #define HOST_GS_BASE 22 |
... | ... | @@ -58,45 +41,6 @@ |
58 | 41 | #define GS (HOST_GS * sizeof(long)) |
59 | 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 | 44 | #define UPT_R8(r) REGS_R8((r)->gp) |
101 | 45 | #define UPT_R9(r) REGS_R9((r)->gp) |
102 | 46 | #define UPT_R10(r) REGS_R10((r)->gp) |
103 | 47 | |
104 | 48 | |
... | ... | @@ -105,50 +49,13 @@ |
105 | 49 | #define UPT_R13(r) REGS_R13((r)->gp) |
106 | 50 | #define UPT_R14(r) REGS_R14((r)->gp) |
107 | 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 | 52 | |
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 | - | |
128 | -#define UPT_IS_USER(r) ((r)->is_user) | |
129 | - | |
130 | -#define UPT_SYSCALL_ARG1(r) UPT_RDI(r) | |
131 | -#define UPT_SYSCALL_ARG2(r) UPT_RSI(r) | |
132 | -#define UPT_SYSCALL_ARG3(r) UPT_RDX(r) | |
53 | +#define UPT_SYSCALL_ARG1(r) UPT_DI(r) | |
54 | +#define UPT_SYSCALL_ARG2(r) UPT_SI(r) | |
55 | +#define UPT_SYSCALL_ARG3(r) UPT_DX(r) | |
133 | 56 | #define UPT_SYSCALL_ARG4(r) UPT_R10(r) |
134 | 57 | #define UPT_SYSCALL_ARG5(r) UPT_R8(r) |
135 | 58 | #define UPT_SYSCALL_ARG6(r) UPT_R9(r) |
136 | - | |
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 | 59 | |
153 | 60 | static inline void arch_init_registers(int pid) |
154 | 61 | { |
arch/x86/um/signal.c
... | ... | @@ -413,9 +413,9 @@ |
413 | 413 | |
414 | 414 | PT_REGS_SP(regs) = (unsigned long) frame; |
415 | 415 | PT_REGS_IP(regs) = (unsigned long) ka->sa.sa_handler; |
416 | - PT_REGS_EAX(regs) = (unsigned long) sig; | |
417 | - PT_REGS_EDX(regs) = (unsigned long) 0; | |
418 | - PT_REGS_ECX(regs) = (unsigned long) 0; | |
416 | + PT_REGS_AX(regs) = (unsigned long) sig; | |
417 | + PT_REGS_DX(regs) = (unsigned long) 0; | |
418 | + PT_REGS_CX(regs) = (unsigned long) 0; | |
419 | 419 | |
420 | 420 | if ((current->ptrace & PT_DTRACE) && (current->ptrace & PT_PTRACED)) |
421 | 421 | ptrace_notify(SIGTRAP); |
... | ... | @@ -463,9 +463,9 @@ |
463 | 463 | |
464 | 464 | PT_REGS_SP(regs) = (unsigned long) frame; |
465 | 465 | PT_REGS_IP(regs) = (unsigned long) ka->sa.sa_handler; |
466 | - PT_REGS_EAX(regs) = (unsigned long) sig; | |
467 | - PT_REGS_EDX(regs) = (unsigned long) &frame->info; | |
468 | - PT_REGS_ECX(regs) = (unsigned long) &frame->uc; | |
466 | + PT_REGS_AX(regs) = (unsigned long) sig; | |
467 | + PT_REGS_DX(regs) = (unsigned long) &frame->info; | |
468 | + PT_REGS_CX(regs) = (unsigned long) &frame->uc; | |
469 | 469 | |
470 | 470 | if ((current->ptrace & PT_DTRACE) && (current->ptrace & PT_PTRACED)) |
471 | 471 | ptrace_notify(SIGTRAP); |
472 | 472 | |
473 | 473 | |
... | ... | @@ -573,17 +573,17 @@ |
573 | 573 | } |
574 | 574 | |
575 | 575 | PT_REGS_SP(regs) = (unsigned long) frame; |
576 | - PT_REGS_RDI(regs) = sig; | |
576 | + PT_REGS_DI(regs) = sig; | |
577 | 577 | /* In case the signal handler was declared without prototypes */ |
578 | - PT_REGS_RAX(regs) = 0; | |
578 | + PT_REGS_AX(regs) = 0; | |
579 | 579 | |
580 | 580 | /* |
581 | 581 | * This also works for non SA_SIGINFO handlers because they expect the |
582 | 582 | * next argument after the signal number on the stack. |
583 | 583 | */ |
584 | - PT_REGS_RSI(regs) = (unsigned long) &frame->info; | |
585 | - PT_REGS_RDX(regs) = (unsigned long) &frame->uc; | |
586 | - PT_REGS_RIP(regs) = (unsigned long) ka->sa.sa_handler; | |
584 | + PT_REGS_SI(regs) = (unsigned long) &frame->info; | |
585 | + PT_REGS_DX(regs) = (unsigned long) &frame->uc; | |
586 | + PT_REGS_IP(regs) = (unsigned long) ka->sa.sa_handler; | |
587 | 587 | out: |
588 | 588 | return err; |
589 | 589 | } |
arch/x86/um/sysrq_32.c
... | ... | @@ -23,12 +23,10 @@ |
23 | 23 | printk(" EFLAGS: %08lx\n %s\n", PT_REGS_EFLAGS(regs), |
24 | 24 | print_tainted()); |
25 | 25 | printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n", |
26 | - PT_REGS_EAX(regs), PT_REGS_EBX(regs), | |
27 | - PT_REGS_ECX(regs), | |
28 | - PT_REGS_EDX(regs)); | |
26 | + PT_REGS_AX(regs), PT_REGS_BX(regs), | |
27 | + PT_REGS_CX(regs), PT_REGS_DX(regs)); | |
29 | 28 | printk("ESI: %08lx EDI: %08lx EBP: %08lx", |
30 | - PT_REGS_ESI(regs), PT_REGS_EDI(regs), | |
31 | - PT_REGS_EBP(regs)); | |
29 | + PT_REGS_SI(regs), PT_REGS_DI(regs), PT_REGS_BP(regs)); | |
32 | 30 | printk(" DS: %04lx ES: %04lx\n", |
33 | 31 | 0xffff & PT_REGS_DS(regs), |
34 | 32 | 0xffff & PT_REGS_ES(regs)); |
arch/x86/um/sysrq_64.c
... | ... | @@ -19,15 +19,15 @@ |
19 | 19 | printk(KERN_INFO "Pid: %d, comm: %.20s %s %s\n", task_pid_nr(current), |
20 | 20 | current->comm, print_tainted(), init_utsname()->release); |
21 | 21 | printk(KERN_INFO "RIP: %04lx:[<%016lx>]\n", PT_REGS_CS(regs) & 0xffff, |
22 | - PT_REGS_RIP(regs)); | |
22 | + PT_REGS_IP(regs)); | |
23 | 23 | printk(KERN_INFO "RSP: %016lx EFLAGS: %08lx\n", PT_REGS_SP(regs), |
24 | 24 | PT_REGS_EFLAGS(regs)); |
25 | 25 | printk(KERN_INFO "RAX: %016lx RBX: %016lx RCX: %016lx\n", |
26 | - PT_REGS_RAX(regs), PT_REGS_RBX(regs), PT_REGS_RCX(regs)); | |
26 | + PT_REGS_AX(regs), PT_REGS_BX(regs), PT_REGS_CX(regs)); | |
27 | 27 | printk(KERN_INFO "RDX: %016lx RSI: %016lx RDI: %016lx\n", |
28 | - PT_REGS_RDX(regs), PT_REGS_RSI(regs), PT_REGS_RDI(regs)); | |
28 | + PT_REGS_DX(regs), PT_REGS_SI(regs), PT_REGS_DI(regs)); | |
29 | 29 | printk(KERN_INFO "RBP: %016lx R08: %016lx R09: %016lx\n", |
30 | - PT_REGS_RBP(regs), PT_REGS_R8(regs), PT_REGS_R9(regs)); | |
30 | + PT_REGS_BP(regs), PT_REGS_R8(regs), PT_REGS_R9(regs)); | |
31 | 31 | printk(KERN_INFO "R10: %016lx R11: %016lx R12: %016lx\n", |
32 | 32 | PT_REGS_R10(regs), PT_REGS_R11(regs), PT_REGS_R12(regs)); |
33 | 33 | printk(KERN_INFO "R13: %016lx R14: %016lx R15: %016lx\n", |
arch/x86/um/tls_32.c