|
@@ -19,10 +19,26 @@
|
|
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
|
|
-struct kimage;
|
|
|
-/* Provide a dummy definition to avoid build failures. */
|
|
|
+/**
|
|
|
+ * crash_setup_regs() - save registers for the panic kernel
|
|
|
+ * @newregs: registers are saved here
|
|
|
+ * @oldregs: registers to be saved (may be %NULL)
|
|
|
+ *
|
|
|
+ * Function copies machine registers from @oldregs to @newregs. If @oldregs is
|
|
|
+ * %NULL then current registers are stored there.
|
|
|
+ */
|
|
|
static inline void crash_setup_regs(struct pt_regs *newregs,
|
|
|
- struct pt_regs *oldregs) { }
|
|
|
+ struct pt_regs *oldregs)
|
|
|
+{
|
|
|
+ if (oldregs) {
|
|
|
+ memcpy(newregs, oldregs, sizeof(*newregs));
|
|
|
+ } else {
|
|
|
+ __asm__ __volatile__ ("stmia %0, {r0 - r15}"
|
|
|
+ : : "r" (&newregs->ARM_r0));
|
|
|
+ __asm__ __volatile__ ("mrs %0, cpsr"
|
|
|
+ : "=r" (newregs->ARM_cpsr));
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|