19807f75955ea7f1877981056755284481873115cDavid Howells/* 29807f75955ea7f1877981056755284481873115cDavid Howells * S390 version 39807f75955ea7f1877981056755284481873115cDavid Howells * Copyright IBM Corp. 1999, 2000 49807f75955ea7f1877981056755284481873115cDavid Howells * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) 59807f75955ea7f1877981056755284481873115cDavid Howells */ 69807f75955ea7f1877981056755284481873115cDavid Howells 79807f75955ea7f1877981056755284481873115cDavid Howells#ifndef _UAPI_S390_PTRACE_H 89807f75955ea7f1877981056755284481873115cDavid Howells#define _UAPI_S390_PTRACE_H 99807f75955ea7f1877981056755284481873115cDavid Howells 109807f75955ea7f1877981056755284481873115cDavid Howells/* 119807f75955ea7f1877981056755284481873115cDavid Howells * Offsets in the user_regs_struct. They are used for the ptrace 129807f75955ea7f1877981056755284481873115cDavid Howells * system call and in entry.S 139807f75955ea7f1877981056755284481873115cDavid Howells */ 149807f75955ea7f1877981056755284481873115cDavid Howells#ifndef __s390x__ 159807f75955ea7f1877981056755284481873115cDavid Howells 169807f75955ea7f1877981056755284481873115cDavid Howells#define PT_PSWMASK 0x00 179807f75955ea7f1877981056755284481873115cDavid Howells#define PT_PSWADDR 0x04 189807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR0 0x08 199807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR1 0x0C 209807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR2 0x10 219807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR3 0x14 229807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR4 0x18 239807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR5 0x1C 249807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR6 0x20 259807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR7 0x24 269807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR8 0x28 279807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR9 0x2C 289807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR10 0x30 299807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR11 0x34 309807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR12 0x38 319807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR13 0x3C 329807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR14 0x40 339807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR15 0x44 349807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR0 0x48 359807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR1 0x4C 369807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR2 0x50 379807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR3 0x54 389807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR4 0x58 399807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR5 0x5C 409807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR6 0x60 419807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR7 0x64 429807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR8 0x68 439807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR9 0x6C 449807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR10 0x70 459807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR11 0x74 469807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR12 0x78 479807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR13 0x7C 489807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR14 0x80 499807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR15 0x84 509807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ORIGGPR2 0x88 519807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPC 0x90 529807f75955ea7f1877981056755284481873115cDavid Howells/* 539807f75955ea7f1877981056755284481873115cDavid Howells * A nasty fact of life that the ptrace api 549807f75955ea7f1877981056755284481873115cDavid Howells * only supports passing of longs. 559807f75955ea7f1877981056755284481873115cDavid Howells */ 569807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR0_HI 0x98 579807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR0_LO 0x9C 589807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR1_HI 0xA0 599807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR1_LO 0xA4 609807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR2_HI 0xA8 619807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR2_LO 0xAC 629807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR3_HI 0xB0 639807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR3_LO 0xB4 649807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR4_HI 0xB8 659807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR4_LO 0xBC 669807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR5_HI 0xC0 679807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR5_LO 0xC4 689807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR6_HI 0xC8 699807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR6_LO 0xCC 709807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR7_HI 0xD0 719807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR7_LO 0xD4 729807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR8_HI 0xD8 739807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR8_LO 0XDC 749807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR9_HI 0xE0 759807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR9_LO 0xE4 769807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR10_HI 0xE8 779807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR10_LO 0xEC 789807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR11_HI 0xF0 799807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR11_LO 0xF4 809807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR12_HI 0xF8 819807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR12_LO 0xFC 829807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR13_HI 0x100 839807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR13_LO 0x104 849807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR14_HI 0x108 859807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR14_LO 0x10C 869807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR15_HI 0x110 879807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR15_LO 0x114 889807f75955ea7f1877981056755284481873115cDavid Howells#define PT_CR_9 0x118 899807f75955ea7f1877981056755284481873115cDavid Howells#define PT_CR_10 0x11C 909807f75955ea7f1877981056755284481873115cDavid Howells#define PT_CR_11 0x120 919807f75955ea7f1877981056755284481873115cDavid Howells#define PT_IEEE_IP 0x13C 929807f75955ea7f1877981056755284481873115cDavid Howells#define PT_LASTOFF PT_IEEE_IP 939807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ENDREGS 0x140-1 949807f75955ea7f1877981056755284481873115cDavid Howells 959807f75955ea7f1877981056755284481873115cDavid Howells#define GPR_SIZE 4 969807f75955ea7f1877981056755284481873115cDavid Howells#define CR_SIZE 4 979807f75955ea7f1877981056755284481873115cDavid Howells 989807f75955ea7f1877981056755284481873115cDavid Howells#define STACK_FRAME_OVERHEAD 96 /* size of minimum stack frame */ 999807f75955ea7f1877981056755284481873115cDavid Howells 1009807f75955ea7f1877981056755284481873115cDavid Howells#else /* __s390x__ */ 1019807f75955ea7f1877981056755284481873115cDavid Howells 1029807f75955ea7f1877981056755284481873115cDavid Howells#define PT_PSWMASK 0x00 1039807f75955ea7f1877981056755284481873115cDavid Howells#define PT_PSWADDR 0x08 1049807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR0 0x10 1059807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR1 0x18 1069807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR2 0x20 1079807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR3 0x28 1089807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR4 0x30 1099807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR5 0x38 1109807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR6 0x40 1119807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR7 0x48 1129807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR8 0x50 1139807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR9 0x58 1149807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR10 0x60 1159807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR11 0x68 1169807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR12 0x70 1179807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR13 0x78 1189807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR14 0x80 1199807f75955ea7f1877981056755284481873115cDavid Howells#define PT_GPR15 0x88 1209807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR0 0x90 1219807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR1 0x94 1229807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR2 0x98 1239807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR3 0x9C 1249807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR4 0xA0 1259807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR5 0xA4 1269807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR6 0xA8 1279807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR7 0xAC 1289807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR8 0xB0 1299807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR9 0xB4 1309807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR10 0xB8 1319807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR11 0xBC 1329807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR12 0xC0 1339807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR13 0xC4 1349807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR14 0xC8 1359807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ACR15 0xCC 1369807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ORIGGPR2 0xD0 1379807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPC 0xD8 1389807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR0 0xE0 1399807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR1 0xE8 1409807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR2 0xF0 1419807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR3 0xF8 1429807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR4 0x100 1439807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR5 0x108 1449807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR6 0x110 1459807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR7 0x118 1469807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR8 0x120 1479807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR9 0x128 1489807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR10 0x130 1499807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR11 0x138 1509807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR12 0x140 1519807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR13 0x148 1529807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR14 0x150 1539807f75955ea7f1877981056755284481873115cDavid Howells#define PT_FPR15 0x158 1549807f75955ea7f1877981056755284481873115cDavid Howells#define PT_CR_9 0x160 1559807f75955ea7f1877981056755284481873115cDavid Howells#define PT_CR_10 0x168 1569807f75955ea7f1877981056755284481873115cDavid Howells#define PT_CR_11 0x170 1579807f75955ea7f1877981056755284481873115cDavid Howells#define PT_IEEE_IP 0x1A8 1589807f75955ea7f1877981056755284481873115cDavid Howells#define PT_LASTOFF PT_IEEE_IP 1599807f75955ea7f1877981056755284481873115cDavid Howells#define PT_ENDREGS 0x1B0-1 1609807f75955ea7f1877981056755284481873115cDavid Howells 1619807f75955ea7f1877981056755284481873115cDavid Howells#define GPR_SIZE 8 1629807f75955ea7f1877981056755284481873115cDavid Howells#define CR_SIZE 8 1639807f75955ea7f1877981056755284481873115cDavid Howells 1649807f75955ea7f1877981056755284481873115cDavid Howells#define STACK_FRAME_OVERHEAD 160 /* size of minimum stack frame */ 1659807f75955ea7f1877981056755284481873115cDavid Howells 1669807f75955ea7f1877981056755284481873115cDavid Howells#endif /* __s390x__ */ 1679807f75955ea7f1877981056755284481873115cDavid Howells 1689807f75955ea7f1877981056755284481873115cDavid Howells#define NUM_GPRS 16 1699807f75955ea7f1877981056755284481873115cDavid Howells#define NUM_FPRS 16 1709807f75955ea7f1877981056755284481873115cDavid Howells#define NUM_CRS 16 1719807f75955ea7f1877981056755284481873115cDavid Howells#define NUM_ACRS 16 1729807f75955ea7f1877981056755284481873115cDavid Howells 1739807f75955ea7f1877981056755284481873115cDavid Howells#define NUM_CR_WORDS 3 1749807f75955ea7f1877981056755284481873115cDavid Howells 1759807f75955ea7f1877981056755284481873115cDavid Howells#define FPR_SIZE 8 1769807f75955ea7f1877981056755284481873115cDavid Howells#define FPC_SIZE 4 1779807f75955ea7f1877981056755284481873115cDavid Howells#define FPC_PAD_SIZE 4 /* gcc insists on aligning the fpregs */ 1789807f75955ea7f1877981056755284481873115cDavid Howells#define ACR_SIZE 4 1799807f75955ea7f1877981056755284481873115cDavid Howells 1809807f75955ea7f1877981056755284481873115cDavid Howells 1819807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_OLDSETOPTIONS 21 1829807f75955ea7f1877981056755284481873115cDavid Howells 1839807f75955ea7f1877981056755284481873115cDavid Howells#ifndef __ASSEMBLY__ 1849807f75955ea7f1877981056755284481873115cDavid Howells#include <linux/stddef.h> 1859807f75955ea7f1877981056755284481873115cDavid Howells#include <linux/types.h> 1869807f75955ea7f1877981056755284481873115cDavid Howells 1879807f75955ea7f1877981056755284481873115cDavid Howellstypedef union 1889807f75955ea7f1877981056755284481873115cDavid Howells{ 1899807f75955ea7f1877981056755284481873115cDavid Howells float f; 1909807f75955ea7f1877981056755284481873115cDavid Howells double d; 1919807f75955ea7f1877981056755284481873115cDavid Howells __u64 ui; 1929807f75955ea7f1877981056755284481873115cDavid Howells struct 1939807f75955ea7f1877981056755284481873115cDavid Howells { 1949807f75955ea7f1877981056755284481873115cDavid Howells __u32 hi; 1959807f75955ea7f1877981056755284481873115cDavid Howells __u32 lo; 1969807f75955ea7f1877981056755284481873115cDavid Howells } fp; 1979807f75955ea7f1877981056755284481873115cDavid Howells} freg_t; 1989807f75955ea7f1877981056755284481873115cDavid Howells 1999807f75955ea7f1877981056755284481873115cDavid Howellstypedef struct 2009807f75955ea7f1877981056755284481873115cDavid Howells{ 2019807f75955ea7f1877981056755284481873115cDavid Howells __u32 fpc; 2024725c86055f5bbdcdfe47199c0715881893a2c79Martin Schwidefsky __u32 pad; 2039807f75955ea7f1877981056755284481873115cDavid Howells freg_t fprs[NUM_FPRS]; 2049807f75955ea7f1877981056755284481873115cDavid Howells} s390_fp_regs; 2059807f75955ea7f1877981056755284481873115cDavid Howells 2069807f75955ea7f1877981056755284481873115cDavid Howells#define FPC_EXCEPTION_MASK 0xF8000000 2079807f75955ea7f1877981056755284481873115cDavid Howells#define FPC_FLAGS_MASK 0x00F80000 2089807f75955ea7f1877981056755284481873115cDavid Howells#define FPC_DXC_MASK 0x0000FF00 2099807f75955ea7f1877981056755284481873115cDavid Howells#define FPC_RM_MASK 0x00000003 2109807f75955ea7f1877981056755284481873115cDavid Howells 2119807f75955ea7f1877981056755284481873115cDavid Howells/* this typedef defines how a Program Status Word looks like */ 2129807f75955ea7f1877981056755284481873115cDavid Howellstypedef struct 2139807f75955ea7f1877981056755284481873115cDavid Howells{ 2149807f75955ea7f1877981056755284481873115cDavid Howells unsigned long mask; 2159807f75955ea7f1877981056755284481873115cDavid Howells unsigned long addr; 2169807f75955ea7f1877981056755284481873115cDavid Howells} __attribute__ ((aligned(8))) psw_t; 2179807f75955ea7f1877981056755284481873115cDavid Howells 2189807f75955ea7f1877981056755284481873115cDavid Howells#ifndef __s390x__ 2199807f75955ea7f1877981056755284481873115cDavid Howells 2209807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_PER 0x40000000UL 2219807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_DAT 0x04000000UL 2229807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_IO 0x02000000UL 2239807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_EXT 0x01000000UL 2249807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_KEY 0x00F00000UL 2259807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_BASE 0x00080000UL /* always one */ 2269807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_MCHECK 0x00040000UL 2279807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_WAIT 0x00020000UL 2289807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_PSTATE 0x00010000UL 2299807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_ASC 0x0000C000UL 2309807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_CC 0x00003000UL 2319807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_PM 0x00000F00UL 2329807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_RI 0x00000000UL 2339807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_EA 0x00000000UL 2349807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_BA 0x00000000UL 2359807f75955ea7f1877981056755284481873115cDavid Howells 236fa968ee215c0ca91e4a9c3a69ac2405aae6e5d2fMartin Schwidefsky#define PSW_MASK_USER 0x0000FF00UL 2379807f75955ea7f1877981056755284481873115cDavid Howells 2389807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_ADDR_AMODE 0x80000000UL 2399807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_ADDR_INSN 0x7FFFFFFFUL 2409807f75955ea7f1877981056755284481873115cDavid Howells 2419807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_DEFAULT_KEY (((unsigned long) PAGE_DEFAULT_ACC) << 20) 2429807f75955ea7f1877981056755284481873115cDavid Howells 2439807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_ASC_PRIMARY 0x00000000UL 2449807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_ASC_ACCREG 0x00004000UL 2459807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_ASC_SECONDARY 0x00008000UL 2469807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_ASC_HOME 0x0000C000UL 2479807f75955ea7f1877981056755284481873115cDavid Howells 2489807f75955ea7f1877981056755284481873115cDavid Howells#else /* __s390x__ */ 2499807f75955ea7f1877981056755284481873115cDavid Howells 2509807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_PER 0x4000000000000000UL 2519807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_DAT 0x0400000000000000UL 2529807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_IO 0x0200000000000000UL 2539807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_EXT 0x0100000000000000UL 2549807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_BASE 0x0000000000000000UL 2559807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_KEY 0x00F0000000000000UL 2569807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_MCHECK 0x0004000000000000UL 2579807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_WAIT 0x0002000000000000UL 2589807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_PSTATE 0x0001000000000000UL 2599807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_ASC 0x0000C00000000000UL 2609807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_CC 0x0000300000000000UL 2619807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_PM 0x00000F0000000000UL 2629807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_RI 0x0000008000000000UL 2639807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_EA 0x0000000100000000UL 2649807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_MASK_BA 0x0000000080000000UL 2659807f75955ea7f1877981056755284481873115cDavid Howells 2665ebf250dabbae83ad875f0dda5a108503cf78f3bHeiko Carstens#define PSW_MASK_USER 0x0000FF0180000000UL 2679807f75955ea7f1877981056755284481873115cDavid Howells 2689807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_ADDR_AMODE 0x0000000000000000UL 2699807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_ADDR_INSN 0xFFFFFFFFFFFFFFFFUL 2709807f75955ea7f1877981056755284481873115cDavid Howells 2719807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_DEFAULT_KEY (((unsigned long) PAGE_DEFAULT_ACC) << 52) 2729807f75955ea7f1877981056755284481873115cDavid Howells 2739807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_ASC_PRIMARY 0x0000000000000000UL 2749807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_ASC_ACCREG 0x0000400000000000UL 2759807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_ASC_SECONDARY 0x0000800000000000UL 2769807f75955ea7f1877981056755284481873115cDavid Howells#define PSW_ASC_HOME 0x0000C00000000000UL 2779807f75955ea7f1877981056755284481873115cDavid Howells 2789807f75955ea7f1877981056755284481873115cDavid Howells#endif /* __s390x__ */ 2799807f75955ea7f1877981056755284481873115cDavid Howells 2809807f75955ea7f1877981056755284481873115cDavid Howells 2819807f75955ea7f1877981056755284481873115cDavid Howells/* 2829807f75955ea7f1877981056755284481873115cDavid Howells * The s390_regs structure is used to define the elf_gregset_t. 2839807f75955ea7f1877981056755284481873115cDavid Howells */ 2849807f75955ea7f1877981056755284481873115cDavid Howellstypedef struct 2859807f75955ea7f1877981056755284481873115cDavid Howells{ 2869807f75955ea7f1877981056755284481873115cDavid Howells psw_t psw; 2879807f75955ea7f1877981056755284481873115cDavid Howells unsigned long gprs[NUM_GPRS]; 2889807f75955ea7f1877981056755284481873115cDavid Howells unsigned int acrs[NUM_ACRS]; 2899807f75955ea7f1877981056755284481873115cDavid Howells unsigned long orig_gpr2; 2909807f75955ea7f1877981056755284481873115cDavid Howells} s390_regs; 2919807f75955ea7f1877981056755284481873115cDavid Howells 2929807f75955ea7f1877981056755284481873115cDavid Howells/* 2939807f75955ea7f1877981056755284481873115cDavid Howells * Now for the user space program event recording (trace) definitions. 2949807f75955ea7f1877981056755284481873115cDavid Howells * The following structures are used only for the ptrace interface, don't 2959807f75955ea7f1877981056755284481873115cDavid Howells * touch or even look at it if you don't want to modify the user-space 2969807f75955ea7f1877981056755284481873115cDavid Howells * ptrace interface. In particular stay away from it for in-kernel PER. 2979807f75955ea7f1877981056755284481873115cDavid Howells */ 2989807f75955ea7f1877981056755284481873115cDavid Howellstypedef struct 2999807f75955ea7f1877981056755284481873115cDavid Howells{ 3009807f75955ea7f1877981056755284481873115cDavid Howells unsigned long cr[NUM_CR_WORDS]; 3019807f75955ea7f1877981056755284481873115cDavid Howells} per_cr_words; 3029807f75955ea7f1877981056755284481873115cDavid Howells 3039807f75955ea7f1877981056755284481873115cDavid Howells#define PER_EM_MASK 0xE8000000UL 3049807f75955ea7f1877981056755284481873115cDavid Howells 3059807f75955ea7f1877981056755284481873115cDavid Howellstypedef struct 3069807f75955ea7f1877981056755284481873115cDavid Howells{ 3079807f75955ea7f1877981056755284481873115cDavid Howells#ifdef __s390x__ 3089807f75955ea7f1877981056755284481873115cDavid Howells unsigned : 32; 3099807f75955ea7f1877981056755284481873115cDavid Howells#endif /* __s390x__ */ 3109807f75955ea7f1877981056755284481873115cDavid Howells unsigned em_branching : 1; 3119807f75955ea7f1877981056755284481873115cDavid Howells unsigned em_instruction_fetch : 1; 3129807f75955ea7f1877981056755284481873115cDavid Howells /* 3139807f75955ea7f1877981056755284481873115cDavid Howells * Switching on storage alteration automatically fixes 3149807f75955ea7f1877981056755284481873115cDavid Howells * the storage alteration event bit in the users std. 3159807f75955ea7f1877981056755284481873115cDavid Howells */ 3169807f75955ea7f1877981056755284481873115cDavid Howells unsigned em_storage_alteration : 1; 3179807f75955ea7f1877981056755284481873115cDavid Howells unsigned em_gpr_alt_unused : 1; 3189807f75955ea7f1877981056755284481873115cDavid Howells unsigned em_store_real_address : 1; 3199807f75955ea7f1877981056755284481873115cDavid Howells unsigned : 3; 3209807f75955ea7f1877981056755284481873115cDavid Howells unsigned branch_addr_ctl : 1; 3219807f75955ea7f1877981056755284481873115cDavid Howells unsigned : 1; 3229807f75955ea7f1877981056755284481873115cDavid Howells unsigned storage_alt_space_ctl : 1; 3239807f75955ea7f1877981056755284481873115cDavid Howells unsigned : 21; 3249807f75955ea7f1877981056755284481873115cDavid Howells unsigned long starting_addr; 3259807f75955ea7f1877981056755284481873115cDavid Howells unsigned long ending_addr; 3269807f75955ea7f1877981056755284481873115cDavid Howells} per_cr_bits; 3279807f75955ea7f1877981056755284481873115cDavid Howells 3289807f75955ea7f1877981056755284481873115cDavid Howellstypedef struct 3299807f75955ea7f1877981056755284481873115cDavid Howells{ 3309807f75955ea7f1877981056755284481873115cDavid Howells unsigned short perc_atmid; 3319807f75955ea7f1877981056755284481873115cDavid Howells unsigned long address; 3329807f75955ea7f1877981056755284481873115cDavid Howells unsigned char access_id; 3339807f75955ea7f1877981056755284481873115cDavid Howells} per_lowcore_words; 3349807f75955ea7f1877981056755284481873115cDavid Howells 3359807f75955ea7f1877981056755284481873115cDavid Howellstypedef struct 3369807f75955ea7f1877981056755284481873115cDavid Howells{ 3379807f75955ea7f1877981056755284481873115cDavid Howells unsigned perc_branching : 1; 3389807f75955ea7f1877981056755284481873115cDavid Howells unsigned perc_instruction_fetch : 1; 3399807f75955ea7f1877981056755284481873115cDavid Howells unsigned perc_storage_alteration : 1; 3409807f75955ea7f1877981056755284481873115cDavid Howells unsigned perc_gpr_alt_unused : 1; 3419807f75955ea7f1877981056755284481873115cDavid Howells unsigned perc_store_real_address : 1; 3429807f75955ea7f1877981056755284481873115cDavid Howells unsigned : 3; 3439807f75955ea7f1877981056755284481873115cDavid Howells unsigned atmid_psw_bit_31 : 1; 3449807f75955ea7f1877981056755284481873115cDavid Howells unsigned atmid_validity_bit : 1; 3459807f75955ea7f1877981056755284481873115cDavid Howells unsigned atmid_psw_bit_32 : 1; 3469807f75955ea7f1877981056755284481873115cDavid Howells unsigned atmid_psw_bit_5 : 1; 3479807f75955ea7f1877981056755284481873115cDavid Howells unsigned atmid_psw_bit_16 : 1; 3489807f75955ea7f1877981056755284481873115cDavid Howells unsigned atmid_psw_bit_17 : 1; 3499807f75955ea7f1877981056755284481873115cDavid Howells unsigned si : 2; 3509807f75955ea7f1877981056755284481873115cDavid Howells unsigned long address; 3519807f75955ea7f1877981056755284481873115cDavid Howells unsigned : 4; 3529807f75955ea7f1877981056755284481873115cDavid Howells unsigned access_id : 4; 3539807f75955ea7f1877981056755284481873115cDavid Howells} per_lowcore_bits; 3549807f75955ea7f1877981056755284481873115cDavid Howells 3559807f75955ea7f1877981056755284481873115cDavid Howellstypedef struct 3569807f75955ea7f1877981056755284481873115cDavid Howells{ 3579807f75955ea7f1877981056755284481873115cDavid Howells union { 3589807f75955ea7f1877981056755284481873115cDavid Howells per_cr_words words; 3599807f75955ea7f1877981056755284481873115cDavid Howells per_cr_bits bits; 3609807f75955ea7f1877981056755284481873115cDavid Howells } control_regs; 3619807f75955ea7f1877981056755284481873115cDavid Howells /* 3629807f75955ea7f1877981056755284481873115cDavid Howells * Use these flags instead of setting em_instruction_fetch 3639807f75955ea7f1877981056755284481873115cDavid Howells * directly they are used so that single stepping can be 3649807f75955ea7f1877981056755284481873115cDavid Howells * switched on & off while not affecting other tracing 3659807f75955ea7f1877981056755284481873115cDavid Howells */ 3669807f75955ea7f1877981056755284481873115cDavid Howells unsigned single_step : 1; 3679807f75955ea7f1877981056755284481873115cDavid Howells unsigned instruction_fetch : 1; 3689807f75955ea7f1877981056755284481873115cDavid Howells unsigned : 30; 3699807f75955ea7f1877981056755284481873115cDavid Howells /* 3709807f75955ea7f1877981056755284481873115cDavid Howells * These addresses are copied into cr10 & cr11 if single 3719807f75955ea7f1877981056755284481873115cDavid Howells * stepping is switched off 3729807f75955ea7f1877981056755284481873115cDavid Howells */ 3739807f75955ea7f1877981056755284481873115cDavid Howells unsigned long starting_addr; 3749807f75955ea7f1877981056755284481873115cDavid Howells unsigned long ending_addr; 3759807f75955ea7f1877981056755284481873115cDavid Howells union { 3769807f75955ea7f1877981056755284481873115cDavid Howells per_lowcore_words words; 3779807f75955ea7f1877981056755284481873115cDavid Howells per_lowcore_bits bits; 3789807f75955ea7f1877981056755284481873115cDavid Howells } lowcore; 3799807f75955ea7f1877981056755284481873115cDavid Howells} per_struct; 3809807f75955ea7f1877981056755284481873115cDavid Howells 3819807f75955ea7f1877981056755284481873115cDavid Howellstypedef struct 3829807f75955ea7f1877981056755284481873115cDavid Howells{ 3839807f75955ea7f1877981056755284481873115cDavid Howells unsigned int len; 3849807f75955ea7f1877981056755284481873115cDavid Howells unsigned long kernel_addr; 3859807f75955ea7f1877981056755284481873115cDavid Howells unsigned long process_addr; 3869807f75955ea7f1877981056755284481873115cDavid Howells} ptrace_area; 3879807f75955ea7f1877981056755284481873115cDavid Howells 3889807f75955ea7f1877981056755284481873115cDavid Howells/* 3899807f75955ea7f1877981056755284481873115cDavid Howells * S/390 specific non posix ptrace requests. I chose unusual values so 3909807f75955ea7f1877981056755284481873115cDavid Howells * they are unlikely to clash with future ptrace definitions. 3919807f75955ea7f1877981056755284481873115cDavid Howells */ 3929807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_PEEKUSR_AREA 0x5000 3939807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_POKEUSR_AREA 0x5001 3949807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_PEEKTEXT_AREA 0x5002 3959807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_PEEKDATA_AREA 0x5003 3969807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_POKETEXT_AREA 0x5004 3979807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_POKEDATA_AREA 0x5005 3989807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_GET_LAST_BREAK 0x5006 3999807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_PEEK_SYSTEM_CALL 0x5007 4009807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_POKE_SYSTEM_CALL 0x5008 4019807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_ENABLE_TE 0x5009 4029807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_DISABLE_TE 0x5010 40364597f9dae1850e0360ae2e9b5485d4b5d1fdf4cMichael Mueller#define PTRACE_TE_ABORT_RAND 0x5011 4049807f75955ea7f1877981056755284481873115cDavid Howells 4059807f75955ea7f1877981056755284481873115cDavid Howells/* 406818a330c4e1be9c39fa7ca9221e044907d92b4bbMartin Schwidefsky * The numbers chosen here are somewhat arbitrary but absolutely MUST 407818a330c4e1be9c39fa7ca9221e044907d92b4bbMartin Schwidefsky * not overlap with any of the number assigned in <linux/ptrace.h>. 408818a330c4e1be9c39fa7ca9221e044907d92b4bbMartin Schwidefsky */ 409818a330c4e1be9c39fa7ca9221e044907d92b4bbMartin Schwidefsky#define PTRACE_SINGLEBLOCK 12 /* resume execution until next branch */ 410818a330c4e1be9c39fa7ca9221e044907d92b4bbMartin Schwidefsky 411818a330c4e1be9c39fa7ca9221e044907d92b4bbMartin Schwidefsky/* 4129807f75955ea7f1877981056755284481873115cDavid Howells * PT_PROT definition is loosely based on hppa bsd definition in 4139807f75955ea7f1877981056755284481873115cDavid Howells * gdb/hppab-nat.c 4149807f75955ea7f1877981056755284481873115cDavid Howells */ 4159807f75955ea7f1877981056755284481873115cDavid Howells#define PTRACE_PROT 21 4169807f75955ea7f1877981056755284481873115cDavid Howells 4179807f75955ea7f1877981056755284481873115cDavid Howellstypedef enum 4189807f75955ea7f1877981056755284481873115cDavid Howells{ 4199807f75955ea7f1877981056755284481873115cDavid Howells ptprot_set_access_watchpoint, 4209807f75955ea7f1877981056755284481873115cDavid Howells ptprot_set_write_watchpoint, 4219807f75955ea7f1877981056755284481873115cDavid Howells ptprot_disable_watchpoint 4229807f75955ea7f1877981056755284481873115cDavid Howells} ptprot_flags; 4239807f75955ea7f1877981056755284481873115cDavid Howells 4249807f75955ea7f1877981056755284481873115cDavid Howellstypedef struct 4259807f75955ea7f1877981056755284481873115cDavid Howells{ 4269807f75955ea7f1877981056755284481873115cDavid Howells unsigned long lowaddr; 4279807f75955ea7f1877981056755284481873115cDavid Howells unsigned long hiaddr; 4289807f75955ea7f1877981056755284481873115cDavid Howells ptprot_flags prot; 4299807f75955ea7f1877981056755284481873115cDavid Howells} ptprot_area; 4309807f75955ea7f1877981056755284481873115cDavid Howells 4319807f75955ea7f1877981056755284481873115cDavid Howells/* Sequence of bytes for breakpoint illegal instruction. */ 4329807f75955ea7f1877981056755284481873115cDavid Howells#define S390_BREAKPOINT {0x0,0x1} 4339807f75955ea7f1877981056755284481873115cDavid Howells#define S390_BREAKPOINT_U16 ((__u16)0x0001) 4349807f75955ea7f1877981056755284481873115cDavid Howells#define S390_SYSCALL_OPCODE ((__u16)0x0a00) 4359807f75955ea7f1877981056755284481873115cDavid Howells#define S390_SYSCALL_SIZE 2 4369807f75955ea7f1877981056755284481873115cDavid Howells 4379807f75955ea7f1877981056755284481873115cDavid Howells/* 4389807f75955ea7f1877981056755284481873115cDavid Howells * The user_regs_struct defines the way the user registers are 4399807f75955ea7f1877981056755284481873115cDavid Howells * store on the stack for signal handling. 4409807f75955ea7f1877981056755284481873115cDavid Howells */ 4419807f75955ea7f1877981056755284481873115cDavid Howellsstruct user_regs_struct 4429807f75955ea7f1877981056755284481873115cDavid Howells{ 4439807f75955ea7f1877981056755284481873115cDavid Howells psw_t psw; 4449807f75955ea7f1877981056755284481873115cDavid Howells unsigned long gprs[NUM_GPRS]; 4459807f75955ea7f1877981056755284481873115cDavid Howells unsigned int acrs[NUM_ACRS]; 4469807f75955ea7f1877981056755284481873115cDavid Howells unsigned long orig_gpr2; 4479807f75955ea7f1877981056755284481873115cDavid Howells s390_fp_regs fp_regs; 4489807f75955ea7f1877981056755284481873115cDavid Howells /* 4499807f75955ea7f1877981056755284481873115cDavid Howells * These per registers are in here so that gdb can modify them 4509807f75955ea7f1877981056755284481873115cDavid Howells * itself as there is no "official" ptrace interface for hardware 4519807f75955ea7f1877981056755284481873115cDavid Howells * watchpoints. This is the way intel does it. 4529807f75955ea7f1877981056755284481873115cDavid Howells */ 4539807f75955ea7f1877981056755284481873115cDavid Howells per_struct per_info; 4549807f75955ea7f1877981056755284481873115cDavid Howells unsigned long ieee_instruction_pointer; /* obsolete, always 0 */ 4559807f75955ea7f1877981056755284481873115cDavid Howells}; 4569807f75955ea7f1877981056755284481873115cDavid Howells 4579807f75955ea7f1877981056755284481873115cDavid Howells#endif /* __ASSEMBLY__ */ 4589807f75955ea7f1877981056755284481873115cDavid Howells 4599807f75955ea7f1877981056755284481873115cDavid Howells#endif /* _UAPI_S390_PTRACE_H */ 460