| /* | 
 |  * 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 |