summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAnil S Keshavamurthy <anil.s.keshavamurthy@intel.com>2005-06-23 00:09:29 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-23 09:45:23 -0700
commitcd2675bf65455a45b54228b7acc0c6a26a164cb6 (patch)
tree102dd9bdf79ce8a5728dd098fb2b3a574c113186 /include
parentb2761dc262b428475890fffd979687051beb12ba (diff)
downloadlinux-cd2675bf65455a45b54228b7acc0c6a26a164cb6.tar.gz
linux-cd2675bf65455a45b54228b7acc0c6a26a164cb6.tar.bz2
linux-cd2675bf65455a45b54228b7acc0c6a26a164cb6.zip
[PATCH] Kprobes/IA64: support kprobe on branch/call instructions
This patch is required to support kprobe on branch/call instructions. Signed-off-by: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include')
-rw-r--r--include/asm-ia64/kprobes.h17
1 files changed, 16 insertions, 1 deletions
diff --git a/include/asm-ia64/kprobes.h b/include/asm-ia64/kprobes.h
index fec3506e53f8..d30af77a0b11 100644
--- a/include/asm-ia64/kprobes.h
+++ b/include/asm-ia64/kprobes.h
@@ -44,6 +44,17 @@ typedef struct _bundle {
#define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)pentry
+#define SLOT0_OPCODE_SHIFT (37)
+#define SLOT1_p1_OPCODE_SHIFT (37 - (64-46))
+#define SLOT2_OPCODE_SHIFT (37)
+
+#define INDIRECT_CALL_OPCODE (1)
+#define IP_RELATIVE_CALL_OPCODE (5)
+#define IP_RELATIVE_BRANCH_OPCODE (4)
+#define IP_RELATIVE_PREDICT_OPCODE (7)
+#define LONG_BRANCH_OPCODE (0xC)
+#define LONG_CALL_OPCODE (0xD)
+
typedef struct kprobe_opcode {
bundle_t bundle;
} kprobe_opcode_t;
@@ -55,8 +66,12 @@ struct fnptr {
/* Architecture specific copy of original instruction*/
struct arch_specific_insn {
- /* copy of the original instruction */
+ /* copy of the instruction to be emulated */
kprobe_opcode_t insn;
+ #define INST_FLAG_FIX_RELATIVE_IP_ADDR 1
+ #define INST_FLAG_FIX_BRANCH_REG 2
+ unsigned long inst_flag;
+ unsigned short target_br_reg;
};
/* ia64 does not need this */