patch-1.3.45 linux/include/asm-ppc/ptrace.h
Next file: linux/include/asm-ppc/resource.h
Previous file: linux/include/asm-ppc/processor.h
Back to the patch index
Back to the overall index
- Lines: 53
- Date:
Sat Nov 25 19:49:06 1995
- Orig file:
v1.3.44/linux/include/asm-ppc/ptrace.h
- Orig date:
Thu Jan 1 02:00:00 1970
diff -u --recursive --new-file v1.3.44/linux/include/asm-ppc/ptrace.h linux/include/asm-ppc/ptrace.h
@@ -0,0 +1,52 @@
+#ifndef _PPC_PTRACE_H
+#define _PPC_PTRACE_H
+
+
+/*
+ * This struct defines the way the registers are stored on the
+ * kernel stack during a system call or other kernel entry.
+ * Note: the "_overhead" and "_underhead" spaces are stack locations
+ * used by called routines. Because of the way the PowerPC ABI
+ * specifies the function prologue/epilogue, registers can be
+ * saved in stack locations which are below the current stack
+ * pointer (_underhead). If an interrupt occurs during this
+ * [albeit] small time interval, registers which were saved on
+ * the stack could be trashed by the interrupt save code. The
+ * "_underhead" leaves a hole just in case this happens. It also
+ * wastes 80 bytes of stack if it doesn't! Similarly, the called
+ * routine stores some information "above" the stack pointer before
+ * if gets adjusted. This is covered by the "_overhead" field
+ * and [thankfully] is not totally wasted.
+ *
+ */
+
+struct pt_regs {
+ unsigned long _overhead[14]; /* Callee's SP,LR,params */
+ unsigned long gpr[32];
+ unsigned long nip;
+ unsigned long msr;
+ unsigned long ctr;
+ unsigned long link;
+ unsigned long ccr;
+ unsigned long xer;
+ unsigned long dar; /* Fault registers */
+ unsigned long dsisr;
+ unsigned long hash1, hash2;
+ unsigned long imiss, dmiss;
+ unsigned long icmp, dcmp;
+ unsigned long orig_gpr3; /* Used for restarting system calls */
+ unsigned long result; /* Result of a system call */
+ double fpr[4]; /* Caution! Only FP0-FP3 save on interrupts */
+ double fpcsr;
+ unsigned long trap; /* Reason for being here */
+ unsigned long marker; /* Should have DEADDEAD */
+ unsigned long _underhead[20]; /* Callee's register save area */
+ unsigned long edx; /* for binfmt_elf.c which wants edx */
+};
+
+#define instruction_pointer(regs) ((regs)->nip)
+#define user_mode(regs) ((regs)->msr & 0x4000)
+extern void show_regs(struct pt_regs *);
+
+#endif
+
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov
with Sam's (original) version of this