typedef u8 uprobe_opcode_t;
#define MAX_UINSN_BYTES 16
-#define UPROBES_XOL_SLOT_BYTES 128 /* to keep it cache aligned */
+#define UPROBE_XOL_SLOT_BYTES 128 /* to keep it cache aligned */
-#define UPROBES_BKPT_INSN 0xcc
-#define UPROBES_BKPT_INSN_SIZE 1
+#define UPROBE_BKPT_INSN 0xcc
+#define UPROBE_BKPT_INSN_SIZE 1
struct arch_uprobe {
u16 fixups;
/* Post-execution fixups. */
/* No fixup needed */
-#define UPROBES_FIX_NONE 0x0
+#define UPROBE_FIX_NONE 0x0
/* Adjust IP back to vicinity of actual insn */
-#define UPROBES_FIX_IP 0x1
+#define UPROBE_FIX_IP 0x1
/* Adjust the return address of a call insn */
-#define UPROBES_FIX_CALL 0x2
+#define UPROBE_FIX_CALL 0x2
-#define UPROBES_FIX_RIP_AX 0x8000
-#define UPROBES_FIX_RIP_CX 0x4000
+#define UPROBE_FIX_RIP_AX 0x8000
+#define UPROBE_FIX_RIP_CX 0x4000
/* Adaptations for mhiramat x86 decoder v14. */
#define OPCODE1(insn) ((insn)->opcode.bytes[0])
break;
}
if (fix_ip)
- auprobe->fixups |= UPROBES_FIX_IP;
+ auprobe->fixups |= UPROBE_FIX_IP;
if (fix_call)
- auprobe->fixups |= UPROBES_FIX_CALL;
+ auprobe->fixups |= UPROBE_FIX_CALL;
}
#ifdef CONFIG_X86_64
* is NOT the register operand, so we use %rcx (register
* #1) for the scratch register.
*/
- auprobe->fixups = UPROBES_FIX_RIP_CX;
+ auprobe->fixups = UPROBE_FIX_RIP_CX;
/* Change modrm from 00 000 101 to 00 000 001. */
*cursor = 0x1;
} else {
/* Use %rax (register #0) for the scratch register. */
- auprobe->fixups = UPROBES_FIX_RIP_AX;
+ auprobe->fixups = UPROBE_FIX_RIP_AX;
/* Change modrm from 00 xxx 101 to 00 xxx 000 */
*cursor = (reg << 3);
}
/* flags that denote/change uprobes behaviour */
/* Have a copy of original instruction */
-#define UPROBES_COPY_INSN 0x1
+#define UPROBE_COPY_INSN 0x1
/* Dont run handlers when first register/ last unregister in progress*/
-#define UPROBES_RUN_HANDLER 0x2
+#define UPROBE_RUN_HANDLER 0x2
struct uprobe_consumer {
int (*handler)(struct uprobe_consumer *self, struct pt_regs *regs);
*/
bool __weak is_bkpt_insn(uprobe_opcode_t *insn)
{
- return *insn == UPROBES_BKPT_INSN;
+ return *insn == UPROBE_BKPT_INSN;
}
/*
/* poke the new insn in, ASSUMES we don't cross page boundary */
vaddr &= ~PAGE_MASK;
- BUG_ON(vaddr + UPROBES_BKPT_INSN_SIZE > PAGE_SIZE);
- memcpy(vaddr_new + vaddr, &opcode, UPROBES_BKPT_INSN_SIZE);
+ BUG_ON(vaddr + UPROBE_BKPT_INSN_SIZE > PAGE_SIZE);
+ memcpy(vaddr_new + vaddr, &opcode, UPROBE_BKPT_INSN_SIZE);
kunmap_atomic(vaddr_new);
kunmap_atomic(vaddr_old);
lock_page(page);
vaddr_new = kmap_atomic(page);
vaddr &= ~PAGE_MASK;
- memcpy(opcode, vaddr_new + vaddr, UPROBES_BKPT_INSN_SIZE);
+ memcpy(opcode, vaddr_new + vaddr, UPROBE_BKPT_INSN_SIZE);
kunmap_atomic(vaddr_new);
unlock_page(page);
if (result)
return result;
- return write_opcode(mm, auprobe, vaddr, UPROBES_BKPT_INSN);
+ return write_opcode(mm, auprobe, vaddr, UPROBE_BKPT_INSN);
}
/**
addr = (unsigned long)vaddr;
- if (!(uprobe->flags & UPROBES_COPY_INSN)) {
+ if (!(uprobe->flags & UPROBE_COPY_INSN)) {
ret = copy_insn(uprobe, vma, addr);
if (ret)
return ret;
if (ret)
return ret;
- uprobe->flags |= UPROBES_COPY_INSN;
+ uprobe->flags |= UPROBE_COPY_INSN;
}
ret = set_bkpt(mm, &uprobe->arch, addr);
uprobe->consumers = NULL;
__uprobe_unregister(uprobe);
} else {
- uprobe->flags |= UPROBES_RUN_HANDLER;
+ uprobe->flags |= UPROBE_RUN_HANDLER;
}
}
if (consumer_del(uprobe, consumer)) {
if (!uprobe->consumers) {
__uprobe_unregister(uprobe);
- uprobe->flags &= ~UPROBES_RUN_HANDLER;
+ uprobe->flags &= ~UPROBE_RUN_HANDLER;
}
}