| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | /* * Copyright (c) 2006-2019, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date           Author       Notes * 2019-12-04     Jiaxun Yang  Initial version */#ifndef _MIPS_PTRACE_H#define _MIPS_PTRACE_H#include "asm.h"#include "mips_regs.h"#define HI_LO_SIZE  4#define FP_REG_SIZE 8#define NUM_FPU_REGS 16#ifndef __ASSEMBLY__#include <rtthread.h>struct mips_fpu_struct {    rt_uint64_t	fpr[NUM_FPU_REGS];    rt_uint32_t	fcr31;    rt_uint32_t	pad;};struct pt_regs {#ifndef ARCH_MIPS64    /* Only O32 Need This! */    /* Pad bytes for argument save space on the stack. */    rt_uint32_t pad0[8];    /* Saved main processor registers. */    rt_uint32_t regs[32];    /* Saved special registers. */    rt_uint32_t cp0_status;    rt_uint32_t hi;    rt_uint32_t lo;    rt_uint32_t cp0_badvaddr;    rt_uint32_t cp0_cause;    rt_uint32_t cp0_epc;#else    /* Saved main processor registers. */    unsigned long regs[32];    /* Saved special registers. */    rt_uint32_t cp0_status;    rt_uint32_t hi;    rt_uint32_t lo;    unsigned long cp0_badvaddr;    rt_uint32_t cp0_cause;    unsigned long cp0_epc;#endif#ifdef RT_USING_FPU    /* FPU Registers */    /* Unlike Linux Kernel, we save these registers unconditionally,     * so it should be a part of pt_regs */    struct mips_fpu_struct fpu;#endif} __aligned(8);#endif/* Note: For call stack o32 ABI has 0x8 shadowsoace Here  */#ifdef ARCH_MIPS64#define PT_R0		(0x0 * LONGSIZE)	/* 0 */#else#define PT_R0		(0x8 * LONGSIZE)	/* 0 */#endif#define PT_R1		((PT_R0) + LONGSIZE)	/* 1 */#define PT_R2		((PT_R1) + LONGSIZE)	/* 2 */#define PT_R3		((PT_R2) + LONGSIZE)	/* 3 */#define PT_R4		((PT_R3) + LONGSIZE)	/* 4 */#define PT_R5		((PT_R4) + LONGSIZE)	/* 5 */#define PT_R6		((PT_R5) + LONGSIZE)	/* 6 */#define PT_R7		((PT_R6) + LONGSIZE)	/* 7 */#define PT_R8		((PT_R7) + LONGSIZE)	/* 8 */#define PT_R9		((PT_R8) + LONGSIZE)	/* 9 */#define PT_R10		((PT_R9) + LONGSIZE)	/* 10 */#define PT_R11		((PT_R10) + LONGSIZE)	/* 11 */#define PT_R12		((PT_R11) + LONGSIZE)	/* 12 */#define PT_R13		((PT_R12) + LONGSIZE)	/* 13 */#define PT_R14		((PT_R13) + LONGSIZE)	/* 14 */#define PT_R15		((PT_R14) + LONGSIZE)	/* 15 */#define PT_R16		((PT_R15) + LONGSIZE)	/* 16 */#define PT_R17		((PT_R16) + LONGSIZE)	/* 17 */#define PT_R18		((PT_R17) + LONGSIZE)	/* 18 */#define PT_R19		((PT_R18) + LONGSIZE)	/* 19 */#define PT_R20		((PT_R19) + LONGSIZE)	/* 20 */#define PT_R21		((PT_R20) + LONGSIZE)	/* 21 */#define PT_R22		((PT_R21) + LONGSIZE)	/* 22 */#define PT_R23		((PT_R22) + LONGSIZE)	/* 23 */#define PT_R24		((PT_R23) + LONGSIZE)	/* 24 */#define PT_R25		((PT_R24) + LONGSIZE)	/* 25 */#define PT_R26		((PT_R25) + LONGSIZE)	/* 26 */#define PT_R27		((PT_R26) + LONGSIZE)	/* 27 */#define PT_R28		((PT_R27) + LONGSIZE)	/* 28 */#define PT_R29		((PT_R28) + LONGSIZE)	/* 29 */#define PT_R30		((PT_R29) + LONGSIZE)	/* 30 */#define PT_R31		((PT_R30) + LONGSIZE)	/* 31 *//* * Saved special registers */#define PT_STATUS	((PT_R31) + LONGSIZE)	/* 32 */#define PT_HI		((PT_STATUS) + HI_LO_SIZE)	/* 33 */#define PT_LO		((PT_HI) + HI_LO_SIZE)	/* 34 */#define PT_BADVADDR	((PT_LO) + LONGSIZE)	/* 35 */#define PT_CAUSE	((PT_BADVADDR) + LONGSIZE)	/* 36 */#define PT_EPC		((PT_CAUSE) + LONGSIZE)	/* 37 */#define PT_REG_END		((PT_EPC) + LONGSIZE) /* Align already ensured manually */#ifdef RT_USING_FPU#define PT_FPU_R0               (PT_REG_END)#define PT_FPU_R2               ((PT_FPU_R0) + FP_REG_SIZE)#define PT_FPU_R4               ((PT_FPU_R2) + FP_REG_SIZE)#define PT_FPU_R6               ((PT_FPU_R4) + FP_REG_SIZE)#define PT_FPU_R8               ((PT_FPU_R6) + FP_REG_SIZE)#define PT_FPU_R10              ((PT_FPU_R8) + FP_REG_SIZE)#define PT_FPU_R12              ((PT_FPU_R10) + FP_REG_SIZE)#define PT_FPU_R14              ((PT_FPU_R12) + FP_REG_SIZE)#define PT_FPU_R16              ((PT_FPU_R14) + FP_REG_SIZE)#define PT_FPU_R18              ((PT_FPU_R16) + FP_REG_SIZE)#define PT_FPU_R20              ((PT_FPU_R18) + FP_REG_SIZE)#define PT_FPU_R22              ((PT_FPU_R20) + FP_REG_SIZE)#define PT_FPU_R24              ((PT_FPU_R22) + FP_REG_SIZE)#define PT_FPU_R26              ((PT_FPU_R24) + FP_REG_SIZE)#define PT_FPU_R28              ((PT_FPU_R26) + FP_REG_SIZE)#define PT_FPU_R30              ((PT_FPU_R28) + FP_REG_SIZE)#define PT_FPU_FCSR31           ((PT_FPU_R30) + FP_REG_SIZE)#define PT_FPU_PAD0             ((PT_FPU_FCSR31) + 4)#define PT_FPU_END     	        ((PT_FPU_PAD0) + 4)#define PT_SIZE			PT_FPU_END#else#define PT_SIZE			PT_REG_END#endif#endif
 |