cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ptrace.h (8222B)


      1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2#ifndef _UAPI__SPARC_PTRACE_H
      3#define _UAPI__SPARC_PTRACE_H
      4
      5#if defined(__sparc__) && defined(__arch64__)
      6/* 64 bit sparc */
      7#include <asm/pstate.h>
      8
      9/* This struct defines the way the registers are stored on the
     10 * stack during a system call and basically all traps.
     11 */
     12
     13/* This magic value must have the low 9 bits clear,
     14 * as that is where we encode the %tt value, see below.
     15 */
     16#define PT_REGS_MAGIC 0x57ac6c00
     17
     18#ifndef __ASSEMBLY__
     19
     20#include <linux/types.h>
     21
     22struct pt_regs {
     23	unsigned long u_regs[16]; /* globals and ins */
     24	unsigned long tstate;
     25	unsigned long tpc;
     26	unsigned long tnpc;
     27	unsigned int y;
     28
     29	/* We encode a magic number, PT_REGS_MAGIC, along
     30	 * with the %tt (trap type) register value at trap
     31	 * entry time.  The magic number allows us to identify
     32	 * accurately a trap stack frame in the stack
     33	 * unwinder, and the %tt value allows us to test
     34	 * things like "in a system call" etc. for an arbitray
     35	 * process.
     36	 *
     37	 * The PT_REGS_MAGIC is chosen such that it can be
     38	 * loaded completely using just a sethi instruction.
     39	 */
     40	unsigned int magic;
     41};
     42
     43struct pt_regs32 {
     44	unsigned int psr;
     45	unsigned int pc;
     46	unsigned int npc;
     47	unsigned int y;
     48	unsigned int u_regs[16]; /* globals and ins */
     49};
     50
     51/* A V9 register window */
     52struct reg_window {
     53	unsigned long locals[8];
     54	unsigned long ins[8];
     55};
     56
     57/* A 32-bit register window. */
     58struct reg_window32 {
     59	unsigned int locals[8];
     60	unsigned int ins[8];
     61};
     62
     63/* A V9 Sparc stack frame */
     64struct sparc_stackf {
     65	unsigned long locals[8];
     66        unsigned long ins[6];
     67	struct sparc_stackf *fp;
     68	unsigned long callers_pc;
     69	char *structptr;
     70	unsigned long xargs[6];
     71	unsigned long xxargs[1];
     72};
     73
     74/* A 32-bit Sparc stack frame */
     75struct sparc_stackf32 {
     76	unsigned int locals[8];
     77        unsigned int ins[6];
     78	unsigned int fp;
     79	unsigned int callers_pc;
     80	unsigned int structptr;
     81	unsigned int xargs[6];
     82	unsigned int xxargs[1];
     83};
     84
     85struct sparc_trapf {
     86	unsigned long locals[8];
     87	unsigned long ins[8];
     88	unsigned long _unused;
     89	struct pt_regs *regs;
     90};
     91#endif /* (!__ASSEMBLY__) */
     92#else
     93/* 32 bit sparc */
     94
     95#include <asm/psr.h>
     96
     97/* This struct defines the way the registers are stored on the
     98 * stack during a system call and basically all traps.
     99 */
    100#ifndef __ASSEMBLY__
    101
    102#include <linux/types.h>
    103
    104struct pt_regs {
    105	unsigned long psr;
    106	unsigned long pc;
    107	unsigned long npc;
    108	unsigned long y;
    109	unsigned long u_regs[16]; /* globals and ins */
    110};
    111
    112/* A 32-bit register window. */
    113struct reg_window32 {
    114	unsigned long locals[8];
    115	unsigned long ins[8];
    116};
    117
    118/* A Sparc stack frame */
    119struct sparc_stackf {
    120	unsigned long locals[8];
    121        unsigned long ins[6];
    122	struct sparc_stackf *fp;
    123	unsigned long callers_pc;
    124	char *structptr;
    125	unsigned long xargs[6];
    126	unsigned long xxargs[1];
    127};
    128#endif /* (!__ASSEMBLY__) */
    129
    130#endif /* (defined(__sparc__) && defined(__arch64__))*/
    131
    132#ifndef __ASSEMBLY__
    133
    134#define TRACEREG_SZ	sizeof(struct pt_regs)
    135#define STACKFRAME_SZ	sizeof(struct sparc_stackf)
    136
    137#define TRACEREG32_SZ	sizeof(struct pt_regs32)
    138#define STACKFRAME32_SZ	sizeof(struct sparc_stackf32)
    139
    140#endif /* (!__ASSEMBLY__) */
    141
    142#define UREG_G0        0
    143#define UREG_G1        1
    144#define UREG_G2        2
    145#define UREG_G3        3
    146#define UREG_G4        4
    147#define UREG_G5        5
    148#define UREG_G6        6
    149#define UREG_G7        7
    150#define UREG_I0        8
    151#define UREG_I1        9
    152#define UREG_I2        10
    153#define UREG_I3        11
    154#define UREG_I4        12
    155#define UREG_I5        13
    156#define UREG_I6        14
    157#define UREG_I7        15
    158#define UREG_FP        UREG_I6
    159#define UREG_RETPC     UREG_I7
    160
    161#if defined(__sparc__) && defined(__arch64__)
    162/* 64 bit sparc */
    163
    164#ifndef __ASSEMBLY__
    165
    166
    167#else /* __ASSEMBLY__ */
    168/* For assembly code. */
    169#define TRACEREG_SZ		0xa0
    170#define STACKFRAME_SZ		0xc0
    171
    172#define TRACEREG32_SZ		0x50
    173#define STACKFRAME32_SZ		0x60
    174#endif /* __ASSEMBLY__ */
    175
    176#else /* (defined(__sparc__) && defined(__arch64__)) */
    177
    178/* 32 bit sparc */
    179
    180#ifndef __ASSEMBLY__
    181
    182
    183#else /* (!__ASSEMBLY__) */
    184/* For assembly code. */
    185#define TRACEREG_SZ       0x50
    186#define STACKFRAME_SZ     0x60
    187#endif /* (!__ASSEMBLY__) */
    188
    189#endif /* (defined(__sparc__) && defined(__arch64__)) */
    190
    191
    192/* These are for pt_regs. */
    193#define PT_V9_G0     0x00
    194#define PT_V9_G1     0x08
    195#define PT_V9_G2     0x10
    196#define PT_V9_G3     0x18
    197#define PT_V9_G4     0x20
    198#define PT_V9_G5     0x28
    199#define PT_V9_G6     0x30
    200#define PT_V9_G7     0x38
    201#define PT_V9_I0     0x40
    202#define PT_V9_I1     0x48
    203#define PT_V9_I2     0x50
    204#define PT_V9_I3     0x58
    205#define PT_V9_I4     0x60
    206#define PT_V9_I5     0x68
    207#define PT_V9_I6     0x70
    208#define PT_V9_FP     PT_V9_I6
    209#define PT_V9_I7     0x78
    210#define PT_V9_TSTATE 0x80
    211#define PT_V9_TPC    0x88
    212#define PT_V9_TNPC   0x90
    213#define PT_V9_Y      0x98
    214#define PT_V9_MAGIC  0x9c
    215#define PT_TSTATE	PT_V9_TSTATE
    216#define PT_TPC		PT_V9_TPC
    217#define PT_TNPC		PT_V9_TNPC
    218
    219/* These for pt_regs32. */
    220#define PT_PSR    0x0
    221#define PT_PC     0x4
    222#define PT_NPC    0x8
    223#define PT_Y      0xc
    224#define PT_G0     0x10
    225#define PT_WIM    PT_G0
    226#define PT_G1     0x14
    227#define PT_G2     0x18
    228#define PT_G3     0x1c
    229#define PT_G4     0x20
    230#define PT_G5     0x24
    231#define PT_G6     0x28
    232#define PT_G7     0x2c
    233#define PT_I0     0x30
    234#define PT_I1     0x34
    235#define PT_I2     0x38
    236#define PT_I3     0x3c
    237#define PT_I4     0x40
    238#define PT_I5     0x44
    239#define PT_I6     0x48
    240#define PT_FP     PT_I6
    241#define PT_I7     0x4c
    242
    243/* Reg_window offsets */
    244#define RW_V9_L0     0x00
    245#define RW_V9_L1     0x08
    246#define RW_V9_L2     0x10
    247#define RW_V9_L3     0x18
    248#define RW_V9_L4     0x20
    249#define RW_V9_L5     0x28
    250#define RW_V9_L6     0x30
    251#define RW_V9_L7     0x38
    252#define RW_V9_I0     0x40
    253#define RW_V9_I1     0x48
    254#define RW_V9_I2     0x50
    255#define RW_V9_I3     0x58
    256#define RW_V9_I4     0x60
    257#define RW_V9_I5     0x68
    258#define RW_V9_I6     0x70
    259#define RW_V9_I7     0x78
    260
    261#define RW_L0     0x00
    262#define RW_L1     0x04
    263#define RW_L2     0x08
    264#define RW_L3     0x0c
    265#define RW_L4     0x10
    266#define RW_L5     0x14
    267#define RW_L6     0x18
    268#define RW_L7     0x1c
    269#define RW_I0     0x20
    270#define RW_I1     0x24
    271#define RW_I2     0x28
    272#define RW_I3     0x2c
    273#define RW_I4     0x30
    274#define RW_I5     0x34
    275#define RW_I6     0x38
    276#define RW_I7     0x3c
    277
    278/* Stack_frame offsets */
    279#define SF_V9_L0     0x00
    280#define SF_V9_L1     0x08
    281#define SF_V9_L2     0x10
    282#define SF_V9_L3     0x18
    283#define SF_V9_L4     0x20
    284#define SF_V9_L5     0x28
    285#define SF_V9_L6     0x30
    286#define SF_V9_L7     0x38
    287#define SF_V9_I0     0x40
    288#define SF_V9_I1     0x48
    289#define SF_V9_I2     0x50
    290#define SF_V9_I3     0x58
    291#define SF_V9_I4     0x60
    292#define SF_V9_I5     0x68
    293#define SF_V9_FP     0x70
    294#define SF_V9_PC     0x78
    295#define SF_V9_RETP   0x80
    296#define SF_V9_XARG0  0x88
    297#define SF_V9_XARG1  0x90
    298#define SF_V9_XARG2  0x98
    299#define SF_V9_XARG3  0xa0
    300#define SF_V9_XARG4  0xa8
    301#define SF_V9_XARG5  0xb0
    302#define SF_V9_XXARG  0xb8
    303
    304#define SF_L0     0x00
    305#define SF_L1     0x04
    306#define SF_L2     0x08
    307#define SF_L3     0x0c
    308#define SF_L4     0x10
    309#define SF_L5     0x14
    310#define SF_L6     0x18
    311#define SF_L7     0x1c
    312#define SF_I0     0x20
    313#define SF_I1     0x24
    314#define SF_I2     0x28
    315#define SF_I3     0x2c
    316#define SF_I4     0x30
    317#define SF_I5     0x34
    318#define SF_FP     0x38
    319#define SF_PC     0x3c
    320#define SF_RETP   0x40
    321#define SF_XARG0  0x44
    322#define SF_XARG1  0x48
    323#define SF_XARG2  0x4c
    324#define SF_XARG3  0x50
    325#define SF_XARG4  0x54
    326#define SF_XARG5  0x58
    327#define SF_XXARG  0x5c
    328
    329
    330/* Stuff for the ptrace system call */
    331#define PTRACE_SPARC_DETACH       11
    332#define PTRACE_GETREGS            12
    333#define PTRACE_SETREGS            13
    334#define PTRACE_GETFPREGS          14
    335#define PTRACE_SETFPREGS          15
    336#define PTRACE_READDATA           16
    337#define PTRACE_WRITEDATA          17
    338#define PTRACE_READTEXT           18
    339#define PTRACE_WRITETEXT          19
    340#define PTRACE_GETFPAREGS         20
    341#define PTRACE_SETFPAREGS         21
    342
    343/* There are for debugging 64-bit processes, either from a 32 or 64 bit
    344 * parent.  Thus their complements are for debugging 32-bit processes only.
    345 */
    346
    347#define PTRACE_GETREGS64	  22
    348#define PTRACE_SETREGS64	  23
    349/* PTRACE_SYSCALL is 24 */
    350#define PTRACE_GETFPREGS64	  25
    351#define PTRACE_SETFPREGS64	  26
    352
    353#endif /* _UAPI__SPARC_PTRACE_H */