Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/x86/um/shared/sysdep/faultinfo_32.h
26516 views
1
/*
2
* Copyright (C) 2004 Fujitsu Siemens Computers GmbH
3
* Author: Bodo Stroesser <[email protected]>
4
* Licensed under the GPL
5
*/
6
7
#ifndef __FAULTINFO_I386_H
8
#define __FAULTINFO_I386_H
9
10
/* this structure contains the full arch-specific faultinfo
11
* from the traps.
12
* On i386, ptrace_faultinfo unfortunately doesn't provide
13
* all the info, since trap_no is missing.
14
* All common elements are defined at the same position in
15
* both structures, thus making it easy to copy the
16
* contents without knowledge about the structure elements.
17
*/
18
struct faultinfo {
19
int error_code; /* in ptrace_faultinfo misleadingly called is_write */
20
unsigned long cr2; /* in ptrace_faultinfo called addr */
21
int trap_no; /* missing in ptrace_faultinfo */
22
};
23
24
#define FAULT_WRITE(fi) ((fi).error_code & 2)
25
#define FAULT_ADDRESS(fi) ((fi).cr2)
26
27
/* This is Page Fault */
28
#define SEGV_IS_FIXABLE(fi) ((fi)->trap_no == 14)
29
30
#define PTRACE_FULL_FAULTINFO 0
31
32
#define ___backtrack_faulted(_faulted) \
33
asm volatile ( \
34
"movl $__get_kernel_nofault_faulted_%=,%1\n" \
35
"mov $0, %0\n" \
36
"jmp _end_%=\n" \
37
"__get_kernel_nofault_faulted_%=:\n" \
38
"mov $1, %0;" \
39
"_end_%=:" \
40
: "=r" (_faulted), \
41
"=m" (current->thread.segv_continue) :: \
42
)
43
44
#endif
45
46