uboot/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 * from linux kernel code.
   7 */
   8
   9/*
  10 * GCC defines register number like this:
  11 * -----------------------------
  12 *       0 - 15 are integer registers
  13 *      17 - 22 are control/special registers
  14 *      24 - 39 fp registers
  15 *      40 - 47 xd registers
  16 *      48 -    fpscr register
  17 * -----------------------------
  18 *
  19 * We follows above, except:
  20 *      16 --- program counter (PC)
  21 *      22 --- syscall #
  22 *      23 --- floating point communication register
  23 */
  24#define REG_REG0         0
  25#define REG_REG15       15
  26
  27#define REG_PC          16
  28
  29#define REG_PR          17
  30#define REG_SR          18
  31#define REG_GBR         19
  32#define REG_MACH        20
  33#define REG_MACL        21
  34
  35#define REG_SYSCALL     22
  36
  37#define REG_FPREG0      23
  38#define REG_FPREG15     38
  39#define REG_XFREG0      39
  40#define REG_XFREG15     54
  41
  42#define REG_FPSCR       55
  43#define REG_FPUL        56
  44
  45/* options set using PTRACE_SETOPTIONS */
  46#define PTRACE_O_TRACESYSGOOD     0x00000001
  47
  48/*
  49 * This struct defines the way the registers are stored on the
  50 * kernel stack during a system call or other kernel entry.
  51 */
  52struct pt_regs {
  53        unsigned long regs[16];
  54        unsigned long pc;
  55        unsigned long pr;
  56        unsigned long sr;
  57        unsigned long gbr;
  58        unsigned long mach;
  59        unsigned long macl;
  60        long tra;
  61};
  62
  63/*
  64 * This struct defines the way the DSP registers are stored on the
  65 * kernel stack during a system call or other kernel entry.
  66 */
  67struct pt_dspregs {
  68        unsigned long   a1;
  69        unsigned long   a0g;
  70        unsigned long   a1g;
  71        unsigned long   m0;
  72        unsigned long   m1;
  73        unsigned long   a0;
  74        unsigned long   x0;
  75        unsigned long   x1;
  76        unsigned long   y0;
  77        unsigned long   y1;
  78        unsigned long   dsr;
  79        unsigned long   rs;
  80        unsigned long   re;
  81        unsigned long   mod;
  82};
  83
  84#define PTRACE_GETDSPREGS       55
  85#define PTRACE_SETDSPREGS       56
  86
  87#ifdef __KERNEL__
  88#define user_mode(regs) (((regs)->sr & 0x40000000)==0)
  89#define instruction_pointer(regs) ((regs)->pc)
  90extern void show_regs(struct pt_regs *);
  91
  92#ifdef CONFIG_SH_DSP
  93#define task_pt_regs(task) \
  94        ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \
  95                 - sizeof(struct pt_dspregs) - sizeof(unsigned long)) - 1)
  96#else
  97#define task_pt_regs(task) \
  98        ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \
  99                 - sizeof(unsigned long)) - 1)
 100#endif
 101
 102static inline unsigned long profile_pc(struct pt_regs *regs)
 103{
 104        unsigned long pc = instruction_pointer(regs);
 105
 106        if (pc >= 0xa0000000UL && pc < 0xc0000000UL)
 107                pc -= 0x20000000;
 108        return pc;
 109}
 110#endif
 111
 112#endif /* __ASM_SH_PTRACE_H */
 113