diff options
Diffstat (limited to 'arch/arm/include/asm/uprobes.h')
| -rw-r--r-- | arch/arm/include/asm/uprobes.h | 45 | 
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 00000000000..9472c20b7d4 --- /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  | 
