📄 ptrace.h
字号:
/* * U-boot - ptrace.h * * Copyright (c) 2005 blackfin.uclinux.org * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */#ifndef _BLACKFIN_PTRACE_H#define _BLACKFIN_PTRACE_H#define NEW_PT_REGS/* * GCC defines register number like this: * ----------------------------- * 0 - 7 are data registers R0-R7 * 8 - 15 are address registers P0-P7 * 16 - 31 dsp registers I/B/L0 -- I/B/L3 & M0--M3 * 32 - 33 A registers A0 & A1 * 34 - status register * * We follows above, except: * 32-33 --- Low 32-bit of A0&1 * 34-35 --- High 8-bit of A0&1 */#if defined(NEW_PT_REGS)#define PT_IPEND 0#define PT_SYSCFG (PT_IPEND+4)#define PT_SEQSTAT (PT_SYSCFG+4)#define PT_RETE (PT_SEQSTAT+4)#define PT_RETN (PT_RETE+4)#define PT_RETX (PT_RETN+4)#define PT_RETI (PT_RETX+4)#define PT_PC PT_RETI#define PT_RETS (PT_RETI+4)#define PT_RESERVED (PT_RETS+4)#define PT_ASTAT (PT_RESERVED+4)#define PT_LB1 (PT_ASTAT+4)#define PT_LB0 (PT_LB1+4)#define PT_LT1 (PT_LB0+4)#define PT_LT0 (PT_LT1+4)#define PT_LC1 (PT_LT0+4)#define PT_LC0 (PT_LC1+4)#define PT_A1W (PT_LC0+4)#define PT_A1X (PT_A1W+4)#define PT_A0W (PT_A1X+4)#define PT_A0X (PT_A0W+4)#define PT_B3 (PT_A0X+4)#define PT_B2 (PT_B3+4)#define PT_B1 (PT_B2+4)#define PT_B0 (PT_B1+4)#define PT_L3 (PT_B0+4)#define PT_L2 (PT_L3+4)#define PT_L1 (PT_L2+4)#define PT_L0 (PT_L1+4)#define PT_M3 (PT_L0+4)#define PT_M2 (PT_M3+4)#define PT_M1 (PT_M2+4)#define PT_M0 (PT_M1+4)#define PT_I3 (PT_M0+4)#define PT_I2 (PT_I3+4)#define PT_I1 (PT_I2+4)#define PT_I0 (PT_I1+4)#define PT_USP (PT_I0+4)#define PT_FP (PT_USP+4)#define PT_P5 (PT_FP+4)#define PT_P4 (PT_P5+4)#define PT_P3 (PT_P4+4)#define PT_P2 (PT_P3+4)#define PT_P1 (PT_P2+4)#define PT_P0 (PT_P1+4)#define PT_R7 (PT_P0+4)#define PT_R6 (PT_R7+4)#define PT_R5 (PT_R6+4)#define PT_R4 (PT_R5+4)#define PT_R3 (PT_R4+4)#define PT_R2 (PT_R3+4)#define PT_R1 (PT_R2+4)#define PT_R0 (PT_R1+4)#define PT_ORIG_R0 (PT_R0+4)#define PT_SR PT_SEQSTAT#else/* * Here utilize blackfin : dpregs = [pregs + imm16s4] * [pregs + imm16s4] = dpregs * to access defferent saved reg in stack */#define PT_R3 0#define PT_R4 4#define PT_R2 8#define PT_R1 12#define PT_P5 16#define PT_P4 20#define PT_P3 24#define PT_P2 28#define PT_P1 32#define PT_P0 36#define PT_R7 40#define PT_R6 44#define PT_R5 48#define PT_PC 52#define PT_SEQSTAT 56 /* so-called SR reg */#define PT_SR PT_SEQSTAT#define PT_ASTAT 60#define PT_RETS 64#define PT_A1w 68#define PT_A0w 72#define PT_A1x 76#define PT_A0x 80#define PT_ORIG_R0 84#define PT_R0 88#define PT_USP 92#define PT_FP 96#define PT_SP 100/* Added by HuTao, May26 2003 3:18PM */#define PT_IPEND 100/* Add SYSCFG register for single stepping support */#define PT_SYSCFG 104#endif#ifndef __ASSEMBLY__#if defined(NEW_PT_REGS)/* this struct defines the way the registers are stored on the * stack during a system call. */struct pt_regs { long ipend; long syscfg; long seqstat; long rete; long retn; long retx; long pc; long rets; long reserved; long astat; long lb1; long lb0; long lt1; long lt0; long lc1; long lc0; long a1w; long a1x; long a0w; long a0x; long b3; long b2; long b1; long b0; long l3; long l2; long l1; long l0; long m3; long m2; long m1; long m0; long i3; long i2; long i1; long i0; long usp; long fp; long p5; long p4; long p3; long p2; long p1; long p0; long r7; long r6; long r5; long r4; long r3; long r2; long r1; long r0; long orig_r0;};#else/* now we don't know what regs the system call will use */struct pt_regs { long r3; long r4; long r2; long r1; long p5; long p4; long p3; long p2; long p1; long p0; long r7; long r6; long r5; unsigned long pc; unsigned long seqstat; unsigned long astat; unsigned long rets; long a1w; long a0w; long a1x; long a0x; long orig_r0; long r0; long usp; long fp;/* * Added for supervisor/user mode switch. * * HuTao May26 03 3:23PM */ long ipend; long syscfg;};#endif/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */#define PTRACE_GETREGS 12#define PTRACE_SETREGS 13 /* ptrace signal */#ifdef __KERNEL__#ifndef PS_S#define PS_S (0x0c00)/* Bit 11:10 of SEQSTAT defines user/supervisor/debug mode * 00: user * 01: supervisor * 1x: debug */#define PS_M (0x1000) /* I am not sure why this is required here Akbar */#endif#define user_mode(regs) (!((regs)->seqstat & PS_S))#define instruction_pointer(regs) ((regs)->pc)extern void show_regs(struct pt_regs *);#endif#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -