xref: /linux/arch/x86/um/shared/sysdep/ptrace.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
290a4c0f5SLinus Torvalds #ifndef __SYSDEP_X86_PTRACE_H
390a4c0f5SLinus Torvalds #define __SYSDEP_X86_PTRACE_H
490a4c0f5SLinus Torvalds 
5243412beSAl Viro #include <generated/user_constants.h>
637185b33SAl Viro #include <sysdep/faultinfo.h>
7243412beSAl Viro 
8243412beSAl Viro #define MAX_REG_OFFSET (UM_FRAME_SIZE)
9243412beSAl Viro #define MAX_REG_NR ((MAX_REG_OFFSET) / sizeof(unsigned long))
10243412beSAl Viro 
11243412beSAl Viro #define REGS_IP(r) ((r)[HOST_IP])
12243412beSAl Viro #define REGS_SP(r) ((r)[HOST_SP])
13243412beSAl Viro #define REGS_EFLAGS(r) ((r)[HOST_EFLAGS])
14243412beSAl Viro #define REGS_AX(r) ((r)[HOST_AX])
15243412beSAl Viro #define REGS_BX(r) ((r)[HOST_BX])
16243412beSAl Viro #define REGS_CX(r) ((r)[HOST_CX])
17243412beSAl Viro #define REGS_DX(r) ((r)[HOST_DX])
18243412beSAl Viro #define REGS_SI(r) ((r)[HOST_SI])
19243412beSAl Viro #define REGS_DI(r) ((r)[HOST_DI])
20243412beSAl Viro #define REGS_BP(r) ((r)[HOST_BP])
21243412beSAl Viro #define REGS_CS(r) ((r)[HOST_CS])
22243412beSAl Viro #define REGS_SS(r) ((r)[HOST_SS])
23243412beSAl Viro #define REGS_DS(r) ((r)[HOST_DS])
24243412beSAl Viro #define REGS_ES(r) ((r)[HOST_ES])
25243412beSAl Viro 
26243412beSAl Viro #define UPT_IP(r) REGS_IP((r)->gp)
27243412beSAl Viro #define UPT_SP(r) REGS_SP((r)->gp)
28243412beSAl Viro #define UPT_EFLAGS(r) REGS_EFLAGS((r)->gp)
29243412beSAl Viro #define UPT_AX(r) REGS_AX((r)->gp)
30243412beSAl Viro #define UPT_BX(r) REGS_BX((r)->gp)
31243412beSAl Viro #define UPT_CX(r) REGS_CX((r)->gp)
32243412beSAl Viro #define UPT_DX(r) REGS_DX((r)->gp)
33243412beSAl Viro #define UPT_SI(r) REGS_SI((r)->gp)
34243412beSAl Viro #define UPT_DI(r) REGS_DI((r)->gp)
35243412beSAl Viro #define UPT_BP(r) REGS_BP((r)->gp)
36243412beSAl Viro #define UPT_CS(r) REGS_CS((r)->gp)
37243412beSAl Viro #define UPT_SS(r) REGS_SS((r)->gp)
38243412beSAl Viro #define UPT_DS(r) REGS_DS((r)->gp)
39243412beSAl Viro #define UPT_ES(r) REGS_ES((r)->gp)
40243412beSAl Viro 
415c48b108SAl Viro #ifdef __i386__
425c48b108SAl Viro #include "ptrace_32.h"
435c48b108SAl Viro #else
445c48b108SAl Viro #include "ptrace_64.h"
455c48b108SAl Viro #endif
46d7e7528bSEric Paris 
47243412beSAl Viro struct syscall_args {
48243412beSAl Viro 	unsigned long args[6];
49243412beSAl Viro };
50243412beSAl Viro 
51243412beSAl Viro #define SYSCALL_ARGS(r) ((struct syscall_args) \
52243412beSAl Viro 			 { .args = { UPT_SYSCALL_ARG1(r),	 \
53243412beSAl Viro 				     UPT_SYSCALL_ARG2(r),	 \
54243412beSAl Viro 				     UPT_SYSCALL_ARG3(r),	 \
55243412beSAl Viro 				     UPT_SYSCALL_ARG4(r),	 \
56243412beSAl Viro 				     UPT_SYSCALL_ARG5(r),	 \
57243412beSAl Viro 				     UPT_SYSCALL_ARG6(r) } } )
58243412beSAl Viro 
59243412beSAl Viro struct uml_pt_regs {
60243412beSAl Viro 	unsigned long gp[MAX_REG_NR];
61243412beSAl Viro 	unsigned long fp[MAX_FP_NR];
62243412beSAl Viro 	struct faultinfo faultinfo;
63243412beSAl Viro 	long syscall;
64243412beSAl Viro 	int is_user;
65243412beSAl Viro };
66243412beSAl Viro 
67243412beSAl Viro #define EMPTY_UML_PT_REGS { }
68243412beSAl Viro 
69243412beSAl Viro #define UPT_SYSCALL_NR(r) ((r)->syscall)
70243412beSAl Viro #define UPT_FAULTINFO(r) (&(r)->faultinfo)
71243412beSAl Viro #define UPT_IS_USER(r) ((r)->is_user)
72243412beSAl Viro 
73243412beSAl Viro extern int user_context(unsigned long sp);
7490a4c0f5SLinus Torvalds 
7590a4c0f5SLinus Torvalds #endif /* __SYSDEP_X86_PTRACE_H */
76