linux/arch/sh/include/asm/ptrace.h
<<
>>
Prefs
   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        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#endif
  90
  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
  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
 102#define PTRACE_GETDSPREGS       55      /* DSP registers */
 103#define PTRACE_SETDSPREGS       56
 104
 105#define PT_TEXT_END_ADDR        240
 106#define PT_TEXT_ADDR            244     /* &(struct user)->start_code */
 107#define PT_DATA_ADDR            248     /* &(struct user)->start_data */
 108#define PT_TEXT_LEN             252
 109
 110#ifdef __KERNEL__
 111#include <asm/addrspace.h>
 112
 113#define user_mode(regs)                 (((regs)->sr & 0x40000000)==0)
 114#define instruction_pointer(regs)       ((unsigned long)(regs)->pc)
 115
 116extern void show_regs(struct pt_regs *);
 117
 118/*
 119 * These are defined as per linux/ptrace.h.
 120 */
 121struct task_struct;
 122
 123#define arch_has_single_step()  (1)
 124extern void user_enable_single_step(struct task_struct *);
 125extern void user_disable_single_step(struct task_struct *);
 126
 127#define task_pt_regs(task) \
 128        ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE) - 1)
 129
 130static inline unsigned long profile_pc(struct pt_regs *regs)
 131{
 132        unsigned long pc = instruction_pointer(regs);
 133
 134#ifdef P2SEG
 135        if (pc >= P2SEG && pc < P3SEG)
 136                pc -= 0x20000000;
 137#endif
 138
 139        return pc;
 140}
 141#endif /* __KERNEL__ */
 142
 143#endif /* __ASM_SH_PTRACE_H */
 144