1 /* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 */ 6 #ifndef __ASM_UPROBES_H 7 #define __ASM_UPROBES_H 8 9 #include <linux/notifier.h> 10 #include <linux/types.h> 11 12 #include <asm/break.h> 13 #include <asm/inst.h> 14 15 /* 16 * We want this to be defined as union mips_instruction but that makes the 17 * generic code blow up. 18 */ 19 typedef u32 uprobe_opcode_t; 20 21 /* 22 * Classic MIPS (note this implementation doesn't consider microMIPS yet) 23 * instructions are always 4 bytes but in order to deal with branches and 24 * their delay slots, we treat instructions as having 8 bytes maximum. 25 */ 26 #define MAX_UINSN_BYTES 8 27 #define UPROBE_XOL_SLOT_BYTES 128 /* Max. cache line size */ 28 29 #define UPROBE_BRK_UPROBE 0x000d000d /* break 13 */ 30 #define UPROBE_BRK_UPROBE_XOL 0x000e000d /* break 14 */ 31 32 #define UPROBE_SWBP_INSN UPROBE_BRK_UPROBE 33 #define UPROBE_SWBP_INSN_SIZE 4 34 35 struct arch_uprobe { 36 unsigned long resume_epc; 37 u32 insn[2]; 38 u32 ixol[2]; 39 }; 40 41 struct arch_uprobe_task { 42 unsigned long saved_trap_nr; 43 }; 44 45 #endif /* __ASM_UPROBES_H */ 46