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-devel

[Xen-devel] [PATCH 1/2] 32bit gdbserver-xen/libxc to debug 64bit guest

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 1/2] 32bit gdbserver-xen/libxc to debug 64bit guest
From: Mukesh Rathor <mukesh.rathor@xxxxxxxxxx>
Date: Thu, 01 Nov 2007 19:15:51 -0700
Delivery-date: Thu, 01 Nov 2007 19:18:33 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: Oracle Corp
Reply-to: mukesh.rathor@xxxxxxxxxx
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.5 (X11/20070719)
part 1 : files changed in gdbserver xen-sparse tree.
diff -uNpr 
xen-3.1.1-ovs.orig/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/linux-xen-low.c
 
xen-3.1.1-ovs.new/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/linux-xen-low.c
--- 
xen-3.1.1-ovs.orig/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/linux-xen-low.c
    2007-09-12 17:43:17.000000000 -0700
+++ 
xen-3.1.1-ovs.new/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/linux-xen-low.c
     2007-10-31 16:52:29.291343000 -0700
@@ -22,6 +22,10 @@
 #include "server.h"
 #include "linux-low.h"
 
+#ifdef _GDB_CROSS_COMP
+#include "user.h"
+#endif
+
 #include <sys/wait.h>
 #include <stdio.h>
 #include <sys/param.h>
@@ -69,8 +73,13 @@ struct pending_signals
   struct pending_signals *prev;
 };
 
-#define PTRACE_ARG3_TYPE long
-#define PTRACE_XFER_TYPE long
+#ifdef _GDB_CROSS_COMP
+#define PTRACE_ARG3_TYPE unsigned long long
+#define PTRACE_XFER_TYPE unsigned long long
+#else
+#define PTRACE_ARG3_TYPE unsigned long 
+#define PTRACE_XFER_TYPE unsigned long
+#endif
 
 static int use_regsets_p = 1;
 
@@ -157,7 +166,8 @@ linux_attach (int domid)
     add_thread (0, new_process);
     new_process->stop_expected = 0;
 
-    if (xc_ptrace (xc_handle, PTRACE_ATTACH, domid, 0, isfile) != 0) {
+    if (xc_ptrace(xc_handle, PTRACE_ATTACH, domid, 0,(PTRACE_XFER_TYPE)isfile))
+    {
        fprintf (stderr, "Cannot attach to domain %d: %s (%d)\n", domid,
                 strerror (errno), errno);
        fflush (stderr);
@@ -261,8 +271,7 @@ regsets_fetch_inferior_registers ()
 
       buf = malloc (regset->size);
       res = xc_ptrace (xc_handle, regset->get_request, 
-                     curvcpuid(),
-                     0, (PTRACE_XFER_TYPE)buf);
+                     curvcpuid(), 0, (PTRACE_XFER_TYPE)buf);
       if (res < 0)
        {
          if (errno == EIO)
@@ -314,7 +323,8 @@ regsets_store_inferior_registers ()
 
       buf = malloc (regset->size);
       regset->fill_function (buf);
-      res = xc_ptrace (xc_handle, regset->set_request, curvcpuid(), 0, 
(PTRACE_XFER_TYPE)buf);
+      res = xc_ptrace (xc_handle, regset->set_request, curvcpuid(), 
+                       0, (PTRACE_XFER_TYPE)buf);
       if (res < 0)
        {
          if (errno == EIO)
@@ -392,7 +402,8 @@ linux_read_memory (CORE_ADDR memaddr, ch
   for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
     {
       errno = 0;
-      buffer[i] = xc_ptrace (xc_handle, PTRACE_PEEKTEXT, curvcpuid(), 
(PTRACE_ARG3_TYPE) addr, 0);
+      buffer[i] = xc_ptrace (xc_handle, PTRACE_PEEKTEXT, curvcpuid(), 
+                             (PTRACE_ARG3_TYPE)addr, 0);
       if (errno)
        return errno;
     }
@@ -418,7 +429,7 @@ linux_write_memory (CORE_ADDR memaddr, c
   register int count
   = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1) / sizeof 
(PTRACE_XFER_TYPE);
   /* Allocate buffer of that many longwords.  */
-  register PTRACE_XFER_TYPE *buffer = (PTRACE_XFER_TYPE *) alloca (count * 
sizeof (PTRACE_XFER_TYPE));
+  register PTRACE_XFER_TYPE *buffer = (PTRACE_XFER_TYPE*)alloca(count * 
sizeof(PTRACE_XFER_TYPE));
   extern int errno;
 
   TRACE_ENTER;
@@ -426,15 +437,13 @@ linux_write_memory (CORE_ADDR memaddr, c
   /* Fill start and end extra bytes of buffer with existing memory data.  */
 
   buffer[0] = xc_ptrace (xc_handle, PTRACE_PEEKTEXT, curvcpuid(),
-                     (PTRACE_ARG3_TYPE) addr, 0);
+                        (PTRACE_ARG3_TYPE)addr, 0);
 
   if (count > 1)
     {
       buffer[count - 1]
        = xc_ptrace (xc_handle, PTRACE_PEEKTEXT, curvcpuid(),
-                 (PTRACE_ARG3_TYPE) (addr + (count - 1)
-                                     * sizeof (PTRACE_XFER_TYPE)),
-                 0);
+                    (PTRACE_ARG3_TYPE)(addr + (count - 1) * 
sizeof(PTRACE_ARG3_TYPE)), 0);
     }
 
   /* Copy data to be written over corresponding part of buffer */
@@ -446,7 +455,7 @@ linux_write_memory (CORE_ADDR memaddr, c
     {
       errno = 0;
       xc_ptrace (xc_handle, PTRACE_POKETEXT, curvcpuid(), 
-               (PTRACE_ARG3_TYPE) addr, buffer[i]);
+                (PTRACE_ARG3_TYPE) addr, buffer[i]);
       if (errno)
        return errno;
     }
diff -uNpr 
xen-3.1.1-ovs.orig/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/Makefile.in
 
xen-3.1.1-ovs.new/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/Makefile.in
--- 
xen-3.1.1-ovs.orig/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/Makefile.in
        2007-09-12 17:43:17.000000000 -0700
+++ 
xen-3.1.1-ovs.new/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/Makefile.in
 2007-10-31 16:52:29.286344000 -0700
@@ -135,6 +135,14 @@ OBS = inferiors.o regcache.o remote-util
        $(DEPFILES)
 GDBSERVER_LIBS = @GDBSERVER_LIBS@
 
+# if cross compiling to get a 32binary on a 64bit system, we statically link
+# the xenctrl lib, so as not to break anything
+ifneq "$(findstring _GDB_CROSS_COMP, $(CFLAGS))" ""
+        STATIC_LNK=-Wl,-Bstatic
+        STATIC_UNLNK=-Wl,-Bdynamic
+endif
+
+
 # Prevent Sun make from putting in the machine type.  Setting
 # TARGET_ARCH to nothing works for SunOS 3, 4.0, but not for 4.1.
 .c.o:
@@ -172,7 +180,7 @@ clean-info:
 gdbserver-xen: $(OBS) ${ADD_DEPS} ${CDEPS}
        rm -f gdbserver-xen
        ${CC-LD} $(GLOBAL_CFLAGS) $(LDFLAGS) -o gdbserver-xen $(OBS) \
-         $(GDBSERVER_LIBS) $(XM_CLIBS)
+         $(STATIC_LNK) $(GDBSERVER_LIBS) $(STATIC_UNLNK) $(XM_CLIBS)
 
 gdbreplay: gdbreplay.o
        rm -f gdbreplay
diff -uNpr 
xen-3.1.1-ovs.orig/tools/debugger/gdb/gdb-6.2.1-xen-sparse/mkbuildtree 
xen-3.1.1-ovs.new/tools/debugger/gdb/gdb-6.2.1-xen-sparse/mkbuildtree
--- xen-3.1.1-ovs.orig/tools/debugger/gdb/gdb-6.2.1-xen-sparse/mkbuildtree      
2007-09-12 17:43:17.000000000 -0700
+++ xen-3.1.1-ovs.new/tools/debugger/gdb/gdb-6.2.1-xen-sparse/mkbuildtree       
2007-10-31 16:52:29.330342000 -0700
@@ -66,7 +66,7 @@ relative_lndir ()
     (
     cd $i
     pref=`echo $i | sed -e 's#/[^/]*#../#g' -e 's#^\.##'`
-    for j in `find . -type f -o -type l -maxdepth 1`; do
+    for j in `find . -maxdepth 1 -type f -o -type l`; do
       ln -sf ${pref}${REAL_DIR}/$i/$j ${SYMLINK_DIR}/$i/$j
     done
     )
diff -uNpr xen-3.1.1-ovs.orig/tools/debugger/gdb/gdbbuild 
xen-3.1.1-ovs.new/tools/debugger/gdb/gdbbuild
--- xen-3.1.1-ovs.orig/tools/debugger/gdb/gdbbuild      2007-09-12 
17:43:17.000000000 -0700
+++ xen-3.1.1-ovs.new/tools/debugger/gdb/gdbbuild       2007-10-31 
16:52:29.334344000 -0700
@@ -22,7 +22,14 @@ cd gdb-$GDB_VERSION-linux-i386-xen
 if [ "$MAKE" ]; then
     $MAKE
 elif which gmake ; then
-    gmake -j4
+    MAKE="gmake -j4"
 else
-    make -j4
+    MAKE="make -j4"
+fi
+
+if [[ $1 == _GDB_CROSS_COMP ]]
+then
+       $MAKE CFLAGS="-m32 -D_GDB_CROSS_COMP -D __x86_64__" LDFLAGS="-m32"
+else
+       $MAKE
 fi
diff -uNpr xen-3.1.1-ovs.orig/tools/debugger/gdb/README 
xen-3.1.1-ovs.new/tools/debugger/gdb/README
--- xen-3.1.1-ovs.orig/tools/debugger/gdb/README        2007-09-12 
17:43:17.000000000 -0700
+++ xen-3.1.1-ovs.new/tools/debugger/gdb/README 2007-11-01 17:41:37.059119000 
-0700
@@ -5,11 +5,37 @@ DomU & HVM GDB server for 32-bit (PAE an
 Lines marked below with [*] are optional, if you want full
 source-level debugging of your kernel image.
 
-To build the GDB server:
- 0. Build rest of the Xen first from the base directory
- 1. Run ./gdbbuild from within this directory.
- 2. Copy ./gdb-6.2.1-linux-i386-xen/gdb/gdbserver/gdbserver-xen
-    to your test machine.
+gdbserver can run on 32bit or 64bit dom0. It can attach to a 32 bit non-PAE,
+a 32bit PAE, or an x86_64 guest:
+
+            32 non-PAE        32 PAE        x86_64
+32 dom0:        Y               Y             Y
+64 dom0:        ?               ?             Y
+
+
+TO BUILD: Involves two steps, building libxc and gdbserver-xen. After building,
+          copy gdbserver-xen, and possibly libxc to dom0:
+
+32 non-PAE (build on 32bit box) or x86_64 (build on x86_64 box) :
+    1. Build libxc first by running >make
+    2. Build gdbserver-xen by running >gdbbuild
+    3. copy ./gdb-6.2.1-linux-i386-xen/gdb/gdbserver/gdbserver-xen to dom0
+
+32 PAE (build on 32bit box) :
+    1. Build libxc first by running 
+        >CFLAGS="-D_CROSS_COMP_PAE" make
+    2. Build gdbserver-xen by running 
+        >gdbbuild
+    3. copy gdbserver-xen  and libxenctrl.so.3.0.0 to dom0
+
+x86_64 (build on x86_64 box to run on 32 domU) :
+    1. Build libxc first by running 
+        >CFLAGS="-m32 -D_GDB_CROSS_COMP" make
+    2. Build gdbserver-xen by running 
+        >gdbbuild  _GDB_CROSS_COMP
+    3. copy gdbserver-xen to dom0 (libxenctrl is statically linked in this 
case)
+
+
 
 To build a debuggable guest domU kernel image:
  1. cd linux-2.6.xx-xenU
@@ -28,6 +54,8 @@ To debug a running guest:
     # target remote 127.0.0.1:9999
     # bt
     # disass
+ 5. gdb could be running on a different host, in which case:
+    # target remote 127.11.11.11:9999 where 127.11.11.11 is the xen host.
 
 To debug a crashed domU guest:
  1. Add '(enable-dump yes)' to /etc/xen/xend-config.sxp before
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH 1/2] 32bit gdbserver-xen/libxc to debug 64bit guest, Mukesh Rathor <=