18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci#ifndef _ASM_UPROBES_H
38c2ecf20Sopenharmony_ci#define _ASM_UPROBES_H
48c2ecf20Sopenharmony_ci/*
58c2ecf20Sopenharmony_ci * User-space Probes (UProbes) for x86
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Copyright (C) IBM Corporation, 2008-2011
88c2ecf20Sopenharmony_ci * Authors:
98c2ecf20Sopenharmony_ci *	Srikar Dronamraju
108c2ecf20Sopenharmony_ci *	Jim Keniston
118c2ecf20Sopenharmony_ci */
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#include <linux/notifier.h>
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_citypedef u8 uprobe_opcode_t;
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci#define MAX_UINSN_BYTES			  16
188c2ecf20Sopenharmony_ci#define UPROBE_XOL_SLOT_BYTES		 128	/* to keep it cache aligned */
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci#define UPROBE_SWBP_INSN		0xcc
218c2ecf20Sopenharmony_ci#define UPROBE_SWBP_INSN_SIZE		   1
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_cistruct uprobe_xol_ops;
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_cistruct arch_uprobe {
268c2ecf20Sopenharmony_ci	union {
278c2ecf20Sopenharmony_ci		u8			insn[MAX_UINSN_BYTES];
288c2ecf20Sopenharmony_ci		u8			ixol[MAX_UINSN_BYTES];
298c2ecf20Sopenharmony_ci	};
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci	const struct uprobe_xol_ops	*ops;
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci	union {
348c2ecf20Sopenharmony_ci		struct {
358c2ecf20Sopenharmony_ci			s32	offs;
368c2ecf20Sopenharmony_ci			u8	ilen;
378c2ecf20Sopenharmony_ci			u8	opc1;
388c2ecf20Sopenharmony_ci		}			branch;
398c2ecf20Sopenharmony_ci		struct {
408c2ecf20Sopenharmony_ci			u8	fixups;
418c2ecf20Sopenharmony_ci			u8	ilen;
428c2ecf20Sopenharmony_ci		} 			defparam;
438c2ecf20Sopenharmony_ci		struct {
448c2ecf20Sopenharmony_ci			u8	reg_offset;	/* to the start of pt_regs */
458c2ecf20Sopenharmony_ci			u8	ilen;
468c2ecf20Sopenharmony_ci		}			push;
478c2ecf20Sopenharmony_ci	};
488c2ecf20Sopenharmony_ci};
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_cistruct arch_uprobe_task {
518c2ecf20Sopenharmony_ci#ifdef CONFIG_X86_64
528c2ecf20Sopenharmony_ci	unsigned long			saved_scratch_register;
538c2ecf20Sopenharmony_ci#endif
548c2ecf20Sopenharmony_ci	unsigned int			saved_trap_nr;
558c2ecf20Sopenharmony_ci	unsigned int			saved_tf;
568c2ecf20Sopenharmony_ci};
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci#endif	/* _ASM_UPROBES_H */
59