1106174d0SLey Foon Tan /* 2106174d0SLey Foon Tan * Copyright (C) 2013 Altera Corporation 3106174d0SLey Foon Tan * Copyright (C) 2010 Tobias Klauser <tklauser@distanz.ch> 4106174d0SLey Foon Tan * Copyright (C) 2004 Microtronix Datacom Ltd 5106174d0SLey Foon Tan * 6106174d0SLey Foon Tan * based on m68k asm/processor.h 7106174d0SLey Foon Tan * 8106174d0SLey Foon Tan * This file is subject to the terms and conditions of the GNU General Public 9106174d0SLey Foon Tan * License. See the file "COPYING" in the main directory of this archive 10106174d0SLey Foon Tan * for more details. 11106174d0SLey Foon Tan */ 12106174d0SLey Foon Tan 13106174d0SLey Foon Tan #ifndef _ASM_NIOS2_PTRACE_H 14106174d0SLey Foon Tan #define _ASM_NIOS2_PTRACE_H 15106174d0SLey Foon Tan 16106174d0SLey Foon Tan #include <uapi/asm/ptrace.h> 17106174d0SLey Foon Tan 1892d5dd8cSChung-Ling Tang /* This struct defines the way the registers are stored on the 1992d5dd8cSChung-Ling Tang stack during a system call. */ 2092d5dd8cSChung-Ling Tang 21106174d0SLey Foon Tan #ifndef __ASSEMBLY__ 2292d5dd8cSChung-Ling Tang struct pt_regs { 2392d5dd8cSChung-Ling Tang unsigned long r8; /* r8-r15 Caller-saved GP registers */ 2492d5dd8cSChung-Ling Tang unsigned long r9; 2592d5dd8cSChung-Ling Tang unsigned long r10; 2692d5dd8cSChung-Ling Tang unsigned long r11; 2792d5dd8cSChung-Ling Tang unsigned long r12; 2892d5dd8cSChung-Ling Tang unsigned long r13; 2992d5dd8cSChung-Ling Tang unsigned long r14; 3092d5dd8cSChung-Ling Tang unsigned long r15; 3192d5dd8cSChung-Ling Tang unsigned long r1; /* Assembler temporary */ 3292d5dd8cSChung-Ling Tang unsigned long r2; /* Retval LS 32bits */ 3392d5dd8cSChung-Ling Tang unsigned long r3; /* Retval MS 32bits */ 3492d5dd8cSChung-Ling Tang unsigned long r4; /* r4-r7 Register arguments */ 3592d5dd8cSChung-Ling Tang unsigned long r5; 3692d5dd8cSChung-Ling Tang unsigned long r6; 3792d5dd8cSChung-Ling Tang unsigned long r7; 3892d5dd8cSChung-Ling Tang unsigned long orig_r2; /* Copy of r2 ?? */ 3992d5dd8cSChung-Ling Tang unsigned long ra; /* Return address */ 4092d5dd8cSChung-Ling Tang unsigned long fp; /* Frame pointer */ 4192d5dd8cSChung-Ling Tang unsigned long sp; /* Stack pointer */ 4292d5dd8cSChung-Ling Tang unsigned long gp; /* Global pointer */ 4392d5dd8cSChung-Ling Tang unsigned long estatus; 4492d5dd8cSChung-Ling Tang unsigned long ea; /* Exception return address (pc) */ 4592d5dd8cSChung-Ling Tang unsigned long orig_r7; 4692d5dd8cSChung-Ling Tang }; 4792d5dd8cSChung-Ling Tang 4892d5dd8cSChung-Ling Tang /* 4992d5dd8cSChung-Ling Tang * This is the extended stack used by signal handlers and the context 5092d5dd8cSChung-Ling Tang * switcher: it's pushed after the normal "struct pt_regs". 5192d5dd8cSChung-Ling Tang */ 5292d5dd8cSChung-Ling Tang struct switch_stack { 5392d5dd8cSChung-Ling Tang unsigned long r16; /* r16-r23 Callee-saved GP registers */ 5492d5dd8cSChung-Ling Tang unsigned long r17; 5592d5dd8cSChung-Ling Tang unsigned long r18; 5692d5dd8cSChung-Ling Tang unsigned long r19; 5792d5dd8cSChung-Ling Tang unsigned long r20; 5892d5dd8cSChung-Ling Tang unsigned long r21; 5992d5dd8cSChung-Ling Tang unsigned long r22; 6092d5dd8cSChung-Ling Tang unsigned long r23; 6192d5dd8cSChung-Ling Tang unsigned long fp; 6292d5dd8cSChung-Ling Tang unsigned long gp; 6392d5dd8cSChung-Ling Tang unsigned long ra; 6492d5dd8cSChung-Ling Tang }; 6592d5dd8cSChung-Ling Tang 66106174d0SLey Foon Tan #define user_mode(regs) (((regs)->estatus & ESTATUS_EU)) 67106174d0SLey Foon Tan 68106174d0SLey Foon Tan #define instruction_pointer(regs) ((regs)->ra) 69106174d0SLey Foon Tan #define profile_pc(regs) instruction_pointer(regs) 70106174d0SLey Foon Tan #define user_stack_pointer(regs) ((regs)->sp) 71106174d0SLey Foon Tan extern void show_regs(struct pt_regs *); 72106174d0SLey Foon Tan 73106174d0SLey Foon Tan #define current_pt_regs() \ 74106174d0SLey Foon Tan ((struct pt_regs *)((unsigned long)current_thread_info() + THREAD_SIZE)\ 75106174d0SLey Foon Tan - 1) 76106174d0SLey Foon Tan 77*fd0c153dSAl Viro #define force_successful_syscall_return() (current_pt_regs()->orig_r2 = -1) 78*fd0c153dSAl Viro 79106174d0SLey Foon Tan int do_syscall_trace_enter(void); 80106174d0SLey Foon Tan void do_syscall_trace_exit(void); 81106174d0SLey Foon Tan #endif /* __ASSEMBLY__ */ 82106174d0SLey Foon Tan #endif /* _ASM_NIOS2_PTRACE_H */ 83