1 #ifndef _ASM_X86_PTRACE_H
2 #define _ASM_X86_PTRACE_H
4 #include <linux/compiler.h> /* For __user */
5 #include <asm/ptrace-abi.h>
15 extern void ptrace_bts_take_timestamp(struct task_struct
*, enum bts_qualifier
);
17 #endif /* __KERNEL__ */
21 /* this struct defines the way the registers are stored on the
22 stack during a system call. */
46 #else /* __KERNEL__ */
69 #include <asm/segment.h>
72 extern void send_sigtrap(struct task_struct
*tsk
, struct pt_regs
*regs
, int error_code
);
75 * user_mode_vm(regs) determines whether a register set came from user mode.
76 * This is true if V8086 mode was enabled OR if the register set was from
77 * protected mode with RPL-3 CS value. This tricky test checks that with
78 * one comparison. Many places in the kernel can bypass this full check
79 * if they have already ruled out V8086 mode, so user_mode(regs) can be used.
81 static inline int user_mode(struct pt_regs
*regs
)
83 return (regs
->cs
& SEGMENT_RPL_MASK
) == USER_RPL
;
85 static inline int user_mode_vm(struct pt_regs
*regs
)
87 return ((regs
->cs
& SEGMENT_RPL_MASK
) |
88 (regs
->flags
& VM_MASK
)) >= USER_RPL
;
90 static inline int v8086_mode(struct pt_regs
*regs
)
92 return (regs
->flags
& VM_MASK
);
95 #define instruction_pointer(regs) ((regs)->ip)
96 #define frame_pointer(regs) ((regs)->bp)
97 #define stack_pointer(regs) ((unsigned long)(regs))
98 #define regs_return_value(regs) ((regs)->ax)
100 extern unsigned long profile_pc(struct pt_regs
*regs
);
101 #endif /* __KERNEL__ */
114 /* arguments: non interrupts/non tracing syscalls only save upto here*/
124 unsigned long orig_rax
;
125 /* end of arguments */
126 /* cpu exception frame or undefined */
129 unsigned long eflags
;
132 /* top of stack page */
135 #else /* __KERNEL__ */
144 /* arguments: non interrupts/non tracing syscalls only save upto here*/
154 unsigned long orig_ax
;
155 /* end of arguments */
156 /* cpu exception frame or undefined */
162 /* top of stack page */
165 #define user_mode(regs) (!!((regs)->cs & 3))
166 #define user_mode_vm(regs) user_mode(regs)
167 #define v8086_mode(regs) 0 /* No V86 mode support in long mode */
168 #define instruction_pointer(regs) ((regs)->ip)
169 #define frame_pointer(regs) ((regs)->bp)
170 #define stack_pointer(regs) ((regs)->sp)
171 #define regs_return_value(regs) ((regs)->ax)
173 extern unsigned long profile_pc(struct pt_regs
*regs
);
174 void signal_fault(struct pt_regs
*regs
, void __user
*frame
, char *where
);
179 convert_rip_to_linear(struct task_struct
*child
, struct pt_regs
*regs
);
181 #endif /* __KERNEL__ */
182 #endif /* !__i386__ */
187 * These are defined as per linux/ptrace.h, which see.
189 #define arch_has_single_step() (1)
190 extern void user_enable_single_step(struct task_struct
*);
191 extern void user_disable_single_step(struct task_struct
*);
193 extern void user_enable_block_step(struct task_struct
*);
194 #ifdef CONFIG_X86_DEBUGCTLMSR
195 #define arch_has_block_step() (1)
197 #define arch_has_block_step() (boot_cpu_data.x86 >= 6)
201 extern int do_get_thread_area(struct task_struct
*p
, int idx
,
202 struct user_desc __user
*info
);
203 extern int do_set_thread_area(struct task_struct
*p
, int idx
,
204 struct user_desc __user
*info
, int can_allocate
);
206 #endif /* __KERNEL__ */
208 #endif /* !__ASSEMBLY__ */
This page took 0.048091 seconds and 5 git commands to generate.