Go to the documentation of this file. 1 #ifndef _ASM_X86_DEBUGREG_H
2 #define _ASM_X86_DEBUGREG_H
18 #define DR6_RESERVED (0xFFFF0FF0)
20 #define DR_TRAP0 (0x1)
21 #define DR_TRAP1 (0x2)
22 #define DR_TRAP2 (0x4)
23 #define DR_TRAP3 (0x8)
24 #define DR_TRAP_BITS (DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)
26 #define DR_STEP (0x4000)
27 #define DR_SWITCH (0x8000)
35 #define DR_CONTROL_SHIFT 16
36 #define DR_CONTROL_SIZE 4
38 #define DR_RW_EXECUTE (0x0)
39 #define DR_RW_WRITE (0x1)
40 #define DR_RW_READ (0x3)
42 #define DR_LEN_1 (0x0)
43 #define DR_LEN_2 (0x4)
44 #define DR_LEN_4 (0xC)
45 #define DR_LEN_8 (0x8)
54 #define DR_LOCAL_ENABLE_SHIFT 0
55 #define DR_GLOBAL_ENABLE_SHIFT 1
56 #define DR_LOCAL_ENABLE (0x1)
57 #define DR_GLOBAL_ENABLE (0x2)
58 #define DR_ENABLE_SIZE 2
60 #define DR_LOCAL_ENABLE_MASK (0x55)
61 #define DR_GLOBAL_ENABLE_MASK (0xAA)
68 #define DR_CONTROL_RESERVED (0xFC00)
70 #define DR_CONTROL_RESERVED (0xFFFFFFFF0000FC00UL)
73 #define DR_LOCAL_SLOWDOWN (0x100)
74 #define DR_GLOBAL_SLOWDOWN (0x200)
85 #ifndef CONFIG_PARAVIRT
89 #define get_debugreg(var, register) \
90 (var) = native_get_debugreg(register)
91 #define set_debugreg(value, register) \
92 native_set_debugreg(register, value)
95 static inline unsigned long native_get_debugreg(
int regno)
97 unsigned long val = 0;
101 asm(
"mov %%db0, %0" :
"=r" (
val));
104 asm(
"mov %%db1, %0" :
"=r" (
val));
107 asm(
"mov %%db2, %0" :
"=r" (
val));
110 asm(
"mov %%db3, %0" :
"=r" (
val));
113 asm(
"mov %%db6, %0" :
"=r" (
val));
116 asm(
"mov %%db7, %0" :
"=r" (
val));
124 static inline void native_set_debugreg(
int regno,
unsigned long value)
128 asm(
"mov %0, %%db0" ::
"r" (
value));
131 asm(
"mov %0, %%db1" ::
"r" (
value));
134 asm(
"mov %0, %%db2" ::
"r" (
value));
137 asm(
"mov %0, %%db3" ::
"r" (
value));
140 asm(
"mov %0, %%db6" ::
"r" (
value));
143 asm(
"mov %0, %%db7" ::
"r" (
value));
150 static inline void hw_breakpoint_disable(
void)
153 set_debugreg(0
UL, 7);
156 set_debugreg(0
UL, 0);
157 set_debugreg(0
UL, 1);
158 set_debugreg(0
UL, 2);
159 set_debugreg(0
UL, 3);
162 static inline int hw_breakpoint_active(
void)
173 static inline void debug_stack_usage_inc(
void)
177 static inline void debug_stack_usage_dec(
void)
181 int is_debug_stack(
unsigned long addr);
182 void debug_stack_set_zero(
void);
183 void debug_stack_reset(
void);
185 static inline int is_debug_stack(
unsigned long addr) {
return 0; }
186 static inline void debug_stack_set_zero(
void) { }
187 static inline void debug_stack_reset(
void) { }
188 static inline void debug_stack_usage_inc(
void) { }
189 static inline void debug_stack_usage_dec(
void) { }