162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci#ifndef _ASM_UPROBES_H 362306a36Sopenharmony_ci#define _ASM_UPROBES_H 462306a36Sopenharmony_ci/* 562306a36Sopenharmony_ci * User-space Probes (UProbes) for sparc 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Copyright (C) 2013 Oracle, Inc. 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * Authors: 1062306a36Sopenharmony_ci * Jose E. Marchesi <jose.marchesi@oracle.com> 1162306a36Sopenharmony_ci * Eric Saint Etienne <eric.saint.etienne@oracle.com> 1262306a36Sopenharmony_ci */ 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_citypedef u32 uprobe_opcode_t; 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#define MAX_UINSN_BYTES 4 1762306a36Sopenharmony_ci#define UPROBE_XOL_SLOT_BYTES (MAX_UINSN_BYTES * 2) 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define UPROBE_SWBP_INSN_SIZE 4 2062306a36Sopenharmony_ci#define UPROBE_SWBP_INSN 0x91d02073 /* ta 0x73 */ 2162306a36Sopenharmony_ci#define UPROBE_STP_INSN 0x91d02074 /* ta 0x74 */ 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define ANNUL_BIT (1 << 29) 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cistruct arch_uprobe { 2662306a36Sopenharmony_ci union { 2762306a36Sopenharmony_ci u8 insn[MAX_UINSN_BYTES]; 2862306a36Sopenharmony_ci u32 ixol; 2962306a36Sopenharmony_ci }; 3062306a36Sopenharmony_ci}; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_cistruct arch_uprobe_task { 3362306a36Sopenharmony_ci u64 saved_tpc; 3462306a36Sopenharmony_ci u64 saved_tnpc; 3562306a36Sopenharmony_ci}; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_cistruct task_struct; 3862306a36Sopenharmony_cistruct notifier_block; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ciextern int arch_uprobe_analyze_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long addr); 4162306a36Sopenharmony_ciextern int arch_uprobe_pre_xol(struct arch_uprobe *aup, struct pt_regs *regs); 4262306a36Sopenharmony_ciextern int arch_uprobe_post_xol(struct arch_uprobe *aup, struct pt_regs *regs); 4362306a36Sopenharmony_ciextern bool arch_uprobe_xol_was_trapped(struct task_struct *tsk); 4462306a36Sopenharmony_ciextern int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data); 4562306a36Sopenharmony_ciextern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs); 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#endif /* _ASM_UPROBES_H */ 48