18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2012 Rabin Vincent <rabin at rab.in> 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef _ASM_UPROBES_H 78c2ecf20Sopenharmony_ci#define _ASM_UPROBES_H 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <asm/probes.h> 108c2ecf20Sopenharmony_ci#include <asm/opcodes.h> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_citypedef u32 uprobe_opcode_t; 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#define MAX_UINSN_BYTES 4 158c2ecf20Sopenharmony_ci#define UPROBE_XOL_SLOT_BYTES 64 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci#define UPROBE_SWBP_ARM_INSN 0xe7f001f9 188c2ecf20Sopenharmony_ci#define UPROBE_SS_ARM_INSN 0xe7f001fa 198c2ecf20Sopenharmony_ci#define UPROBE_SWBP_INSN __opcode_to_mem_arm(UPROBE_SWBP_ARM_INSN) 208c2ecf20Sopenharmony_ci#define UPROBE_SWBP_INSN_SIZE 4 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistruct arch_uprobe_task { 238c2ecf20Sopenharmony_ci u32 backup; 248c2ecf20Sopenharmony_ci unsigned long saved_trap_no; 258c2ecf20Sopenharmony_ci}; 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_cistruct arch_uprobe { 288c2ecf20Sopenharmony_ci u8 insn[MAX_UINSN_BYTES]; 298c2ecf20Sopenharmony_ci unsigned long ixol[2]; 308c2ecf20Sopenharmony_ci uprobe_opcode_t bpinsn; 318c2ecf20Sopenharmony_ci bool simulate; 328c2ecf20Sopenharmony_ci u32 pcreg; 338c2ecf20Sopenharmony_ci void (*prehandler)(struct arch_uprobe *auprobe, 348c2ecf20Sopenharmony_ci struct arch_uprobe_task *autask, 358c2ecf20Sopenharmony_ci struct pt_regs *regs); 368c2ecf20Sopenharmony_ci void (*posthandler)(struct arch_uprobe *auprobe, 378c2ecf20Sopenharmony_ci struct arch_uprobe_task *autask, 388c2ecf20Sopenharmony_ci struct pt_regs *regs); 398c2ecf20Sopenharmony_ci struct arch_probes_insn asi; 408c2ecf20Sopenharmony_ci}; 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci#endif 43