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