diff options
Diffstat (limited to 'arch/x86/kernel/kprobes.c')
-rw-r--r-- | arch/x86/kernel/kprobes.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/x86/kernel/kprobes.c b/arch/x86/kernel/kprobes.c index 794bc95134cd..7da647d8b64c 100644 --- a/arch/x86/kernel/kprobes.c +++ b/arch/x86/kernel/kprobes.c | |||
@@ -75,10 +75,11 @@ DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); | |||
75 | /* | 75 | /* |
76 | * Undefined/reserved opcodes, conditional jump, Opcode Extension | 76 | * Undefined/reserved opcodes, conditional jump, Opcode Extension |
77 | * Groups, and some special opcodes can not boost. | 77 | * Groups, and some special opcodes can not boost. |
78 | * This is non-const to keep gcc from statically optimizing it out, as | 78 | * This is non-const and volatile to keep gcc from statically |
79 | * variable_test_bit makes gcc think only *(unsigned long*) is used. | 79 | * optimizing it out, as variable_test_bit makes gcc think only |
80 | * *(unsigned long*) is used. | ||
80 | */ | 81 | */ |
81 | static u32 twobyte_is_boostable[256 / 32] = { | 82 | static volatile u32 twobyte_is_boostable[256 / 32] = { |
82 | /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ | 83 | /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ |
83 | /* ---------------------------------------------- */ | 84 | /* ---------------------------------------------- */ |
84 | W(0x00, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0) | /* 00 */ | 85 | W(0x00, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0) | /* 00 */ |