[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 1/2] 32bit gdbserver-xen/libxc to debug 64bit guest
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |