2009-06-12 22:01:00 +08:00
|
|
|
#ifndef _ASM_SCORE_PTRACE_H
|
|
|
|
#define _ASM_SCORE_PTRACE_H
|
|
|
|
|
2009-06-19 13:53:49 +08:00
|
|
|
#define PTRACE_GETREGS 12
|
|
|
|
#define PTRACE_SETREGS 13
|
|
|
|
|
2009-06-12 22:01:00 +08:00
|
|
|
#define PC 32
|
|
|
|
#define CONDITION 33
|
|
|
|
#define ECR 34
|
|
|
|
#define EMA 35
|
|
|
|
#define CEH 36
|
|
|
|
#define CEL 37
|
|
|
|
#define COUNTER 38
|
|
|
|
#define LDCR 39
|
|
|
|
#define STCR 40
|
|
|
|
#define PSR 41
|
|
|
|
|
|
|
|
#define SINGLESTEP16_INSN 0x7006
|
|
|
|
#define SINGLESTEP32_INSN 0x840C8000
|
|
|
|
#define BREAKPOINT16_INSN 0x7002 /* work on SPG300 */
|
|
|
|
#define BREAKPOINT32_INSN 0x84048000 /* work on SPG300 */
|
|
|
|
|
|
|
|
/* Define instruction mask */
|
|
|
|
#define INSN32_MASK 0x80008000
|
|
|
|
|
|
|
|
#define J32 0x88008000 /* 1_00010_0000000000_1_000000000000000 */
|
|
|
|
#define J32M 0xFC008000 /* 1_11111_0000000000_1_000000000000000 */
|
|
|
|
|
|
|
|
#define B32 0x90008000 /* 1_00100_0000000000_1_000000000000000 */
|
|
|
|
#define B32M 0xFC008000
|
|
|
|
#define BL32 0x90008001 /* 1_00100_0000000000_1_000000000000001 */
|
|
|
|
#define BL32M B32
|
|
|
|
#define BR32 0x80008008 /* 1_00000_0000000000_1_00000000_000100_0 */
|
|
|
|
#define BR32M 0xFFE0807E
|
|
|
|
#define BRL32 0x80008009 /* 1_00000_0000000000_1_00000000_000100_1 */
|
|
|
|
#define BRL32M BR32M
|
|
|
|
|
|
|
|
#define B32_SET (J32 | B32 | BL32 | BR32 | BRL32)
|
|
|
|
|
|
|
|
#define J16 0x3000 /* 0_011_....... */
|
|
|
|
#define J16M 0xF000
|
|
|
|
#define B16 0x4000 /* 0_100_....... */
|
|
|
|
#define B16M 0xF000
|
|
|
|
#define BR16 0x0004 /* 0_000.......0100 */
|
|
|
|
#define BR16M 0xF00F
|
|
|
|
#define B16_SET (J16 | B16 | BR16)
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* This struct defines the way the registers are stored on the stack during a
|
|
|
|
* system call/exception. As usual the registers k0/k1 aren't being saved.
|
|
|
|
*/
|
|
|
|
struct pt_regs {
|
2009-08-30 12:30:16 +08:00
|
|
|
unsigned long pad0[6]; /* stack arguments */
|
2009-06-12 22:01:00 +08:00
|
|
|
unsigned long orig_r4;
|
|
|
|
unsigned long orig_r7;
|
2009-08-30 12:30:16 +08:00
|
|
|
long is_syscall;
|
|
|
|
|
2009-06-12 22:01:00 +08:00
|
|
|
unsigned long regs[32];
|
|
|
|
|
|
|
|
unsigned long cel;
|
|
|
|
unsigned long ceh;
|
|
|
|
|
|
|
|
unsigned long sr0; /* cnt */
|
|
|
|
unsigned long sr1; /* lcr */
|
|
|
|
unsigned long sr2; /* scr */
|
|
|
|
|
|
|
|
unsigned long cp0_epc;
|
|
|
|
unsigned long cp0_ema;
|
|
|
|
unsigned long cp0_psr;
|
|
|
|
unsigned long cp0_ecr;
|
|
|
|
unsigned long cp0_condition;
|
|
|
|
};
|
|
|
|
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
|
2009-08-30 12:30:16 +08:00
|
|
|
struct task_struct;
|
|
|
|
|
2009-06-12 22:01:00 +08:00
|
|
|
/*
|
|
|
|
* Does the process account for user or for system time?
|
|
|
|
*/
|
|
|
|
#define user_mode(regs) ((regs->cp0_psr & 8) == 8)
|
|
|
|
|
2009-06-19 13:53:49 +08:00
|
|
|
#define instruction_pointer(regs) ((unsigned long)(regs)->cp0_epc)
|
|
|
|
#define profile_pc(regs) instruction_pointer(regs)
|
2009-06-12 22:01:00 +08:00
|
|
|
|
2009-06-19 13:53:49 +08:00
|
|
|
extern void do_syscall_trace(struct pt_regs *regs, int entryexit);
|
2009-06-12 22:01:00 +08:00
|
|
|
extern int read_tsk_long(struct task_struct *, unsigned long, unsigned long *);
|
2009-06-19 13:53:49 +08:00
|
|
|
extern int read_tsk_short(struct task_struct *, unsigned long,
|
|
|
|
unsigned short *);
|
|
|
|
|
|
|
|
#define arch_has_single_step() (1)
|
|
|
|
extern void user_enable_single_step(struct task_struct *);
|
|
|
|
extern void user_disable_single_step(struct task_struct *);
|
|
|
|
#endif /* __KERNEL__ */
|
2009-06-12 22:01:00 +08:00
|
|
|
|
|
|
|
#endif /* _ASM_SCORE_PTRACE_H */
|