162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 362306a36Sopenharmony_ci * License. See the file "COPYING" in the main directory of this archive 462306a36Sopenharmony_ci * for more details. 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci#ifndef __ASM_UPROBES_H 762306a36Sopenharmony_ci#define __ASM_UPROBES_H 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/notifier.h> 1062306a36Sopenharmony_ci#include <linux/types.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <asm/break.h> 1362306a36Sopenharmony_ci#include <asm/inst.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/* 1662306a36Sopenharmony_ci * We want this to be defined as union mips_instruction but that makes the 1762306a36Sopenharmony_ci * generic code blow up. 1862306a36Sopenharmony_ci */ 1962306a36Sopenharmony_citypedef u32 uprobe_opcode_t; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* 2262306a36Sopenharmony_ci * Classic MIPS (note this implementation doesn't consider microMIPS yet) 2362306a36Sopenharmony_ci * instructions are always 4 bytes but in order to deal with branches and 2462306a36Sopenharmony_ci * their delay slots, we treat instructions as having 8 bytes maximum. 2562306a36Sopenharmony_ci */ 2662306a36Sopenharmony_ci#define MAX_UINSN_BYTES 8 2762306a36Sopenharmony_ci#define UPROBE_XOL_SLOT_BYTES 128 /* Max. cache line size */ 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#define UPROBE_BRK_UPROBE 0x000d000d /* break 13 */ 3062306a36Sopenharmony_ci#define UPROBE_BRK_UPROBE_XOL 0x000e000d /* break 14 */ 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci#define UPROBE_SWBP_INSN UPROBE_BRK_UPROBE 3362306a36Sopenharmony_ci#define UPROBE_SWBP_INSN_SIZE 4 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_cistruct arch_uprobe { 3662306a36Sopenharmony_ci unsigned long resume_epc; 3762306a36Sopenharmony_ci u32 insn[2]; 3862306a36Sopenharmony_ci u32 ixol[2]; 3962306a36Sopenharmony_ci}; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cistruct arch_uprobe_task { 4262306a36Sopenharmony_ci unsigned long saved_trap_nr; 4362306a36Sopenharmony_ci}; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci#endif /* __ASM_UPROBES_H */ 46