1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (C) 2013 Altera Corporation 3*4882a593Smuzhiyun * Copyright (C) 2010 Tobias Klauser <tklauser@distanz.ch> 4*4882a593Smuzhiyun * Copyright (C) 2004 Microtronix Datacom Ltd 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * based on m68k asm/processor.h 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * This file is subject to the terms and conditions of the GNU General Public 9*4882a593Smuzhiyun * License. See the file "COPYING" in the main directory of this archive 10*4882a593Smuzhiyun * for more details. 11*4882a593Smuzhiyun */ 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #ifndef _ASM_NIOS2_PTRACE_H 14*4882a593Smuzhiyun #define _ASM_NIOS2_PTRACE_H 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #include <uapi/asm/ptrace.h> 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* This struct defines the way the registers are stored on the 19*4882a593Smuzhiyun stack during a system call. */ 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 22*4882a593Smuzhiyun struct pt_regs { 23*4882a593Smuzhiyun unsigned long r8; /* r8-r15 Caller-saved GP registers */ 24*4882a593Smuzhiyun unsigned long r9; 25*4882a593Smuzhiyun unsigned long r10; 26*4882a593Smuzhiyun unsigned long r11; 27*4882a593Smuzhiyun unsigned long r12; 28*4882a593Smuzhiyun unsigned long r13; 29*4882a593Smuzhiyun unsigned long r14; 30*4882a593Smuzhiyun unsigned long r15; 31*4882a593Smuzhiyun unsigned long r1; /* Assembler temporary */ 32*4882a593Smuzhiyun unsigned long r2; /* Retval LS 32bits */ 33*4882a593Smuzhiyun unsigned long r3; /* Retval MS 32bits */ 34*4882a593Smuzhiyun unsigned long r4; /* r4-r7 Register arguments */ 35*4882a593Smuzhiyun unsigned long r5; 36*4882a593Smuzhiyun unsigned long r6; 37*4882a593Smuzhiyun unsigned long r7; 38*4882a593Smuzhiyun unsigned long orig_r2; /* Copy of r2 ?? */ 39*4882a593Smuzhiyun unsigned long ra; /* Return address */ 40*4882a593Smuzhiyun unsigned long fp; /* Frame pointer */ 41*4882a593Smuzhiyun unsigned long sp; /* Stack pointer */ 42*4882a593Smuzhiyun unsigned long gp; /* Global pointer */ 43*4882a593Smuzhiyun unsigned long estatus; 44*4882a593Smuzhiyun unsigned long ea; /* Exception return address (pc) */ 45*4882a593Smuzhiyun unsigned long orig_r7; 46*4882a593Smuzhiyun }; 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun /* 49*4882a593Smuzhiyun * This is the extended stack used by signal handlers and the context 50*4882a593Smuzhiyun * switcher: it's pushed after the normal "struct pt_regs". 51*4882a593Smuzhiyun */ 52*4882a593Smuzhiyun struct switch_stack { 53*4882a593Smuzhiyun unsigned long r16; /* r16-r23 Callee-saved GP registers */ 54*4882a593Smuzhiyun unsigned long r17; 55*4882a593Smuzhiyun unsigned long r18; 56*4882a593Smuzhiyun unsigned long r19; 57*4882a593Smuzhiyun unsigned long r20; 58*4882a593Smuzhiyun unsigned long r21; 59*4882a593Smuzhiyun unsigned long r22; 60*4882a593Smuzhiyun unsigned long r23; 61*4882a593Smuzhiyun unsigned long fp; 62*4882a593Smuzhiyun unsigned long gp; 63*4882a593Smuzhiyun unsigned long ra; 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #define user_mode(regs) (((regs)->estatus & ESTATUS_EU)) 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun #define instruction_pointer(regs) ((regs)->ra) 69*4882a593Smuzhiyun #define profile_pc(regs) instruction_pointer(regs) 70*4882a593Smuzhiyun #define user_stack_pointer(regs) ((regs)->sp) 71*4882a593Smuzhiyun extern void show_regs(struct pt_regs *); 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #define current_pt_regs() \ 74*4882a593Smuzhiyun ((struct pt_regs *)((unsigned long)current_thread_info() + THREAD_SIZE)\ 75*4882a593Smuzhiyun - 1) 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun #define force_successful_syscall_return() (current_pt_regs()->orig_r2 = -1) 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun int do_syscall_trace_enter(void); 80*4882a593Smuzhiyun void do_syscall_trace_exit(void); 81*4882a593Smuzhiyun #endif /* __ASSEMBLY__ */ 82*4882a593Smuzhiyun #endif /* _ASM_NIOS2_PTRACE_H */ 83