| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef __ASM_SH_PTRACE_H | 
|  | 2 | #define __ASM_SH_PTRACE_H | 
|  | 3 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 4 | /* | 
|  | 5 | * Copyright (C) 1999, 2000  Niibe Yutaka | 
|  | 6 | * | 
|  | 7 | */ | 
| Adrian Bunk | f22ab81 | 2008-07-25 01:47:34 -0700 | [diff] [blame] | 8 | #if defined(__SH5__) | 
| Paul Mundt | 33f242e | 2007-11-09 16:57:27 +0900 | [diff] [blame] | 9 | struct pt_regs { | 
|  | 10 | unsigned long long pc; | 
|  | 11 | unsigned long long sr; | 
| Paul Mundt | ecd4ca5 | 2009-04-27 17:05:38 +0900 | [diff] [blame] | 12 | long long syscall_nr; | 
| Paul Mundt | 33f242e | 2007-11-09 16:57:27 +0900 | [diff] [blame] | 13 | unsigned long long regs[63]; | 
|  | 14 | unsigned long long tregs[8]; | 
|  | 15 | unsigned long long pad[2]; | 
|  | 16 | }; | 
|  | 17 | #else | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 18 | /* | 
|  | 19 | * GCC defines register number like this: | 
|  | 20 | * ----------------------------- | 
|  | 21 | *	 0 - 15 are integer registers | 
|  | 22 | *	17 - 22 are control/special registers | 
|  | 23 | *	24 - 39 fp registers | 
|  | 24 | *	40 - 47 xd registers | 
|  | 25 | *	48 -    fpscr register | 
|  | 26 | * ----------------------------- | 
|  | 27 | * | 
|  | 28 | * We follows above, except: | 
|  | 29 | *	16 --- program counter (PC) | 
|  | 30 | *	22 --- syscall # | 
|  | 31 | *	23 --- floating point communication register | 
|  | 32 | */ | 
|  | 33 | #define REG_REG0	 0 | 
|  | 34 | #define REG_REG15	15 | 
|  | 35 |  | 
|  | 36 | #define REG_PC		16 | 
|  | 37 |  | 
|  | 38 | #define REG_PR		17 | 
|  | 39 | #define REG_SR		18 | 
| Paul Mundt | 33f242e | 2007-11-09 16:57:27 +0900 | [diff] [blame] | 40 | #define REG_GBR		19 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 41 | #define REG_MACH	20 | 
|  | 42 | #define REG_MACL	21 | 
|  | 43 |  | 
|  | 44 | #define REG_SYSCALL	22 | 
|  | 45 |  | 
|  | 46 | #define REG_FPREG0	23 | 
|  | 47 | #define REG_FPREG15	38 | 
|  | 48 | #define REG_XFREG0	39 | 
|  | 49 | #define REG_XFREG15	54 | 
|  | 50 |  | 
|  | 51 | #define REG_FPSCR	55 | 
|  | 52 | #define REG_FPUL	56 | 
|  | 53 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 54 | /* | 
|  | 55 | * This struct defines the way the registers are stored on the | 
|  | 56 | * kernel stack during a system call or other kernel entry. | 
|  | 57 | */ | 
|  | 58 | struct pt_regs { | 
|  | 59 | unsigned long regs[16]; | 
|  | 60 | unsigned long pc; | 
|  | 61 | unsigned long pr; | 
|  | 62 | unsigned long sr; | 
|  | 63 | unsigned long gbr; | 
|  | 64 | unsigned long mach; | 
|  | 65 | unsigned long macl; | 
|  | 66 | long tra; | 
|  | 67 | }; | 
|  | 68 |  | 
|  | 69 | /* | 
|  | 70 | * This struct defines the way the DSP registers are stored on the | 
|  | 71 | * kernel stack during a system call or other kernel entry. | 
|  | 72 | */ | 
|  | 73 | struct pt_dspregs { | 
|  | 74 | unsigned long	a1; | 
|  | 75 | unsigned long	a0g; | 
|  | 76 | unsigned long	a1g; | 
|  | 77 | unsigned long	m0; | 
|  | 78 | unsigned long	m1; | 
|  | 79 | unsigned long	a0; | 
|  | 80 | unsigned long	x0; | 
|  | 81 | unsigned long	x1; | 
|  | 82 | unsigned long	y0; | 
|  | 83 | unsigned long	y1; | 
|  | 84 | unsigned long	dsr; | 
|  | 85 | unsigned long	rs; | 
|  | 86 | unsigned long	re; | 
|  | 87 | unsigned long	mod; | 
|  | 88 | }; | 
| Paul Mundt | dd76279 | 2008-12-10 20:14:15 +0900 | [diff] [blame] | 89 | #endif | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 90 |  | 
| Paul Mundt | 934135c | 2008-09-12 19:52:36 +0900 | [diff] [blame] | 91 | #define PTRACE_GETREGS		12	/* General registers */ | 
|  | 92 | #define PTRACE_SETREGS		13 | 
|  | 93 |  | 
|  | 94 | #define PTRACE_GETFPREGS	14	/* FPU registers */ | 
|  | 95 | #define PTRACE_SETFPREGS	15 | 
|  | 96 |  | 
| Paul Mundt | 3bc24a1 | 2008-05-19 13:40:12 +0900 | [diff] [blame] | 97 | #define PTRACE_GETFDPIC		31	/* get the ELF fdpic loadmap address */ | 
|  | 98 |  | 
|  | 99 | #define PTRACE_GETFDPIC_EXEC	0	/* [addr] request the executable loadmap */ | 
|  | 100 | #define PTRACE_GETFDPIC_INTERP	1	/* [addr] request the interpreter loadmap */ | 
|  | 101 |  | 
| Paul Mundt | 934135c | 2008-09-12 19:52:36 +0900 | [diff] [blame] | 102 | #define	PTRACE_GETDSPREGS	55	/* DSP registers */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 103 | #define	PTRACE_SETDSPREGS	56 | 
|  | 104 |  | 
|  | 105 | #ifdef __KERNEL__ | 
| Paul Mundt | 33f242e | 2007-11-09 16:57:27 +0900 | [diff] [blame] | 106 | #include <asm/addrspace.h> | 
|  | 107 |  | 
|  | 108 | #define user_mode(regs)			(((regs)->sr & 0x40000000)==0) | 
| Paul Mundt | 5a4f7c6 | 2007-11-20 18:08:06 +0900 | [diff] [blame] | 109 | #define instruction_pointer(regs)	((unsigned long)(regs)->pc) | 
| Paul Mundt | 33f242e | 2007-11-09 16:57:27 +0900 | [diff] [blame] | 110 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 111 | extern void show_regs(struct pt_regs *); | 
|  | 112 |  | 
| Paul Mundt | c459dbf | 2008-07-30 19:09:31 +0900 | [diff] [blame] | 113 | /* | 
|  | 114 | * These are defined as per linux/ptrace.h. | 
|  | 115 | */ | 
|  | 116 | struct task_struct; | 
|  | 117 |  | 
|  | 118 | #define arch_has_single_step()	(1) | 
|  | 119 | extern void user_enable_single_step(struct task_struct *); | 
|  | 120 | extern void user_disable_single_step(struct task_struct *); | 
|  | 121 |  | 
| Al Viro | 3cf0f4e | 2006-01-12 01:05:44 -0800 | [diff] [blame] | 122 | #define task_pt_regs(task) \ | 
| Magnus Damm | 4f099eb | 2009-02-23 07:16:34 +0000 | [diff] [blame] | 123 | ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE) - 1) | 
| Al Viro | 3cf0f4e | 2006-01-12 01:05:44 -0800 | [diff] [blame] | 124 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 125 | static inline unsigned long profile_pc(struct pt_regs *regs) | 
|  | 126 | { | 
|  | 127 | unsigned long pc = instruction_pointer(regs); | 
|  | 128 |  | 
| Paul Mundt | 33f242e | 2007-11-09 16:57:27 +0900 | [diff] [blame] | 129 | #ifdef P2SEG | 
|  | 130 | if (pc >= P2SEG && pc < P3SEG) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 131 | pc -= 0x20000000; | 
| Paul Mundt | 33f242e | 2007-11-09 16:57:27 +0900 | [diff] [blame] | 132 | #endif | 
|  | 133 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 134 | return pc; | 
|  | 135 | } | 
| Paul Mundt | 33f242e | 2007-11-09 16:57:27 +0900 | [diff] [blame] | 136 | #endif /* __KERNEL__ */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 137 |  | 
|  | 138 | #endif /* __ASM_SH_PTRACE_H */ |