ptrace.h revision 4f099ebb27211d378304ddcfa507097f5128f5b9
11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __ASM_SH_PTRACE_H
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __ASM_SH_PTRACE_H
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1999, 2000  Niibe Yutaka
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
8f22ab814a24e654b1de24db0c5f8b57b5ab2026aAdrian Bunk#if defined(__SH5__)
933f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundtstruct pt_regs {
1033f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt	unsigned long long pc;
1133f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt	unsigned long long sr;
1233f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt	unsigned long long syscall_nr;
1333f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt	unsigned long long regs[63];
1433f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt	unsigned long long tregs[8];
1533f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt	unsigned long long pad[2];
1633f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt};
1733f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt#else
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GCC defines register number like this:
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * -----------------------------
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	 0 - 15 are integer registers
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	17 - 22 are control/special registers
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	24 - 39 fp registers
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	40 - 47 xd registers
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	48 -    fpscr register
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * -----------------------------
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * We follows above, except:
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	16 --- program counter (PC)
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	22 --- syscall #
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	23 --- floating point communication register
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_REG0	 0
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_REG15	15
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_PC		16
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_PR		17
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_SR		18
4033f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt#define REG_GBR		19
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_MACH	20
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_MACL	21
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_SYSCALL	22
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_FPREG0	23
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_FPREG15	38
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_XFREG0	39
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_XFREG15	54
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_FPSCR	55
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG_FPUL	56
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This struct defines the way the registers are stored on the
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * kernel stack during a system call or other kernel entry.
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct pt_regs {
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long regs[16];
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long pc;
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long pr;
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long sr;
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long gbr;
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long mach;
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long macl;
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	long tra;
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This struct defines the way the DSP registers are stored on the
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * kernel stack during a system call or other kernel entry.
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct pt_dspregs {
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	a1;
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	a0g;
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	a1g;
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	m0;
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	m1;
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	a0;
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	x0;
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	x1;
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	y0;
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	y1;
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	dsr;
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	rs;
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	re;
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	mod;
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
89dd76279b47dce2c0bd7c54997938ec4cb9f16884Paul Mundt#endif
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
91934135c19d8a1be435bae75aefc09b8ae1698b16Paul Mundt#define PTRACE_GETREGS		12	/* General registers */
92934135c19d8a1be435bae75aefc09b8ae1698b16Paul Mundt#define PTRACE_SETREGS		13
93934135c19d8a1be435bae75aefc09b8ae1698b16Paul Mundt
94934135c19d8a1be435bae75aefc09b8ae1698b16Paul Mundt#define PTRACE_GETFPREGS	14	/* FPU registers */
95934135c19d8a1be435bae75aefc09b8ae1698b16Paul Mundt#define PTRACE_SETFPREGS	15
96934135c19d8a1be435bae75aefc09b8ae1698b16Paul Mundt
973bc24a1a5441ef621daf737ec93b0a10e8999d59Paul Mundt#define PTRACE_GETFDPIC		31	/* get the ELF fdpic loadmap address */
983bc24a1a5441ef621daf737ec93b0a10e8999d59Paul Mundt
993bc24a1a5441ef621daf737ec93b0a10e8999d59Paul Mundt#define PTRACE_GETFDPIC_EXEC	0	/* [addr] request the executable loadmap */
1003bc24a1a5441ef621daf737ec93b0a10e8999d59Paul Mundt#define PTRACE_GETFDPIC_INTERP	1	/* [addr] request the interpreter loadmap */
1013bc24a1a5441ef621daf737ec93b0a10e8999d59Paul Mundt
102934135c19d8a1be435bae75aefc09b8ae1698b16Paul Mundt#define	PTRACE_GETDSPREGS	55	/* DSP registers */
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	PTRACE_SETDSPREGS	56
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __KERNEL__
10633f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt#include <asm/addrspace.h>
10733f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt
10833f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt#define user_mode(regs)			(((regs)->sr & 0x40000000)==0)
1095a4f7c66be981c6b5f44a4d66a14ea6ac9b7b6b0Paul Mundt#define instruction_pointer(regs)	((unsigned long)(regs)->pc)
11033f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void show_regs(struct pt_regs *);
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
113c459dbf294b4a3d70490a468a7ca3907fb2c2f57Paul Mundt/*
114c459dbf294b4a3d70490a468a7ca3907fb2c2f57Paul Mundt * These are defined as per linux/ptrace.h.
115c459dbf294b4a3d70490a468a7ca3907fb2c2f57Paul Mundt */
116c459dbf294b4a3d70490a468a7ca3907fb2c2f57Paul Mundtstruct task_struct;
117c459dbf294b4a3d70490a468a7ca3907fb2c2f57Paul Mundt
118c459dbf294b4a3d70490a468a7ca3907fb2c2f57Paul Mundt#define arch_has_single_step()	(1)
119c459dbf294b4a3d70490a468a7ca3907fb2c2f57Paul Mundtextern void user_enable_single_step(struct task_struct *);
120c459dbf294b4a3d70490a468a7ca3907fb2c2f57Paul Mundtextern void user_disable_single_step(struct task_struct *);
121c459dbf294b4a3d70490a468a7ca3907fb2c2f57Paul Mundt
1223cf0f4ece9f1680e54b154b1e38baaf6ace20a62Al Viro#ifdef CONFIG_SH_DSP
1233cf0f4ece9f1680e54b154b1e38baaf6ace20a62Al Viro#define task_pt_regs(task) \
124308a792f7c563a7af6e325274c63812f98988d6fAl Viro	((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \
1254f099ebb27211d378304ddcfa507097f5128f5b9Magnus Damm		 - sizeof(struct pt_dspregs)) - 1)
1265dadb34394d59313e2e763ae8e2fc911e9fc557cPaul Mundt#define task_pt_dspregs(task) \
1274f099ebb27211d378304ddcfa507097f5128f5b9Magnus Damm	((struct pt_dspregs *) (task_stack_page(task) + THREAD_SIZE) - 1)
1283cf0f4ece9f1680e54b154b1e38baaf6ace20a62Al Viro#else
1293cf0f4ece9f1680e54b154b1e38baaf6ace20a62Al Viro#define task_pt_regs(task) \
1304f099ebb27211d378304ddcfa507097f5128f5b9Magnus Damm	((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE) - 1)
1313cf0f4ece9f1680e54b154b1e38baaf6ace20a62Al Viro#endif
1323cf0f4ece9f1680e54b154b1e38baaf6ace20a62Al Viro
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline unsigned long profile_pc(struct pt_regs *regs)
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long pc = instruction_pointer(regs);
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
13733f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt#ifdef P2SEG
13833f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt	if (pc >= P2SEG && pc < P3SEG)
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		pc -= 0x20000000;
14033f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt#endif
14133f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return pc;
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
14433f242ed11ce6b5fbe73fe4ece7ef4bc2f4e2851Paul Mundt#endif /* __KERNEL__ */
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __ASM_SH_PTRACE_H */
147