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