Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.27 139 lines 3.1 kB view raw
1#ifndef __ASM_SH_PTRACE_H 2#define __ASM_SH_PTRACE_H 3 4/* 5 * Copyright (C) 1999, 2000 Niibe Yutaka 6 * 7 */ 8#if defined(__SH5__) 9struct pt_regs { 10 unsigned long long pc; 11 unsigned long long sr; 12 unsigned long long syscall_nr; 13 unsigned long long regs[63]; 14 unsigned long long tregs[8]; 15 unsigned long long pad[2]; 16}; 17#else 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 40#define REG_GBR 19 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 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 */ 58struct 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 */ 73struct 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}; 89 90#define PTRACE_GETFDPIC 31 /* get the ELF fdpic loadmap address */ 91 92#define PTRACE_GETFDPIC_EXEC 0 /* [addr] request the executable loadmap */ 93#define PTRACE_GETFDPIC_INTERP 1 /* [addr] request the interpreter loadmap */ 94 95#define PTRACE_GETDSPREGS 55 96#define PTRACE_SETDSPREGS 56 97#endif 98 99#ifdef __KERNEL__ 100#include <asm/addrspace.h> 101 102#define user_mode(regs) (((regs)->sr & 0x40000000)==0) 103#define instruction_pointer(regs) ((unsigned long)(regs)->pc) 104 105extern void show_regs(struct pt_regs *); 106 107/* 108 * These are defined as per linux/ptrace.h. 109 */ 110struct task_struct; 111 112#define arch_has_single_step() (1) 113extern void user_enable_single_step(struct task_struct *); 114extern void user_disable_single_step(struct task_struct *); 115 116#ifdef CONFIG_SH_DSP 117#define task_pt_regs(task) \ 118 ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \ 119 - sizeof(struct pt_dspregs) - sizeof(unsigned long)) - 1) 120#else 121#define task_pt_regs(task) \ 122 ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \ 123 - sizeof(unsigned long)) - 1) 124#endif 125 126static inline unsigned long profile_pc(struct pt_regs *regs) 127{ 128 unsigned long pc = instruction_pointer(regs); 129 130#ifdef P2SEG 131 if (pc >= P2SEG && pc < P3SEG) 132 pc -= 0x20000000; 133#endif 134 135 return pc; 136} 137#endif /* __KERNEL__ */ 138 139#endif /* __ASM_SH_PTRACE_H */