1*e5ad95ceSJonas Bonn /* 2*e5ad95ceSJonas Bonn * OpenRISC Linux 3*e5ad95ceSJonas Bonn * 4*e5ad95ceSJonas Bonn * Linux architectural port borrowing liberally from similar works of 5*e5ad95ceSJonas Bonn * others. All original copyrights apply as per the original source 6*e5ad95ceSJonas Bonn * declaration. 7*e5ad95ceSJonas Bonn * 8*e5ad95ceSJonas Bonn * OpenRISC implementation: 9*e5ad95ceSJonas Bonn * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com> 10*e5ad95ceSJonas Bonn * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se> 11*e5ad95ceSJonas Bonn * et al. 12*e5ad95ceSJonas Bonn * 13*e5ad95ceSJonas Bonn * This program is free software; you can redistribute it and/or modify 14*e5ad95ceSJonas Bonn * it under the terms of the GNU General Public License as published by 15*e5ad95ceSJonas Bonn * the Free Software Foundation; either version 2 of the License, or 16*e5ad95ceSJonas Bonn * (at your option) any later version. 17*e5ad95ceSJonas Bonn */ 18*e5ad95ceSJonas Bonn 19*e5ad95ceSJonas Bonn #ifndef __ASM_OPENRISC_PTRACE_H 20*e5ad95ceSJonas Bonn #define __ASM_OPENRISC_PTRACE_H 21*e5ad95ceSJonas Bonn 22*e5ad95ceSJonas Bonn #include <asm/spr_defs.h> 23*e5ad95ceSJonas Bonn 24*e5ad95ceSJonas Bonn #ifndef __ASSEMBLY__ 25*e5ad95ceSJonas Bonn /* 26*e5ad95ceSJonas Bonn * This is the layout of the regset returned by the GETREGSET ptrace call 27*e5ad95ceSJonas Bonn */ 28*e5ad95ceSJonas Bonn struct user_regs_struct { 29*e5ad95ceSJonas Bonn /* GPR R0-R31... */ 30*e5ad95ceSJonas Bonn unsigned long gpr[32]; 31*e5ad95ceSJonas Bonn unsigned long pc; 32*e5ad95ceSJonas Bonn unsigned long sr; 33*e5ad95ceSJonas Bonn unsigned long pad1; 34*e5ad95ceSJonas Bonn unsigned long pad2; 35*e5ad95ceSJonas Bonn }; 36*e5ad95ceSJonas Bonn #endif 37*e5ad95ceSJonas Bonn 38*e5ad95ceSJonas Bonn #ifdef __KERNEL__ 39*e5ad95ceSJonas Bonn 40*e5ad95ceSJonas Bonn /* 41*e5ad95ceSJonas Bonn * Make kernel PTrace/register structures opaque to userspace... userspace can 42*e5ad95ceSJonas Bonn * access thread state via the regset mechanism. This allows us a bit of 43*e5ad95ceSJonas Bonn * flexibility in how we order the registers on the stack, permitting some 44*e5ad95ceSJonas Bonn * optimizations like packing call-clobbered registers together so that 45*e5ad95ceSJonas Bonn * they share a cacheline (not done yet, though... future optimization). 46*e5ad95ceSJonas Bonn */ 47*e5ad95ceSJonas Bonn 48*e5ad95ceSJonas Bonn #ifndef __ASSEMBLY__ 49*e5ad95ceSJonas Bonn /* 50*e5ad95ceSJonas Bonn * This struct describes how the registers are laid out on the kernel stack 51*e5ad95ceSJonas Bonn * during a syscall or other kernel entry. 52*e5ad95ceSJonas Bonn * 53*e5ad95ceSJonas Bonn * This structure should always be cacheline aligned on the stack. 54*e5ad95ceSJonas Bonn * FIXME: I don't think that's the case right now. The alignment is 55*e5ad95ceSJonas Bonn * taken care of elsewhere... head.S, process.c, etc. 56*e5ad95ceSJonas Bonn */ 57*e5ad95ceSJonas Bonn 58*e5ad95ceSJonas Bonn struct pt_regs { 59*e5ad95ceSJonas Bonn union { 60*e5ad95ceSJonas Bonn struct { 61*e5ad95ceSJonas Bonn /* Named registers */ 62*e5ad95ceSJonas Bonn long sr; /* Stored in place of r0 */ 63*e5ad95ceSJonas Bonn long sp; /* r1 */ 64*e5ad95ceSJonas Bonn }; 65*e5ad95ceSJonas Bonn struct { 66*e5ad95ceSJonas Bonn /* Old style */ 67*e5ad95ceSJonas Bonn long offset[2]; 68*e5ad95ceSJonas Bonn long gprs[30]; 69*e5ad95ceSJonas Bonn }; 70*e5ad95ceSJonas Bonn struct { 71*e5ad95ceSJonas Bonn /* New style */ 72*e5ad95ceSJonas Bonn long gpr[32]; 73*e5ad95ceSJonas Bonn }; 74*e5ad95ceSJonas Bonn }; 75*e5ad95ceSJonas Bonn long pc; 76*e5ad95ceSJonas Bonn long orig_gpr11; /* For restarting system calls */ 77*e5ad95ceSJonas Bonn long syscallno; /* Syscall number (used by strace) */ 78*e5ad95ceSJonas Bonn long dummy; /* Cheap alignment fix */ 79*e5ad95ceSJonas Bonn }; 80*e5ad95ceSJonas Bonn #endif /* __ASSEMBLY__ */ 81*e5ad95ceSJonas Bonn 82*e5ad95ceSJonas Bonn /* TODO: Rename this to REDZONE because that's what it is */ 83*e5ad95ceSJonas Bonn #define STACK_FRAME_OVERHEAD 128 /* size of minimum stack frame */ 84*e5ad95ceSJonas Bonn 85*e5ad95ceSJonas Bonn #define instruction_pointer(regs) ((regs)->pc) 86*e5ad95ceSJonas Bonn #define user_mode(regs) (((regs)->sr & SPR_SR_SM) == 0) 87*e5ad95ceSJonas Bonn #define user_stack_pointer(regs) ((unsigned long)(regs)->sp) 88*e5ad95ceSJonas Bonn #define profile_pc(regs) instruction_pointer(regs) 89*e5ad95ceSJonas Bonn 90*e5ad95ceSJonas Bonn /* 91*e5ad95ceSJonas Bonn * Offsets used by 'ptrace' system call interface. 92*e5ad95ceSJonas Bonn */ 93*e5ad95ceSJonas Bonn #define PT_SR 0 94*e5ad95ceSJonas Bonn #define PT_SP 4 95*e5ad95ceSJonas Bonn #define PT_GPR2 8 96*e5ad95ceSJonas Bonn #define PT_GPR3 12 97*e5ad95ceSJonas Bonn #define PT_GPR4 16 98*e5ad95ceSJonas Bonn #define PT_GPR5 20 99*e5ad95ceSJonas Bonn #define PT_GPR6 24 100*e5ad95ceSJonas Bonn #define PT_GPR7 28 101*e5ad95ceSJonas Bonn #define PT_GPR8 32 102*e5ad95ceSJonas Bonn #define PT_GPR9 36 103*e5ad95ceSJonas Bonn #define PT_GPR10 40 104*e5ad95ceSJonas Bonn #define PT_GPR11 44 105*e5ad95ceSJonas Bonn #define PT_GPR12 48 106*e5ad95ceSJonas Bonn #define PT_GPR13 52 107*e5ad95ceSJonas Bonn #define PT_GPR14 56 108*e5ad95ceSJonas Bonn #define PT_GPR15 60 109*e5ad95ceSJonas Bonn #define PT_GPR16 64 110*e5ad95ceSJonas Bonn #define PT_GPR17 68 111*e5ad95ceSJonas Bonn #define PT_GPR18 72 112*e5ad95ceSJonas Bonn #define PT_GPR19 76 113*e5ad95ceSJonas Bonn #define PT_GPR20 80 114*e5ad95ceSJonas Bonn #define PT_GPR21 84 115*e5ad95ceSJonas Bonn #define PT_GPR22 88 116*e5ad95ceSJonas Bonn #define PT_GPR23 92 117*e5ad95ceSJonas Bonn #define PT_GPR24 96 118*e5ad95ceSJonas Bonn #define PT_GPR25 100 119*e5ad95ceSJonas Bonn #define PT_GPR26 104 120*e5ad95ceSJonas Bonn #define PT_GPR27 108 121*e5ad95ceSJonas Bonn #define PT_GPR28 112 122*e5ad95ceSJonas Bonn #define PT_GPR29 116 123*e5ad95ceSJonas Bonn #define PT_GPR30 120 124*e5ad95ceSJonas Bonn #define PT_GPR31 124 125*e5ad95ceSJonas Bonn #define PT_PC 128 126*e5ad95ceSJonas Bonn #define PT_ORIG_GPR11 132 127*e5ad95ceSJonas Bonn #define PT_SYSCALLNO 136 128*e5ad95ceSJonas Bonn 129*e5ad95ceSJonas Bonn #endif /* __KERNEL__ */ 130*e5ad95ceSJonas Bonn 131*e5ad95ceSJonas Bonn #endif /* __ASM_OPENRISC_PTRACE_H */ 132