|
@@ -166,12 +166,12 @@ NOKPROBE_SYMBOL(skip_prefixes);
|
|
|
* Returns non-zero if opcode is boostable.
|
|
|
* RIP relative instructions are adjusted at copying time in 64 bits mode
|
|
|
*/
|
|
|
-int can_boost(kprobe_opcode_t *opcodes)
|
|
|
+int can_boost(kprobe_opcode_t *opcodes, void *addr)
|
|
|
{
|
|
|
kprobe_opcode_t opcode;
|
|
|
kprobe_opcode_t *orig_opcodes = opcodes;
|
|
|
|
|
|
- if (search_exception_tables((unsigned long)opcodes))
|
|
|
+ if (search_exception_tables((unsigned long)addr))
|
|
|
return 0; /* Page fault may occur on this address. */
|
|
|
|
|
|
retry:
|
|
@@ -416,7 +416,7 @@ static int arch_copy_kprobe(struct kprobe *p)
|
|
|
* __copy_instruction can modify the displacement of the instruction,
|
|
|
* but it doesn't affect boostable check.
|
|
|
*/
|
|
|
- if (can_boost(p->ainsn.insn))
|
|
|
+ if (can_boost(p->ainsn.insn, p->addr))
|
|
|
p->ainsn.boostable = 0;
|
|
|
else
|
|
|
p->ainsn.boostable = -1;
|