root/include/asm-ppc/ptrace.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 #ifndef _PPC_PTRACE_H
   2 #define _PPC_PTRACE_H
   3 
   4 
   5 /*
   6  * This struct defines the way the registers are stored on the
   7  * kernel stack during a system call or other kernel entry.
   8  * Note: the "_overhead" and "_underhead" spaces are stack locations
   9  * used by called routines.  Because of the way the PowerPC ABI
  10  * specifies the function prologue/epilogue, registers can be
  11  * saved in stack locations which are below the current stack
  12  * pointer (_underhead).  If an interrupt occurs during this
  13  * [albeit] small time interval, registers which were saved on
  14  * the stack could be trashed by the interrupt save code.  The
  15  * "_underhead" leaves a hole just in case this happens.  It also
  16  * wastes 80 bytes of stack if it doesn't!  Similarly, the called
  17  * routine stores some information "above" the stack pointer before
  18  * if gets adjusted.  This is covered by the "_overhead" field
  19  * and [thankfully] is not totally wasted.
  20  *
  21  */
  22 
  23 struct pt_regs {
  24         unsigned long _overhead[14]; /* Callee's SP,LR,params */
  25         unsigned long gpr[32];
  26         unsigned long nip;
  27         unsigned long msr;
  28         unsigned long ctr;
  29         unsigned long link;
  30         unsigned long ccr;
  31         unsigned long xer;
  32         unsigned long dar;      /* Fault registers */
  33         unsigned long dsisr;
  34         unsigned long hash1, hash2;
  35         unsigned long imiss, dmiss;
  36         unsigned long icmp, dcmp;
  37         unsigned long orig_gpr3; /* Used for restarting system calls */
  38         unsigned long result;    /* Result of a system call */
  39         double        fpr[4];    /* Caution! Only FP0-FP3 save on interrupts */
  40         double        fpcsr;
  41         unsigned long trap;     /* Reason for being here */
  42         unsigned long marker;   /* Should have DEADDEAD */
  43         unsigned long _underhead[20]; /* Callee's register save area */
  44         unsigned long edx;      /* for binfmt_elf.c which wants edx */
  45 };
  46 
  47 #define instruction_pointer(regs) ((regs)->nip)
  48 #define user_mode(regs) ((regs)->msr & 0x4000)
  49 extern void show_regs(struct pt_regs *);
  50 
  51 #endif
  52 

/* [previous][next][first][last][top][bottom][index][help] */