summaryrefslogtreecommitdiff
path: root/arch/arm/include/asm/uprobes.h
diff options
context:
space:
mode:
authorDavid A. Long <dave.long@linaro.org>2014-03-07 20:23:04 +0400
committerDavid A. Long <dave.long@linaro.org>2014-03-19 00:39:40 +0400
commitc7edc9e326d53ca5ef9bed82de0740c6b107d55b (patch)
tree262d901b5e4d61930d5bc8ff68b9ddd807e3f956 /arch/arm/include/asm/uprobes.h
parentb4cd605ca92d9a8a2f71355cb45dd943ebcb0c97 (diff)
downloadlinux-c7edc9e326d53ca5ef9bed82de0740c6b107d55b.tar.xz
ARM: add uprobes support
Using Rabin Vincent's ARM uprobes patches as a base, enable uprobes support on ARM. Caveats: - Thumb is not supported Signed-off-by: Rabin Vincent <rabin@rab.in> Signed-off-by: David A. Long <dave.long@linaro.org>
Diffstat (limited to 'arch/arm/include/asm/uprobes.h')
-rw-r--r--arch/arm/include/asm/uprobes.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/arch/arm/include/asm/uprobes.h b/arch/arm/include/asm/uprobes.h
new file mode 100644
index 000000000000..9472c20b7d49
--- /dev/null
+++ b/arch/arm/include/asm/uprobes.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2012 Rabin Vincent <rabin at rab.in>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef _ASM_UPROBES_H
+#define _ASM_UPROBES_H
+
+#include <asm/probes.h>
+#include <asm/opcodes.h>
+
+typedef u32 uprobe_opcode_t;
+
+#define MAX_UINSN_BYTES 4
+#define UPROBE_XOL_SLOT_BYTES 64
+
+#define UPROBE_SWBP_ARM_INSN 0xe7f001f9
+#define UPROBE_SS_ARM_INSN 0xe7f001fa
+#define UPROBE_SWBP_INSN __opcode_to_mem_arm(UPROBE_SWBP_ARM_INSN)
+#define UPROBE_SWBP_INSN_SIZE 4
+
+struct arch_uprobe_task {
+ u32 backup;
+ unsigned long saved_trap_no;
+};
+
+struct arch_uprobe {
+ u8 insn[MAX_UINSN_BYTES];
+ unsigned long ixol[2];
+ uprobe_opcode_t bpinsn;
+ bool simulate;
+ u32 pcreg;
+ void (*prehandler)(struct arch_uprobe *auprobe,
+ struct arch_uprobe_task *autask,
+ struct pt_regs *regs);
+ void (*posthandler)(struct arch_uprobe *auprobe,
+ struct arch_uprobe_task *autask,
+ struct pt_regs *regs);
+ struct arch_probes_insn asi;
+};
+
+#endif