162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * S390 version 462306a36Sopenharmony_ci * Copyright IBM Corp. 1999, 2000 562306a36Sopenharmony_ci * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef _UAPI_S390_PTRACE_H 962306a36Sopenharmony_ci#define _UAPI_S390_PTRACE_H 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/const.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* 1462306a36Sopenharmony_ci * Offsets in the user_regs_struct. They are used for the ptrace 1562306a36Sopenharmony_ci * system call and in entry.S 1662306a36Sopenharmony_ci */ 1762306a36Sopenharmony_ci#ifndef __s390x__ 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define PT_PSWMASK 0x00 2062306a36Sopenharmony_ci#define PT_PSWADDR 0x04 2162306a36Sopenharmony_ci#define PT_GPR0 0x08 2262306a36Sopenharmony_ci#define PT_GPR1 0x0C 2362306a36Sopenharmony_ci#define PT_GPR2 0x10 2462306a36Sopenharmony_ci#define PT_GPR3 0x14 2562306a36Sopenharmony_ci#define PT_GPR4 0x18 2662306a36Sopenharmony_ci#define PT_GPR5 0x1C 2762306a36Sopenharmony_ci#define PT_GPR6 0x20 2862306a36Sopenharmony_ci#define PT_GPR7 0x24 2962306a36Sopenharmony_ci#define PT_GPR8 0x28 3062306a36Sopenharmony_ci#define PT_GPR9 0x2C 3162306a36Sopenharmony_ci#define PT_GPR10 0x30 3262306a36Sopenharmony_ci#define PT_GPR11 0x34 3362306a36Sopenharmony_ci#define PT_GPR12 0x38 3462306a36Sopenharmony_ci#define PT_GPR13 0x3C 3562306a36Sopenharmony_ci#define PT_GPR14 0x40 3662306a36Sopenharmony_ci#define PT_GPR15 0x44 3762306a36Sopenharmony_ci#define PT_ACR0 0x48 3862306a36Sopenharmony_ci#define PT_ACR1 0x4C 3962306a36Sopenharmony_ci#define PT_ACR2 0x50 4062306a36Sopenharmony_ci#define PT_ACR3 0x54 4162306a36Sopenharmony_ci#define PT_ACR4 0x58 4262306a36Sopenharmony_ci#define PT_ACR5 0x5C 4362306a36Sopenharmony_ci#define PT_ACR6 0x60 4462306a36Sopenharmony_ci#define PT_ACR7 0x64 4562306a36Sopenharmony_ci#define PT_ACR8 0x68 4662306a36Sopenharmony_ci#define PT_ACR9 0x6C 4762306a36Sopenharmony_ci#define PT_ACR10 0x70 4862306a36Sopenharmony_ci#define PT_ACR11 0x74 4962306a36Sopenharmony_ci#define PT_ACR12 0x78 5062306a36Sopenharmony_ci#define PT_ACR13 0x7C 5162306a36Sopenharmony_ci#define PT_ACR14 0x80 5262306a36Sopenharmony_ci#define PT_ACR15 0x84 5362306a36Sopenharmony_ci#define PT_ORIGGPR2 0x88 5462306a36Sopenharmony_ci#define PT_FPC 0x90 5562306a36Sopenharmony_ci/* 5662306a36Sopenharmony_ci * A nasty fact of life that the ptrace api 5762306a36Sopenharmony_ci * only supports passing of longs. 5862306a36Sopenharmony_ci */ 5962306a36Sopenharmony_ci#define PT_FPR0_HI 0x98 6062306a36Sopenharmony_ci#define PT_FPR0_LO 0x9C 6162306a36Sopenharmony_ci#define PT_FPR1_HI 0xA0 6262306a36Sopenharmony_ci#define PT_FPR1_LO 0xA4 6362306a36Sopenharmony_ci#define PT_FPR2_HI 0xA8 6462306a36Sopenharmony_ci#define PT_FPR2_LO 0xAC 6562306a36Sopenharmony_ci#define PT_FPR3_HI 0xB0 6662306a36Sopenharmony_ci#define PT_FPR3_LO 0xB4 6762306a36Sopenharmony_ci#define PT_FPR4_HI 0xB8 6862306a36Sopenharmony_ci#define PT_FPR4_LO 0xBC 6962306a36Sopenharmony_ci#define PT_FPR5_HI 0xC0 7062306a36Sopenharmony_ci#define PT_FPR5_LO 0xC4 7162306a36Sopenharmony_ci#define PT_FPR6_HI 0xC8 7262306a36Sopenharmony_ci#define PT_FPR6_LO 0xCC 7362306a36Sopenharmony_ci#define PT_FPR7_HI 0xD0 7462306a36Sopenharmony_ci#define PT_FPR7_LO 0xD4 7562306a36Sopenharmony_ci#define PT_FPR8_HI 0xD8 7662306a36Sopenharmony_ci#define PT_FPR8_LO 0XDC 7762306a36Sopenharmony_ci#define PT_FPR9_HI 0xE0 7862306a36Sopenharmony_ci#define PT_FPR9_LO 0xE4 7962306a36Sopenharmony_ci#define PT_FPR10_HI 0xE8 8062306a36Sopenharmony_ci#define PT_FPR10_LO 0xEC 8162306a36Sopenharmony_ci#define PT_FPR11_HI 0xF0 8262306a36Sopenharmony_ci#define PT_FPR11_LO 0xF4 8362306a36Sopenharmony_ci#define PT_FPR12_HI 0xF8 8462306a36Sopenharmony_ci#define PT_FPR12_LO 0xFC 8562306a36Sopenharmony_ci#define PT_FPR13_HI 0x100 8662306a36Sopenharmony_ci#define PT_FPR13_LO 0x104 8762306a36Sopenharmony_ci#define PT_FPR14_HI 0x108 8862306a36Sopenharmony_ci#define PT_FPR14_LO 0x10C 8962306a36Sopenharmony_ci#define PT_FPR15_HI 0x110 9062306a36Sopenharmony_ci#define PT_FPR15_LO 0x114 9162306a36Sopenharmony_ci#define PT_CR_9 0x118 9262306a36Sopenharmony_ci#define PT_CR_10 0x11C 9362306a36Sopenharmony_ci#define PT_CR_11 0x120 9462306a36Sopenharmony_ci#define PT_IEEE_IP 0x13C 9562306a36Sopenharmony_ci#define PT_LASTOFF PT_IEEE_IP 9662306a36Sopenharmony_ci#define PT_ENDREGS 0x140-1 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci#define GPR_SIZE 4 9962306a36Sopenharmony_ci#define CR_SIZE 4 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci#define STACK_FRAME_OVERHEAD 96 /* size of minimum stack frame */ 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci#else /* __s390x__ */ 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci#define PT_PSWMASK 0x00 10662306a36Sopenharmony_ci#define PT_PSWADDR 0x08 10762306a36Sopenharmony_ci#define PT_GPR0 0x10 10862306a36Sopenharmony_ci#define PT_GPR1 0x18 10962306a36Sopenharmony_ci#define PT_GPR2 0x20 11062306a36Sopenharmony_ci#define PT_GPR3 0x28 11162306a36Sopenharmony_ci#define PT_GPR4 0x30 11262306a36Sopenharmony_ci#define PT_GPR5 0x38 11362306a36Sopenharmony_ci#define PT_GPR6 0x40 11462306a36Sopenharmony_ci#define PT_GPR7 0x48 11562306a36Sopenharmony_ci#define PT_GPR8 0x50 11662306a36Sopenharmony_ci#define PT_GPR9 0x58 11762306a36Sopenharmony_ci#define PT_GPR10 0x60 11862306a36Sopenharmony_ci#define PT_GPR11 0x68 11962306a36Sopenharmony_ci#define PT_GPR12 0x70 12062306a36Sopenharmony_ci#define PT_GPR13 0x78 12162306a36Sopenharmony_ci#define PT_GPR14 0x80 12262306a36Sopenharmony_ci#define PT_GPR15 0x88 12362306a36Sopenharmony_ci#define PT_ACR0 0x90 12462306a36Sopenharmony_ci#define PT_ACR1 0x94 12562306a36Sopenharmony_ci#define PT_ACR2 0x98 12662306a36Sopenharmony_ci#define PT_ACR3 0x9C 12762306a36Sopenharmony_ci#define PT_ACR4 0xA0 12862306a36Sopenharmony_ci#define PT_ACR5 0xA4 12962306a36Sopenharmony_ci#define PT_ACR6 0xA8 13062306a36Sopenharmony_ci#define PT_ACR7 0xAC 13162306a36Sopenharmony_ci#define PT_ACR8 0xB0 13262306a36Sopenharmony_ci#define PT_ACR9 0xB4 13362306a36Sopenharmony_ci#define PT_ACR10 0xB8 13462306a36Sopenharmony_ci#define PT_ACR11 0xBC 13562306a36Sopenharmony_ci#define PT_ACR12 0xC0 13662306a36Sopenharmony_ci#define PT_ACR13 0xC4 13762306a36Sopenharmony_ci#define PT_ACR14 0xC8 13862306a36Sopenharmony_ci#define PT_ACR15 0xCC 13962306a36Sopenharmony_ci#define PT_ORIGGPR2 0xD0 14062306a36Sopenharmony_ci#define PT_FPC 0xD8 14162306a36Sopenharmony_ci#define PT_FPR0 0xE0 14262306a36Sopenharmony_ci#define PT_FPR1 0xE8 14362306a36Sopenharmony_ci#define PT_FPR2 0xF0 14462306a36Sopenharmony_ci#define PT_FPR3 0xF8 14562306a36Sopenharmony_ci#define PT_FPR4 0x100 14662306a36Sopenharmony_ci#define PT_FPR5 0x108 14762306a36Sopenharmony_ci#define PT_FPR6 0x110 14862306a36Sopenharmony_ci#define PT_FPR7 0x118 14962306a36Sopenharmony_ci#define PT_FPR8 0x120 15062306a36Sopenharmony_ci#define PT_FPR9 0x128 15162306a36Sopenharmony_ci#define PT_FPR10 0x130 15262306a36Sopenharmony_ci#define PT_FPR11 0x138 15362306a36Sopenharmony_ci#define PT_FPR12 0x140 15462306a36Sopenharmony_ci#define PT_FPR13 0x148 15562306a36Sopenharmony_ci#define PT_FPR14 0x150 15662306a36Sopenharmony_ci#define PT_FPR15 0x158 15762306a36Sopenharmony_ci#define PT_CR_9 0x160 15862306a36Sopenharmony_ci#define PT_CR_10 0x168 15962306a36Sopenharmony_ci#define PT_CR_11 0x170 16062306a36Sopenharmony_ci#define PT_IEEE_IP 0x1A8 16162306a36Sopenharmony_ci#define PT_LASTOFF PT_IEEE_IP 16262306a36Sopenharmony_ci#define PT_ENDREGS 0x1B0-1 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci#define GPR_SIZE 8 16562306a36Sopenharmony_ci#define CR_SIZE 8 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci#define STACK_FRAME_OVERHEAD 160 /* size of minimum stack frame */ 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci#endif /* __s390x__ */ 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci#ifndef __s390x__ 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci#define PSW_MASK_PER _AC(0x40000000, UL) 17462306a36Sopenharmony_ci#define PSW_MASK_DAT _AC(0x04000000, UL) 17562306a36Sopenharmony_ci#define PSW_MASK_IO _AC(0x02000000, UL) 17662306a36Sopenharmony_ci#define PSW_MASK_EXT _AC(0x01000000, UL) 17762306a36Sopenharmony_ci#define PSW_MASK_KEY _AC(0x00F00000, UL) 17862306a36Sopenharmony_ci#define PSW_MASK_BASE _AC(0x00080000, UL) /* always one */ 17962306a36Sopenharmony_ci#define PSW_MASK_MCHECK _AC(0x00040000, UL) 18062306a36Sopenharmony_ci#define PSW_MASK_WAIT _AC(0x00020000, UL) 18162306a36Sopenharmony_ci#define PSW_MASK_PSTATE _AC(0x00010000, UL) 18262306a36Sopenharmony_ci#define PSW_MASK_ASC _AC(0x0000C000, UL) 18362306a36Sopenharmony_ci#define PSW_MASK_CC _AC(0x00003000, UL) 18462306a36Sopenharmony_ci#define PSW_MASK_PM _AC(0x00000F00, UL) 18562306a36Sopenharmony_ci#define PSW_MASK_RI _AC(0x00000000, UL) 18662306a36Sopenharmony_ci#define PSW_MASK_EA _AC(0x00000000, UL) 18762306a36Sopenharmony_ci#define PSW_MASK_BA _AC(0x00000000, UL) 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci#define PSW_MASK_USER _AC(0x0000FF00, UL) 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci#define PSW_ADDR_AMODE _AC(0x80000000, UL) 19262306a36Sopenharmony_ci#define PSW_ADDR_INSN _AC(0x7FFFFFFF, UL) 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci#define PSW_ASC_PRIMARY _AC(0x00000000, UL) 19562306a36Sopenharmony_ci#define PSW_ASC_ACCREG _AC(0x00004000, UL) 19662306a36Sopenharmony_ci#define PSW_ASC_SECONDARY _AC(0x00008000, UL) 19762306a36Sopenharmony_ci#define PSW_ASC_HOME _AC(0x0000C000, UL) 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci#else /* __s390x__ */ 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci#define PSW_MASK_PER _AC(0x4000000000000000, UL) 20262306a36Sopenharmony_ci#define PSW_MASK_DAT _AC(0x0400000000000000, UL) 20362306a36Sopenharmony_ci#define PSW_MASK_IO _AC(0x0200000000000000, UL) 20462306a36Sopenharmony_ci#define PSW_MASK_EXT _AC(0x0100000000000000, UL) 20562306a36Sopenharmony_ci#define PSW_MASK_BASE _AC(0x0000000000000000, UL) 20662306a36Sopenharmony_ci#define PSW_MASK_KEY _AC(0x00F0000000000000, UL) 20762306a36Sopenharmony_ci#define PSW_MASK_MCHECK _AC(0x0004000000000000, UL) 20862306a36Sopenharmony_ci#define PSW_MASK_WAIT _AC(0x0002000000000000, UL) 20962306a36Sopenharmony_ci#define PSW_MASK_PSTATE _AC(0x0001000000000000, UL) 21062306a36Sopenharmony_ci#define PSW_MASK_ASC _AC(0x0000C00000000000, UL) 21162306a36Sopenharmony_ci#define PSW_MASK_CC _AC(0x0000300000000000, UL) 21262306a36Sopenharmony_ci#define PSW_MASK_PM _AC(0x00000F0000000000, UL) 21362306a36Sopenharmony_ci#define PSW_MASK_RI _AC(0x0000008000000000, UL) 21462306a36Sopenharmony_ci#define PSW_MASK_EA _AC(0x0000000100000000, UL) 21562306a36Sopenharmony_ci#define PSW_MASK_BA _AC(0x0000000080000000, UL) 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ci#define PSW_MASK_USER _AC(0x0000FF0180000000, UL) 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci#define PSW_ADDR_AMODE _AC(0x0000000000000000, UL) 22062306a36Sopenharmony_ci#define PSW_ADDR_INSN _AC(0xFFFFFFFFFFFFFFFF, UL) 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci#define PSW_ASC_PRIMARY _AC(0x0000000000000000, UL) 22362306a36Sopenharmony_ci#define PSW_ASC_ACCREG _AC(0x0000400000000000, UL) 22462306a36Sopenharmony_ci#define PSW_ASC_SECONDARY _AC(0x0000800000000000, UL) 22562306a36Sopenharmony_ci#define PSW_ASC_HOME _AC(0x0000C00000000000, UL) 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci#endif /* __s390x__ */ 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci#define NUM_GPRS 16 23062306a36Sopenharmony_ci#define NUM_FPRS 16 23162306a36Sopenharmony_ci#define NUM_CRS 16 23262306a36Sopenharmony_ci#define NUM_ACRS 16 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ci#define NUM_CR_WORDS 3 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_ci#define FPR_SIZE 8 23762306a36Sopenharmony_ci#define FPC_SIZE 4 23862306a36Sopenharmony_ci#define FPC_PAD_SIZE 4 /* gcc insists on aligning the fpregs */ 23962306a36Sopenharmony_ci#define ACR_SIZE 4 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ci#define PTRACE_OLDSETOPTIONS 21 24362306a36Sopenharmony_ci#define PTRACE_SYSEMU 31 24462306a36Sopenharmony_ci#define PTRACE_SYSEMU_SINGLESTEP 32 24562306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 24662306a36Sopenharmony_ci#include <linux/stddef.h> 24762306a36Sopenharmony_ci#include <linux/types.h> 24862306a36Sopenharmony_ci 24962306a36Sopenharmony_citypedef union { 25062306a36Sopenharmony_ci float f; 25162306a36Sopenharmony_ci double d; 25262306a36Sopenharmony_ci __u64 ui; 25362306a36Sopenharmony_ci struct 25462306a36Sopenharmony_ci { 25562306a36Sopenharmony_ci __u32 hi; 25662306a36Sopenharmony_ci __u32 lo; 25762306a36Sopenharmony_ci } fp; 25862306a36Sopenharmony_ci} freg_t; 25962306a36Sopenharmony_ci 26062306a36Sopenharmony_citypedef struct { 26162306a36Sopenharmony_ci __u32 fpc; 26262306a36Sopenharmony_ci __u32 pad; 26362306a36Sopenharmony_ci freg_t fprs[NUM_FPRS]; 26462306a36Sopenharmony_ci} s390_fp_regs; 26562306a36Sopenharmony_ci 26662306a36Sopenharmony_ci#define FPC_EXCEPTION_MASK 0xF8000000 26762306a36Sopenharmony_ci#define FPC_FLAGS_MASK 0x00F80000 26862306a36Sopenharmony_ci#define FPC_DXC_MASK 0x0000FF00 26962306a36Sopenharmony_ci#define FPC_RM_MASK 0x00000003 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_ci/* this typedef defines how a Program Status Word looks like */ 27262306a36Sopenharmony_citypedef struct { 27362306a36Sopenharmony_ci unsigned long mask; 27462306a36Sopenharmony_ci unsigned long addr; 27562306a36Sopenharmony_ci} __attribute__ ((aligned(8))) psw_t; 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_ci/* 27862306a36Sopenharmony_ci * The s390_regs structure is used to define the elf_gregset_t. 27962306a36Sopenharmony_ci */ 28062306a36Sopenharmony_citypedef struct { 28162306a36Sopenharmony_ci psw_t psw; 28262306a36Sopenharmony_ci unsigned long gprs[NUM_GPRS]; 28362306a36Sopenharmony_ci unsigned int acrs[NUM_ACRS]; 28462306a36Sopenharmony_ci unsigned long orig_gpr2; 28562306a36Sopenharmony_ci} s390_regs; 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_ci/* 28862306a36Sopenharmony_ci * The user_pt_regs structure exports the beginning of 28962306a36Sopenharmony_ci * the in-kernel pt_regs structure to user space. 29062306a36Sopenharmony_ci */ 29162306a36Sopenharmony_citypedef struct { 29262306a36Sopenharmony_ci unsigned long args[1]; 29362306a36Sopenharmony_ci psw_t psw; 29462306a36Sopenharmony_ci unsigned long gprs[NUM_GPRS]; 29562306a36Sopenharmony_ci} user_pt_regs; 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ci/* 29862306a36Sopenharmony_ci * Now for the user space program event recording (trace) definitions. 29962306a36Sopenharmony_ci * The following structures are used only for the ptrace interface, don't 30062306a36Sopenharmony_ci * touch or even look at it if you don't want to modify the user-space 30162306a36Sopenharmony_ci * ptrace interface. In particular stay away from it for in-kernel PER. 30262306a36Sopenharmony_ci */ 30362306a36Sopenharmony_citypedef struct { 30462306a36Sopenharmony_ci unsigned long cr[NUM_CR_WORDS]; 30562306a36Sopenharmony_ci} per_cr_words; 30662306a36Sopenharmony_ci 30762306a36Sopenharmony_ci#define PER_EM_MASK 0xE8000000UL 30862306a36Sopenharmony_ci 30962306a36Sopenharmony_citypedef struct { 31062306a36Sopenharmony_ci#ifdef __s390x__ 31162306a36Sopenharmony_ci unsigned : 32; 31262306a36Sopenharmony_ci#endif /* __s390x__ */ 31362306a36Sopenharmony_ci unsigned em_branching : 1; 31462306a36Sopenharmony_ci unsigned em_instruction_fetch : 1; 31562306a36Sopenharmony_ci /* 31662306a36Sopenharmony_ci * Switching on storage alteration automatically fixes 31762306a36Sopenharmony_ci * the storage alteration event bit in the users std. 31862306a36Sopenharmony_ci */ 31962306a36Sopenharmony_ci unsigned em_storage_alteration : 1; 32062306a36Sopenharmony_ci unsigned em_gpr_alt_unused : 1; 32162306a36Sopenharmony_ci unsigned em_store_real_address : 1; 32262306a36Sopenharmony_ci unsigned : 3; 32362306a36Sopenharmony_ci unsigned branch_addr_ctl : 1; 32462306a36Sopenharmony_ci unsigned : 1; 32562306a36Sopenharmony_ci unsigned storage_alt_space_ctl : 1; 32662306a36Sopenharmony_ci unsigned : 21; 32762306a36Sopenharmony_ci unsigned long starting_addr; 32862306a36Sopenharmony_ci unsigned long ending_addr; 32962306a36Sopenharmony_ci} per_cr_bits; 33062306a36Sopenharmony_ci 33162306a36Sopenharmony_citypedef struct { 33262306a36Sopenharmony_ci unsigned short perc_atmid; 33362306a36Sopenharmony_ci unsigned long address; 33462306a36Sopenharmony_ci unsigned char access_id; 33562306a36Sopenharmony_ci} per_lowcore_words; 33662306a36Sopenharmony_ci 33762306a36Sopenharmony_citypedef struct { 33862306a36Sopenharmony_ci unsigned perc_branching : 1; 33962306a36Sopenharmony_ci unsigned perc_instruction_fetch : 1; 34062306a36Sopenharmony_ci unsigned perc_storage_alteration : 1; 34162306a36Sopenharmony_ci unsigned perc_gpr_alt_unused : 1; 34262306a36Sopenharmony_ci unsigned perc_store_real_address : 1; 34362306a36Sopenharmony_ci unsigned : 3; 34462306a36Sopenharmony_ci unsigned atmid_psw_bit_31 : 1; 34562306a36Sopenharmony_ci unsigned atmid_validity_bit : 1; 34662306a36Sopenharmony_ci unsigned atmid_psw_bit_32 : 1; 34762306a36Sopenharmony_ci unsigned atmid_psw_bit_5 : 1; 34862306a36Sopenharmony_ci unsigned atmid_psw_bit_16 : 1; 34962306a36Sopenharmony_ci unsigned atmid_psw_bit_17 : 1; 35062306a36Sopenharmony_ci unsigned si : 2; 35162306a36Sopenharmony_ci unsigned long address; 35262306a36Sopenharmony_ci unsigned : 4; 35362306a36Sopenharmony_ci unsigned access_id : 4; 35462306a36Sopenharmony_ci} per_lowcore_bits; 35562306a36Sopenharmony_ci 35662306a36Sopenharmony_citypedef struct { 35762306a36Sopenharmony_ci union { 35862306a36Sopenharmony_ci per_cr_words words; 35962306a36Sopenharmony_ci per_cr_bits bits; 36062306a36Sopenharmony_ci } control_regs; 36162306a36Sopenharmony_ci /* 36262306a36Sopenharmony_ci * The single_step and instruction_fetch bits are obsolete, 36362306a36Sopenharmony_ci * the kernel always sets them to zero. To enable single 36462306a36Sopenharmony_ci * stepping use ptrace(PTRACE_SINGLESTEP) instead. 36562306a36Sopenharmony_ci */ 36662306a36Sopenharmony_ci unsigned single_step : 1; 36762306a36Sopenharmony_ci unsigned instruction_fetch : 1; 36862306a36Sopenharmony_ci unsigned : 30; 36962306a36Sopenharmony_ci /* 37062306a36Sopenharmony_ci * These addresses are copied into cr10 & cr11 if single 37162306a36Sopenharmony_ci * stepping is switched off 37262306a36Sopenharmony_ci */ 37362306a36Sopenharmony_ci unsigned long starting_addr; 37462306a36Sopenharmony_ci unsigned long ending_addr; 37562306a36Sopenharmony_ci union { 37662306a36Sopenharmony_ci per_lowcore_words words; 37762306a36Sopenharmony_ci per_lowcore_bits bits; 37862306a36Sopenharmony_ci } lowcore; 37962306a36Sopenharmony_ci} per_struct; 38062306a36Sopenharmony_ci 38162306a36Sopenharmony_citypedef struct { 38262306a36Sopenharmony_ci unsigned int len; 38362306a36Sopenharmony_ci unsigned long kernel_addr; 38462306a36Sopenharmony_ci unsigned long process_addr; 38562306a36Sopenharmony_ci} ptrace_area; 38662306a36Sopenharmony_ci 38762306a36Sopenharmony_ci/* 38862306a36Sopenharmony_ci * S/390 specific non posix ptrace requests. I chose unusual values so 38962306a36Sopenharmony_ci * they are unlikely to clash with future ptrace definitions. 39062306a36Sopenharmony_ci */ 39162306a36Sopenharmony_ci#define PTRACE_PEEKUSR_AREA 0x5000 39262306a36Sopenharmony_ci#define PTRACE_POKEUSR_AREA 0x5001 39362306a36Sopenharmony_ci#define PTRACE_PEEKTEXT_AREA 0x5002 39462306a36Sopenharmony_ci#define PTRACE_PEEKDATA_AREA 0x5003 39562306a36Sopenharmony_ci#define PTRACE_POKETEXT_AREA 0x5004 39662306a36Sopenharmony_ci#define PTRACE_POKEDATA_AREA 0x5005 39762306a36Sopenharmony_ci#define PTRACE_GET_LAST_BREAK 0x5006 39862306a36Sopenharmony_ci#define PTRACE_PEEK_SYSTEM_CALL 0x5007 39962306a36Sopenharmony_ci#define PTRACE_POKE_SYSTEM_CALL 0x5008 40062306a36Sopenharmony_ci#define PTRACE_ENABLE_TE 0x5009 40162306a36Sopenharmony_ci#define PTRACE_DISABLE_TE 0x5010 40262306a36Sopenharmony_ci#define PTRACE_TE_ABORT_RAND 0x5011 40362306a36Sopenharmony_ci 40462306a36Sopenharmony_ci/* 40562306a36Sopenharmony_ci * The numbers chosen here are somewhat arbitrary but absolutely MUST 40662306a36Sopenharmony_ci * not overlap with any of the number assigned in <linux/ptrace.h>. 40762306a36Sopenharmony_ci */ 40862306a36Sopenharmony_ci#define PTRACE_SINGLEBLOCK 12 /* resume execution until next branch */ 40962306a36Sopenharmony_ci 41062306a36Sopenharmony_ci/* 41162306a36Sopenharmony_ci * PT_PROT definition is loosely based on hppa bsd definition in 41262306a36Sopenharmony_ci * gdb/hppab-nat.c 41362306a36Sopenharmony_ci */ 41462306a36Sopenharmony_ci#define PTRACE_PROT 21 41562306a36Sopenharmony_ci 41662306a36Sopenharmony_citypedef enum { 41762306a36Sopenharmony_ci ptprot_set_access_watchpoint, 41862306a36Sopenharmony_ci ptprot_set_write_watchpoint, 41962306a36Sopenharmony_ci ptprot_disable_watchpoint 42062306a36Sopenharmony_ci} ptprot_flags; 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_citypedef struct { 42362306a36Sopenharmony_ci unsigned long lowaddr; 42462306a36Sopenharmony_ci unsigned long hiaddr; 42562306a36Sopenharmony_ci ptprot_flags prot; 42662306a36Sopenharmony_ci} ptprot_area; 42762306a36Sopenharmony_ci 42862306a36Sopenharmony_ci/* Sequence of bytes for breakpoint illegal instruction. */ 42962306a36Sopenharmony_ci#define S390_BREAKPOINT {0x0,0x1} 43062306a36Sopenharmony_ci#define S390_BREAKPOINT_U16 ((__u16)0x0001) 43162306a36Sopenharmony_ci#define S390_SYSCALL_OPCODE ((__u16)0x0a00) 43262306a36Sopenharmony_ci#define S390_SYSCALL_SIZE 2 43362306a36Sopenharmony_ci 43462306a36Sopenharmony_ci/* 43562306a36Sopenharmony_ci * The user_regs_struct defines the way the user registers are 43662306a36Sopenharmony_ci * store on the stack for signal handling. 43762306a36Sopenharmony_ci */ 43862306a36Sopenharmony_cistruct user_regs_struct { 43962306a36Sopenharmony_ci psw_t psw; 44062306a36Sopenharmony_ci unsigned long gprs[NUM_GPRS]; 44162306a36Sopenharmony_ci unsigned int acrs[NUM_ACRS]; 44262306a36Sopenharmony_ci unsigned long orig_gpr2; 44362306a36Sopenharmony_ci s390_fp_regs fp_regs; 44462306a36Sopenharmony_ci /* 44562306a36Sopenharmony_ci * These per registers are in here so that gdb can modify them 44662306a36Sopenharmony_ci * itself as there is no "official" ptrace interface for hardware 44762306a36Sopenharmony_ci * watchpoints. This is the way intel does it. 44862306a36Sopenharmony_ci */ 44962306a36Sopenharmony_ci per_struct per_info; 45062306a36Sopenharmony_ci unsigned long ieee_instruction_pointer; /* obsolete, always 0 */ 45162306a36Sopenharmony_ci}; 45262306a36Sopenharmony_ci 45362306a36Sopenharmony_ci#endif /* __ASSEMBLY__ */ 45462306a36Sopenharmony_ci 45562306a36Sopenharmony_ci#endif /* _UAPI_S390_PTRACE_H */ 456