]> err.no Git - linux-2.6/commitdiff
[SPARC64]: Store magic cookie and trap type in pt_regs.
authorDavid S. Miller <davem@davemloft.net>
Thu, 24 Apr 2008 05:52:13 +0000 (22:52 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 24 Apr 2008 06:32:20 +0000 (23:32 -0700)
This sets us up for several simplifications and facilities:

1) The magic cookie lets us identify trap frames more
   accurately in stack backtraces.

2) The trap type lets us simplify all of the "are we in
   a syscall" state management and checks.

3) We can now see if a task off the cpu is sleeping in
   a system call or not.  In fact, we can see what
   trap it is sleeping in whatever the type.  The utrace
   guys will use this.

Based upon some discussions with Roland McGrath.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc64/kernel/etrap.S
include/asm-sparc64/ptrace.h

index 4b2bf9eb447a1f5eaa7c93b27627c0c217a9937b..b49d3b60bc0ca267cb79a61dc293c29d7faae83b 100644 (file)
@@ -53,7 +53,11 @@ etrap_irq:
                stx     %g3, [%g2 + STACKFRAME_SZ + PT_V9_TPC]
                rd      %y, %g3
                stx     %g1, [%g2 + STACKFRAME_SZ + PT_V9_TNPC]
+               rdpr    %tt, %g1
                st      %g3, [%g2 + STACKFRAME_SZ + PT_V9_Y]
+               sethi   %hi(PT_REGS_MAGIC), %g3
+               or      %g3, %g1, %g1
+               st      %g1, [%g2 + STACKFRAME_SZ + PT_V9_MAGIC]
 
                rdpr    %cansave, %g1
                brnz,pt %g1, etrap_save
index 6da197803efcd501fbf81ab2ca0a59572b41fd9c..b4b951d570bbf3915fdf5ddad8624c95f70b453c 100644 (file)
@@ -8,6 +8,8 @@
  * stack during a system call and basically all traps.
  */
 
+#define PT_REGS_MAGIC 0x57ac6c00
+
 #ifndef __ASSEMBLY__
 
 struct pt_regs {
@@ -16,7 +18,19 @@ struct pt_regs {
        unsigned long tpc;
        unsigned long tnpc;
        unsigned int y;
-       unsigned int fprs;
+
+       /* We encode a magic number, PT_REGS_MAGIC, along
+        * with the %tt (trap type) register value at trap
+        * entry time.  The magic number allows us to identify
+        * accurately a trap stack frame in the stack
+        * unwinder, and the %tt value allows us to test
+        * things like "in a system call" etc. for an arbitray
+        * process.
+        *
+        * The PT_REGS_MAGIC is choosen such that it can be
+        * loaded completely using just a sethi instruction.
+        */
+       unsigned int magic;
 };
 
 struct pt_regs32 {
@@ -147,7 +161,7 @@ extern void __show_regs(struct pt_regs *);
 #define PT_V9_TPC    0x88
 #define PT_V9_TNPC   0x90
 #define PT_V9_Y      0x98
-#define PT_V9_FPRS   0x9c
+#define PT_V9_MAGIC  0x9c
 #define PT_TSTATE      PT_V9_TSTATE
 #define PT_TPC         PT_V9_TPC
 #define PT_TNPC                PT_V9_TNPC