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 */ 19typedef 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 35struct arch_uprobe { 36 unsigned long resume_epc; 37 u32 insn[2]; 38 u32 ixol[2]; 39}; 40 41struct arch_uprobe_task { 42 unsigned long saved_trap_nr; 43}; 44 45#endif /* __ASM_UPROBES_H */ 46