patch-2.4.25 linux-2.4.25/include/asm-mips64/ptrace.h

Next file: linux-2.4.25/include/asm-mips64/r4kcache.h
Previous file: linux-2.4.25/include/asm-mips64/processor.h
Back to the patch index
Back to the overall index

diff -urN linux-2.4.24/include/asm-mips64/ptrace.h linux-2.4.25/include/asm-mips64/ptrace.h
@@ -21,37 +21,62 @@
 
 #ifndef __ASSEMBLY__
 
-#define abi64_no_regargs						\
-	unsigned long __dummy0,						\
-	unsigned long __dummy1,						\
-	unsigned long __dummy2,						\
-	unsigned long __dummy3,						\
-	unsigned long __dummy4,						\
-	unsigned long __dummy5,						\
-	unsigned long __dummy6,						\
-	unsigned long __dummy7
-
 /*
  * This struct defines the way the registers are stored on the stack during a
  * system call/exception. As usual the registers k0/k1 aren't being saved.
  */
 struct pt_regs {
+	/* Pad bytes for argument save space on the stack. */
+	unsigned long pad0[6];
+
 	/* Saved main processor registers. */
 	unsigned long regs[32];
 
-	/* Other saved registers. */
+	/* Saved special registers. */
+	unsigned long cp0_status;
 	unsigned long lo;
 	unsigned long hi;
-
-	/*
-	 * saved cp0 registers
-	 */
-	unsigned long cp0_epc;
 	unsigned long cp0_badvaddr;
-	unsigned long cp0_status;
 	unsigned long cp0_cause;
+	unsigned long cp0_epc;
 };
 
+#define __str2(x) #x
+#define __str(x) __str2(x)
+
+#define save_static_function(symbol)                                    \
+__asm__ (                                                               \
+        ".globl\t" #symbol "\n\t"                                       \
+        ".align\t2\n\t"                                                 \
+        ".type\t" #symbol ", @function\n\t"                             \
+        ".ent\t" #symbol ", 0\n"                                        \
+        #symbol":\n\t"                                                  \
+        ".frame\t$29, 0, $31\n\t"                                       \
+        "sd\t$16,"__str(PT_R16)"($29)\t\t\t# save_static_function\n\t"  \
+        "sd\t$17,"__str(PT_R17)"($29)\n\t"                              \
+        "sd\t$18,"__str(PT_R18)"($29)\n\t"                              \
+        "sd\t$19,"__str(PT_R19)"($29)\n\t"                              \
+        "sd\t$20,"__str(PT_R20)"($29)\n\t"                              \
+        "sd\t$21,"__str(PT_R21)"($29)\n\t"                              \
+        "sd\t$22,"__str(PT_R22)"($29)\n\t"                              \
+        "sd\t$23,"__str(PT_R23)"($29)\n\t"                              \
+        "sd\t$30,"__str(PT_R30)"($29)\n\t"                              \
+        ".end\t" #symbol "\n\t"                                         \
+        ".size\t" #symbol",. - " #symbol)
+
+/* Used in declaration of save_static functions.  */
+#define static_unused static __attribute__((unused))
+
+#define abi64_no_regargs						\
+	unsigned long __dummy0,						\
+	unsigned long __dummy1,						\
+	unsigned long __dummy2,						\
+	unsigned long __dummy3,						\
+	unsigned long __dummy4,						\
+	unsigned long __dummy5,						\
+	unsigned long __dummy6,						\
+	unsigned long __dummy7
+
 #endif /* !__ASSEMBLY__ */
 
 /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)