powerpc: Prepare xmon_save_regs for use with kdump
authorAnton Vorontsov <avorontsov@ru.mvista.com>
Wed, 17 Dec 2008 10:08:55 +0000 (10:08 +0000)
committerPaul Mackerras <paulus@samba.org>
Tue, 23 Dec 2008 04:13:28 +0000 (15:13 +1100)
Today the arch/powerpc/xmon/setjmp.S file contains only the
xmon_save_regs function.  We want to use it for kdump purposes, so
let's move the file into arch/powerpc/kernel/ and give the function a
more generic name (ppc_save_regs).

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/include/asm/reg.h
arch/powerpc/kernel/Makefile
arch/powerpc/kernel/ppc_save_regs.S [new file with mode: 0644]
arch/powerpc/xmon/Makefile
arch/powerpc/xmon/setjmp.S [deleted file]
arch/powerpc/xmon/xmon.c

index c6d1ab650778fa440d6eb79fa25a1b0a3cc779aa..f484a343efba4b8f1372f2c6a8c92af1335d6b69 100644 (file)
@@ -783,6 +783,10 @@ extern void scom970_write(unsigned int address, unsigned long value);
 #define __get_SP()     ({unsigned long sp; \
                        asm volatile("mr %0,1": "=r" (sp)); sp;})
 
+struct pt_regs;
+
+extern void ppc_save_regs(struct pt_regs *regs);
+
 #endif /* __ASSEMBLY__ */
 #endif /* __KERNEL__ */
 #endif /* _ASM_POWERPC_REG_H */
index 92673b43858d067d6ccfab7a1cc083018d4a5c4f..616c8891d858e4079aae5f6da54087945c0bbd21 100644 (file)
@@ -102,6 +102,10 @@ endif
 
 obj-$(CONFIG_PPC64)            += $(obj64-y)
 
+ifneq ($(CONFIG_XMON),)
+obj-y                          += ppc_save_regs.o
+endif
+
 extra-$(CONFIG_PPC_FPU)                += fpu.o
 extra-$(CONFIG_PPC64)          += entry_64.o
 
diff --git a/arch/powerpc/kernel/ppc_save_regs.S b/arch/powerpc/kernel/ppc_save_regs.S
new file mode 100644 (file)
index 0000000..5113bd2
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 1996 Paul Mackerras.
+ *
+ *      This program is free software; you can redistribute it and/or
+ *      modify it under the terms of the GNU General Public License
+ *      as published by the Free Software Foundation; either version
+ *      2 of the License, or (at your option) any later version.
+ *
+ * NOTE: assert(sizeof(buf) > 23 * sizeof(long))
+ */
+#include <asm/processor.h>
+#include <asm/ppc_asm.h>
+#include <asm/asm-offsets.h>
+
+/*
+ * Grab the register values as they are now.
+ * This won't do a particularily good job because we really
+ * want our caller's caller's registers, and our caller has
+ * already executed its prologue.
+ * ToDo: We could reach back into the caller's save area to do
+ * a better job of representing the caller's state (note that
+ * that will be different for 32-bit and 64-bit, because of the
+ * different ABIs, though).
+ */
+_GLOBAL(ppc_save_regs)
+       PPC_STL r0,0*SZL(r3)
+       PPC_STL r2,2*SZL(r3)
+       PPC_STL r3,3*SZL(r3)
+       PPC_STL r4,4*SZL(r3)
+       PPC_STL r5,5*SZL(r3)
+       PPC_STL r6,6*SZL(r3)
+       PPC_STL r7,7*SZL(r3)
+       PPC_STL r8,8*SZL(r3)
+       PPC_STL r9,9*SZL(r3)
+       PPC_STL r10,10*SZL(r3)
+       PPC_STL r11,11*SZL(r3)
+       PPC_STL r12,12*SZL(r3)
+       PPC_STL r13,13*SZL(r3)
+       PPC_STL r14,14*SZL(r3)
+       PPC_STL r15,15*SZL(r3)
+       PPC_STL r16,16*SZL(r3)
+       PPC_STL r17,17*SZL(r3)
+       PPC_STL r18,18*SZL(r3)
+       PPC_STL r19,19*SZL(r3)
+       PPC_STL r20,20*SZL(r3)
+       PPC_STL r21,21*SZL(r3)
+       PPC_STL r22,22*SZL(r3)
+       PPC_STL r23,23*SZL(r3)
+       PPC_STL r24,24*SZL(r3)
+       PPC_STL r25,25*SZL(r3)
+       PPC_STL r26,26*SZL(r3)
+       PPC_STL r27,27*SZL(r3)
+       PPC_STL r28,28*SZL(r3)
+       PPC_STL r29,29*SZL(r3)
+       PPC_STL r30,30*SZL(r3)
+       PPC_STL r31,31*SZL(r3)
+       /* go up one stack frame for SP */
+       PPC_LL  r4,0(r1)
+       PPC_STL r4,1*SZL(r3)
+       /* get caller's LR */
+       PPC_LL  r0,LRSAVE(r4)
+       PPC_STL r0,_NIP-STACK_FRAME_OVERHEAD(r3)
+       PPC_STL r0,_LINK-STACK_FRAME_OVERHEAD(r3)
+       mfmsr   r0
+       PPC_STL r0,_MSR-STACK_FRAME_OVERHEAD(r3)
+       mfctr   r0
+       PPC_STL r0,_CTR-STACK_FRAME_OVERHEAD(r3)
+       mfxer   r0
+       PPC_STL r0,_XER-STACK_FRAME_OVERHEAD(r3)
+       mfcr    r0
+       PPC_STL r0,_CCR-STACK_FRAME_OVERHEAD(r3)
+       li      r0,0
+       PPC_STL r0,_TRAP-STACK_FRAME_OVERHEAD(r3)
+       blr
index 51d97588e762e6fc9a55cae2d07c6598751343ba..9cb03b71b9d66535dbcb95abe9c44d9910739243 100644 (file)
@@ -4,7 +4,7 @@ ifdef CONFIG_PPC64
 EXTRA_CFLAGS += -mno-minimal-toc
 endif
 
-obj-y                  += xmon.o setjmp.o start.o nonstdio.o
+obj-y                  += xmon.o start.o nonstdio.o
 
 ifdef CONFIG_XMON_DISASSEMBLY
 obj-y                  += ppc-dis.o ppc-opc.o
diff --git a/arch/powerpc/xmon/setjmp.S b/arch/powerpc/xmon/setjmp.S
deleted file mode 100644 (file)
index 04c0b30..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 1996 Paul Mackerras.
- *
- *      This program is free software; you can redistribute it and/or
- *      modify it under the terms of the GNU General Public License
- *      as published by the Free Software Foundation; either version
- *      2 of the License, or (at your option) any later version.
- *
- * NOTE: assert(sizeof(buf) > 23 * sizeof(long))
- */
-#include <asm/processor.h>
-#include <asm/ppc_asm.h>
-#include <asm/asm-offsets.h>
-
-/*
- * Grab the register values as they are now.
- * This won't do a particularily good job because we really
- * want our caller's caller's registers, and our caller has
- * already executed its prologue.
- * ToDo: We could reach back into the caller's save area to do
- * a better job of representing the caller's state (note that
- * that will be different for 32-bit and 64-bit, because of the
- * different ABIs, though).
- */
-_GLOBAL(xmon_save_regs)
-       PPC_STL r0,0*SZL(r3)
-       PPC_STL r2,2*SZL(r3)
-       PPC_STL r3,3*SZL(r3)
-       PPC_STL r4,4*SZL(r3)
-       PPC_STL r5,5*SZL(r3)
-       PPC_STL r6,6*SZL(r3)
-       PPC_STL r7,7*SZL(r3)
-       PPC_STL r8,8*SZL(r3)
-       PPC_STL r9,9*SZL(r3)
-       PPC_STL r10,10*SZL(r3)
-       PPC_STL r11,11*SZL(r3)
-       PPC_STL r12,12*SZL(r3)
-       PPC_STL r13,13*SZL(r3)
-       PPC_STL r14,14*SZL(r3)
-       PPC_STL r15,15*SZL(r3)
-       PPC_STL r16,16*SZL(r3)
-       PPC_STL r17,17*SZL(r3)
-       PPC_STL r18,18*SZL(r3)
-       PPC_STL r19,19*SZL(r3)
-       PPC_STL r20,20*SZL(r3)
-       PPC_STL r21,21*SZL(r3)
-       PPC_STL r22,22*SZL(r3)
-       PPC_STL r23,23*SZL(r3)
-       PPC_STL r24,24*SZL(r3)
-       PPC_STL r25,25*SZL(r3)
-       PPC_STL r26,26*SZL(r3)
-       PPC_STL r27,27*SZL(r3)
-       PPC_STL r28,28*SZL(r3)
-       PPC_STL r29,29*SZL(r3)
-       PPC_STL r30,30*SZL(r3)
-       PPC_STL r31,31*SZL(r3)
-       /* go up one stack frame for SP */
-       PPC_LL  r4,0(r1)
-       PPC_STL r4,1*SZL(r3)
-       /* get caller's LR */
-       PPC_LL  r0,LRSAVE(r4)
-       PPC_STL r0,_NIP-STACK_FRAME_OVERHEAD(r3)
-       PPC_STL r0,_LINK-STACK_FRAME_OVERHEAD(r3)
-       mfmsr   r0
-       PPC_STL r0,_MSR-STACK_FRAME_OVERHEAD(r3)
-       mfctr   r0
-       PPC_STL r0,_CTR-STACK_FRAME_OVERHEAD(r3)
-       mfxer   r0
-       PPC_STL r0,_XER-STACK_FRAME_OVERHEAD(r3)
-       mfcr    r0
-       PPC_STL r0,_CCR-STACK_FRAME_OVERHEAD(r3)
-       li      r0,0
-       PPC_STL r0,_TRAP-STACK_FRAME_OVERHEAD(r3)
-       blr
index 076368c8b8a95e09f7c5f7cdd1cbf69a012d883c..8dfad7d9a0043298867d6b523347c57457e114b8 100644 (file)
@@ -41,6 +41,7 @@
 #include <asm/spu_priv1.h>
 #include <asm/firmware.h>
 #include <asm/setjmp.h>
+#include <asm/reg.h>
 
 #ifdef CONFIG_PPC64
 #include <asm/hvcall.h>
@@ -159,8 +160,6 @@ static int xmon_no_auto_backtrace;
 extern void xmon_enter(void);
 extern void xmon_leave(void);
 
-extern void xmon_save_regs(struct pt_regs *);
-
 #ifdef CONFIG_PPC64
 #define REG            "%.16lx"
 #define REGS_PER_LINE  4
@@ -532,7 +531,7 @@ int xmon(struct pt_regs *excp)
        struct pt_regs regs;
 
        if (excp == NULL) {
-               xmon_save_regs(&regs);
+               ppc_save_regs(&regs);
                excp = &regs;
        }