WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [IA64] Kexec: Implement elf_core_save_reg

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] Kexec: Implement elf_core_save_regs()
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 04 Oct 2007 17:41:09 -0700
Delivery-date: Thu, 04 Oct 2007 17:43:59 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1190932183 21600
# Node ID 83239b2890723e0c06bad507bb273a970784b18e
# Parent  cbe97b8802e928233b9e4de9db6bbd1c40391b6f
[IA64] Kexec: Implement elf_core_save_regs()

Implement elf_core_save_regs() by porting (un #ifdefing)
ia64_elf_core_copy_regs() from Linux.

This ommits the calls to ia64_get_user_rbs_end() and ia64_sync_user_rbs()
in do_copy_task_regs(). Supplying them would seem to involve a reasonably
involved ammount of porting. I'm really not sure that its neccessary.

Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>
---
 xen/arch/ia64/linux-xen/process-linux-xen.c |   17 +++++++++++++++++
 xen/include/asm-ia64/elf.h                  |   25 +++++++++++++++++++------
 2 files changed, 36 insertions(+), 6 deletions(-)

diff -r cbe97b8802e9 -r 83239b289072 xen/arch/ia64/linux-xen/process-linux-xen.c
--- a/xen/arch/ia64/linux-xen/process-linux-xen.c       Thu Sep 27 16:26:34 
2007 -0600
+++ b/xen/arch/ia64/linux-xen/process-linux-xen.c       Thu Sep 27 16:29:43 
2007 -0600
@@ -13,6 +13,7 @@
 #include <xen/symbols.h>
 #include <xen/smp.h>
 #include <xen/sched.h>
+#include <asm/elf.h>
 #include <asm/uaccess.h>
 #include <asm/processor.h>
 #include <asm/ptrace.h>
@@ -542,6 +543,8 @@ copy_thread (int nr, unsigned long clone
        return retval;
 }
 
+#endif /* !XEN */
+
 static void
 do_copy_task_regs (struct task_struct *task, struct unw_frame_info *info, void 
*arg)
 {
@@ -559,10 +562,14 @@ do_copy_task_regs (struct task_struct *t
        unw_get_sp(info, &sp);
        pt = (struct pt_regs *) (sp + 16);
 
+#ifndef XEN
+       /* FIXME: Is this needed by XEN when it makes its crash notes
+        * during kdump? */
        urbs_end = ia64_get_user_rbs_end(task, pt, &cfm);
 
        if (ia64_sync_user_rbs(task, info->sw, pt->ar_bspstore, urbs_end) < 0)
                return;
+#endif /* !XEN */
 
        ia64_peek(task, info->sw, urbs_end, (long) ia64_rse_rnat_addr((long *) 
urbs_end),
                  &ar_rnat);
@@ -614,6 +621,8 @@ do_copy_task_regs (struct task_struct *t
        unw_get_ar(info, UNW_AR_SSD, &dst[56]);
 }
 
+#ifndef XEN
+
 void
 do_dump_task_fpu (struct task_struct *task, struct unw_frame_info *info, void 
*arg)
 {
@@ -635,11 +644,15 @@ do_dump_task_fpu (struct task_struct *ta
                memcpy(dst + 32, task->thread.fph, 96*16);
 }
 
+#endif /* !XEN */
+
 void
 do_copy_regs (struct unw_frame_info *info, void *arg)
 {
        do_copy_task_regs(current, info, arg);
 }
+
+#ifndef XEN
 
 void
 do_dump_fpu (struct unw_frame_info *info, void *arg)
@@ -662,11 +675,15 @@ dump_task_regs(struct task_struct *task,
        return 1;
 }
 
+#endif /* !XEN */
+
 void
 ia64_elf_core_copy_regs (struct pt_regs *pt, elf_gregset_t dst)
 {
        unw_init_running(do_copy_regs, dst);
 }
+
+#ifndef XEN
 
 int
 dump_task_fpu (struct task_struct *task, elf_fpregset_t *dst)
diff -r cbe97b8802e9 -r 83239b289072 xen/include/asm-ia64/elf.h
--- a/xen/include/asm-ia64/elf.h        Thu Sep 27 16:26:34 2007 -0600
+++ b/xen/include/asm-ia64/elf.h        Thu Sep 27 16:29:43 2007 -0600
@@ -1,7 +1,5 @@
 #ifndef __IA64_ELF_H__
 #define __IA64_ELF_H__
-
-#include <xen/lib.h>       /* for printk() used in stub */
 
 typedef struct {
     unsigned long r1;
@@ -20,14 +18,29 @@ typedef struct {
     unsigned long ar_ssd;
 } ELF_Gregset;
 
-typedef struct {
-    unsigned long dummy;
-} crash_xen_core_t;
+/*
+ * elf_gregset_t contains the application-level state in the following order:
+ *     r0-r31
+ *     NaT bits (for r0-r31; bit N == 1 iff rN is a NaT)
+ *     predicate registers (p0-p63)
+ *     b0-b7
+ *     ip cfm psr
+ *     ar.rsc ar.bsp ar.bspstore ar.rnat
+ *     ar.ccv ar.unat ar.fpsr ar.pfs ar.lc ar.ec ar.csd ar.ssd
+ */
+#define ELF_NGREG      128 /* we really need just 72,
+                            * but let's leave some headroom */
+
+typedef unsigned long elf_greg_t;
+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
+typedef elf_gregset_t crash_xen_core_t;
+
+extern void ia64_elf_core_copy_regs (struct pt_regs *src, elf_gregset_t dst);
 
 static inline void elf_core_save_regs(ELF_Gregset *core_regs, 
                                       crash_xen_core_t *xen_core_regs)
 {
-    printk("STUB: " __FILE__ ": %s: not implemented\n", __FUNCTION__);
+    ia64_elf_core_copy_regs(NULL, *xen_core_regs);
 }
 
 #endif /* __IA64_ELF_H__ */

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] Kexec: Implement elf_core_save_regs(), Xen patchbot-unstable <=