* Re: [RFC] gdb.server testcases (resend) @ 2005-05-19 14:46 Wu Zhou 2005-05-19 17:52 ` Manoj Iyer 2005-05-22 20:40 ` [RFC] gdb.server testcases (resend) Daniel Jacobowitz 0 siblings, 2 replies; 9+ messages in thread From: Wu Zhou @ 2005-05-19 14:46 UTC (permalink / raw) To: Manoj Iyer; +Cc: Daniel Jacobowitz, gdb-patches Quoting Manoj Iyer <manjo@austin.ibm.com>: > On the host side > ---------------- > ./gdbserver 9.3.190.182:1234 /tmp/test > Process /tmp/test created; pid = 8323 > Stop pc is 0x40010470 > Listening on port 1234 > Remote debugging from host 9.3.190.187 > readchar: Got EOF > Remote side has terminated connection. GDBserver will reopen the > connection. > Listening on port 1234 > It seems that file /tmp/test is a 32-bits binary. I also tried 64-bits gdbsrever against 64-bits binary, it worked somewhat better, but failed at another place. Below I will summarize my test results, wishing that it might be helpful to you. 1. 32-bits gdbserver with 32-bits debuggee on my power4 box, I can get a 32-bits gdbserver without "-m64" option. My test shows that it works well with 32-bits debuggee. 2. 64-bits gdbserver with 32-bits debuggee without Daniel's patch, the 64-bits gdbserver on my power4 box also report "reading register I/O error" at register 1. After applying Daniel's patch, gdbserver could start the 32-bits debuggee and begin to wait for the remote gdb's connection. On the host side, my gdb session is somewhat the same as yours. It seems that gdb at the host side expects 32-bits register, something like: T0501:ffffe6b0;40:40010470; but the remote gdbserver sends back 64-bits value: T0501:00000000ffffe6b0;40:0000000040010470; So it report "Remote register badly formatted" error. 3. 64-bits gdbserver with 64-bits debuggee With the patched 64-bits gdbserver. I could go some further with the 64-bits debuggee. The target side gdbserver session is like this: # ./gdbserver :2345 ../testsuite/gdb.base/break Process ../testsuite/gdb.base/break created; pid = 17669 Stop pc is 0x80000053e0 Listening on port 2345 Remote debugging from host 127.0.0.1 Stop pc is 0x8000013040 Stop pc is 0x8000013040 Stop pc is 0x80000075ec Stop pc is 0x8000013040 Stop pc is 0x8000013040 Stop pc is 0x8000012a20 Stop pc is 0x8000013040 Stop pc is 0x8000013040 Stop pc is 0x8000012aac Stop pc is 0x100006a8 Stop pc is 0x100006a8 ... The host side gdb session is like this: # ./gdb/gdb -q (gdb) file ./gdb/testsuite/gdb.base/break Reading symbols from ./gdb/testsuite/gdb.base/break...done. Using host libthread_db library "/lib64/tls/libthread_db.so.1". (gdb) target remote localhost:2345 Remote debugging using localhost:2345 0x00000080000053e0 in ?? () (gdb) bt #0 0x00000080000053e0 in ?? () #1 0x0000000000000000 in ?? () (gdb) b 94 Breakpoint 1 at 0x100006a8: file ../../gdb/testsuite/gdb.base/break.c, line 94. (gdb) c Continuing. Breakpoint 1, main (argc=1, argv=0x1fffffff328, envp=0x1fffffff338) at ../../gdb/testsuite/gdb.base/break.c:94 94 printf ("%d\n", factorial (atoi ("6"))); /* set breakpoint 1 here */ (gdb) s factorial (value=6) at ../../gdb/testsuite/gdb.base/break.c:111 111 if (value > 1) { /* set breakpoint 7 here */ (gdb) s 114 return (value); /* set breakpoint 19 here */ (gdb) n Program received signal SIGFPE, Arithmetic exception. 0x000000800013fd64 in .vfprintf () from /lib64/tls/libc.so.6 (gdb) > On remote side > -------------- > ./gdb > GNU gdb 6.3.50.20050516-cvs > Copyright 2004 Free Software Foundation, Inc. > GDB is free software, covered by the GNU General Public License, and you > are > welcome to change it and/or distribute copies of it under certain > conditions. > Type "show copying" to see the conditions. > There is absolutely no warranty for GDB. Type "show warranty" for > details. > This GDB was configured as "powerpc64-unknown-linux-gnu". > Setting up the environment for debugging gdb. > No symbol table is loaded. Use the "file" command. > No symbol table is loaded. Use the "file" command. > .gdbinit:8: Error in sourced command file: > No breakpoint number 0. > (gdb) file /tmp/test > Reading symbols from /tmp/test...done. > Using host libthread_db library "/lib64/tls/libthread_db.so.1". > (gdb) target remote 9.3.190.182:1234 > Remote debugging using 9.3.190.182:1234 > Remote register badly formatted: > T0501:00000000ffffe6b0;40:0000000040010470; > here: fffe6b0;40:0000000040010470; > (gdb) > > ----- > manjo > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > + Cogito ergo sum + > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > On Wed, 18 May 2005, Daniel Jacobowitz wrote: > > > On Wed, May 18, 2005 at 10:37:56AM -0500, Manoj Iyer wrote: > > > > > > Daniel, > > > > > > The patches did not apply cleanly to mainline, so I had to hand patch the > > > files. Also, in the final link stage for gdbserver ld complained that: > > > > > > /usr/bin/ld: warning: powerpc:common64 architecture of input file > > > `inferiors.o' is incompatible with powerpc:common output > > > > > > so I had to add a -m64 to the linker call. > > > > > > gdbserver still broken:. > > > > > > $ ./gdbserver uranus.ltc.austin.ibm.com /tmp/server > > > Process /tmp/server created; pid = 4747 > > > reading register 70: Input/output error > > > Exiting > > > > My reading of the kernel source suggests that FPSCR should be accessible > > using that address. You should figure out why it isn't. > > > > At a guess your headers are broken: > > /* NOTE: cagney/2005-02-08: On some 64-bit GNU/Linux systems the > > kernel headers incorrectly contained the 32-bit definition of > > PT_FPSCR. For the 32-bit definition, floating-point > > registers occupy two 32-bit "slots", and the FPSCR lives in > > the secondhalf of such a slot-pair (hence +1). For 64-bit, > > the FPSCR instead occupies the full 64-bit 2-word-slot and > > hence no adjustment is necessary. Hack around this. */ > > > > -- > > Daniel Jacobowitz > > CodeSourcery, LLC > > > > Cheers - Wu Zhou ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-19 14:46 [RFC] gdb.server testcases (resend) Wu Zhou @ 2005-05-19 17:52 ` Manoj Iyer 2005-05-28 22:51 ` [commit] gdbserver for powerpc64-linux Daniel Jacobowitz 2005-05-22 20:40 ` [RFC] gdb.server testcases (resend) Daniel Jacobowitz 1 sibling, 1 reply; 9+ messages in thread From: Manoj Iyer @ 2005-05-19 17:52 UTC (permalink / raw) To: gdb-patches Daniel, Are you commiting your gdbserver patch? seems like that patch fixes atleast 64bit debugger with 64bit debuggee. ----- manjo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Cogito ergo sum + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ On Thu, 19 May 2005, Wu Zhou wrote: > Quoting Manoj Iyer <manjo@austin.ibm.com>: > > > On the host side > > ---------------- > > ./gdbserver 9.3.190.182:1234 /tmp/test > > Process /tmp/test created; pid = 8323 > > Stop pc is 0x40010470 > > Listening on port 1234 > > Remote debugging from host 9.3.190.187 > > readchar: Got EOF > > Remote side has terminated connection. GDBserver will reopen the > > connection. > > Listening on port 1234 > > > > It seems that file /tmp/test is a 32-bits binary. I also tried 64-bits > gdbsrever against 64-bits binary, it worked somewhat better, but failed > at another place. Below I will summarize my test results, wishing that > it might be helpful to you. > > 1. 32-bits gdbserver with 32-bits debuggee > on my power4 box, I can get a 32-bits gdbserver without "-m64" option. > My test shows that it works well with 32-bits debuggee. > > 2. 64-bits gdbserver with 32-bits debuggee > > without Daniel's patch, the 64-bits gdbserver on my power4 box also > report "reading register I/O error" at register 1. After applying > Daniel's patch, gdbserver could start the 32-bits debuggee and begin > to wait for the remote gdb's connection. > > On the host side, my gdb session is somewhat the same as yours. It > seems that gdb at the host side expects 32-bits register, something > like: > > T0501:ffffe6b0;40:40010470; > > but the remote gdbserver sends back 64-bits value: > > T0501:00000000ffffe6b0;40:0000000040010470; > > So it report "Remote register badly formatted" error. > > 3. 64-bits gdbserver with 64-bits debuggee > > With the patched 64-bits gdbserver. I could go some further with the > 64-bits debuggee. The target side gdbserver session is like this: > > # ./gdbserver :2345 ../testsuite/gdb.base/break > Process ../testsuite/gdb.base/break created; pid = 17669 > Stop pc is 0x80000053e0 > Listening on port 2345 > Remote debugging from host 127.0.0.1 > Stop pc is 0x8000013040 > Stop pc is 0x8000013040 > Stop pc is 0x80000075ec > Stop pc is 0x8000013040 > Stop pc is 0x8000013040 > Stop pc is 0x8000012a20 > Stop pc is 0x8000013040 > Stop pc is 0x8000013040 > Stop pc is 0x8000012aac > Stop pc is 0x100006a8 > Stop pc is 0x100006a8 > ... > > The host side gdb session is like this: > > # ./gdb/gdb -q > (gdb) file ./gdb/testsuite/gdb.base/break > Reading symbols from ./gdb/testsuite/gdb.base/break...done. > Using host libthread_db library "/lib64/tls/libthread_db.so.1". > (gdb) target remote localhost:2345 > Remote debugging using localhost:2345 > 0x00000080000053e0 in ?? () > (gdb) bt > #0 0x00000080000053e0 in ?? () > #1 0x0000000000000000 in ?? () > (gdb) b 94 > Breakpoint 1 at 0x100006a8: file ../../gdb/testsuite/gdb.base/break.c, line 94. > (gdb) c > Continuing. > > Breakpoint 1, main (argc=1, argv=0x1fffffff328, envp=0x1fffffff338) at ../../gdb/testsuite/gdb.base/break.c:94 > 94 printf ("%d\n", factorial (atoi ("6"))); /* set breakpoint 1 here */ > (gdb) s > factorial (value=6) at ../../gdb/testsuite/gdb.base/break.c:111 > 111 if (value > 1) { /* set breakpoint 7 here */ > (gdb) s > 114 return (value); /* set breakpoint 19 here */ > (gdb) n > > Program received signal SIGFPE, Arithmetic exception. > 0x000000800013fd64 in .vfprintf () from /lib64/tls/libc.so.6 > (gdb) > > > > On remote side > > -------------- > > ./gdb > > GNU gdb 6.3.50.20050516-cvs > > Copyright 2004 Free Software Foundation, Inc. > > GDB is free software, covered by the GNU General Public License, and you > > are > > welcome to change it and/or distribute copies of it under certain > > conditions. > > Type "show copying" to see the conditions. > > There is absolutely no warranty for GDB. Type "show warranty" for > > details. > > This GDB was configured as "powerpc64-unknown-linux-gnu". > > Setting up the environment for debugging gdb. > > No symbol table is loaded. Use the "file" command. > > No symbol table is loaded. Use the "file" command. > > .gdbinit:8: Error in sourced command file: > > No breakpoint number 0. > > (gdb) file /tmp/test > > Reading symbols from /tmp/test...done. > > Using host libthread_db library "/lib64/tls/libthread_db.so.1". > > (gdb) target remote 9.3.190.182:1234 > > Remote debugging using 9.3.190.182:1234 > > Remote register badly formatted: > > T0501:00000000ffffe6b0;40:0000000040010470; > > here: fffe6b0;40:0000000040010470; > > (gdb) > > > > > > > > ----- > > manjo > > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > + Cogito ergo sum + > > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > > > On Wed, 18 May 2005, Daniel Jacobowitz wrote: > > > > > On Wed, May 18, 2005 at 10:37:56AM -0500, Manoj Iyer wrote: > > > > > > > > Daniel, > > > > > > > > The patches did not apply cleanly to mainline, so I had to hand patch the > > > > files. Also, in the final link stage for gdbserver ld complained that: > > > > > > > > /usr/bin/ld: warning: powerpc:common64 architecture of input file > > > > `inferiors.o' is incompatible with powerpc:common output > > > > > > > > so I had to add a -m64 to the linker call. > > > > > > > > gdbserver still broken:. > > > > > > > > $ ./gdbserver uranus.ltc.austin.ibm.com /tmp/server > > > > Process /tmp/server created; pid = 4747 > > > > reading register 70: Input/output error > > > > Exiting > > > > > > My reading of the kernel source suggests that FPSCR should be accessible > > > using that address. You should figure out why it isn't. > > > > > > At a guess your headers are broken: > > > /* NOTE: cagney/2005-02-08: On some 64-bit GNU/Linux systems the > > > kernel headers incorrectly contained the 32-bit definition of > > > PT_FPSCR. For the 32-bit definition, floating-point > > > registers occupy two 32-bit "slots", and the FPSCR lives in > > > the secondhalf of such a slot-pair (hence +1). For 64-bit, > > > the FPSCR instead occupies the full 64-bit 2-word-slot and > > > hence no adjustment is necessary. Hack around this. */ > > > > > > -- > > > Daniel Jacobowitz > > > CodeSourcery, LLC > > > > > > > > > > Cheers > - Wu Zhou > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [commit] gdbserver for powerpc64-linux 2005-05-19 17:52 ` Manoj Iyer @ 2005-05-28 22:51 ` Daniel Jacobowitz 0 siblings, 0 replies; 9+ messages in thread From: Daniel Jacobowitz @ 2005-05-28 22:51 UTC (permalink / raw) To: Manoj Iyer; +Cc: gdb-patches On Thu, May 19, 2005 at 11:47:23AM -0500, Manoj Iyer wrote: > > Daniel, > > Are you commiting your gdbserver patch? seems like that patch fixes > atleast 64bit debugger with 64bit debuggee. I've committed this version, which should also work with the broken kernel headers. It does not work if you configure for powerpc64 using a 32-bit compiler, as I wrote earlier... I know how to fix that, just need to find the time. -- Daniel Jacobowitz CodeSourcery, LLC 2005-05-28 Daniel Jacobowitz <dan@codesourcery.com> * configure.tgt (powerpc64-*-linux*): Enable gdbserver. * regformats/reg-ppc64.dat: New file. 2005-05-28 Daniel Jacobowitz <dan@codesourcery.com> * Makefile.in (SFILES): Add linux-ppc64-low.c. (linux-ppc64-low.o, reg-ppc64.c, reg-ppc64.o): New targets. * configure.srv: Add powerpc64-*-linux*. * linux-ppc64-low.c: New file. Index: configure.tgt =================================================================== RCS file: /home/gcc/repos/src/src/gdb/configure.tgt,v retrieving revision 1.166 diff -u -p -r1.166 configure.tgt --- configure.tgt 22 May 2005 19:11:42 -0000 1.166 +++ configure.tgt 28 May 2005 21:41:59 -0000 @@ -147,7 +147,9 @@ powerpc-*-aix*) gdb_target=aix ;; powerpc-*-linux*) gdb_target=linux build_gdbserver=yes ;; -powerpc64-*-linux*) gdb_target=linux ;; +powerpc64-*-linux*) gdb_target=linux + build_gdbserver=yes + ;; powerpc*-*-*) if test -f ../sim/ppc/Makefile; then gdb_target=ppc-sim else Index: gdbserver/Makefile.in =================================================================== RCS file: /home/gcc/repos/src/src/gdb/gdbserver/Makefile.in,v retrieving revision 1.30 diff -u -p -r1.30 Makefile.in --- gdbserver/Makefile.in 23 May 2005 11:20:07 -0000 1.30 +++ gdbserver/Makefile.in 28 May 2005 21:41:59 -0000 @@ -124,7 +124,8 @@ SFILES= $(srcdir)/gdbreplay.c $(srcdir)/ $(srcdir)/linux-ia64-low.c $(srcdir)/linux-low.c \ $(srcdir)/linux-m32r-low.c \ $(srcdir)/linux-m68k-low.c $(srcdir)/linux-mips-low.c \ - $(srcdir)/linux-ppc-low.c $(srcdir)/linux-s390-low.c \ + $(srcdir)/linux-ppc-low.c $(srcdir)/linux-ppc64-low.c \ + $(srcdir)/linux-s390-low.c \ $(srcdir)/linux-sh-low.c $(srcdir)/linux-x86-64-low.c DEPFILES = @GDBSERVER_DEPFILES@ @@ -271,6 +272,7 @@ linux-ia64-low.o: linux-ia64-low.c $(lin linux-m32r-low.o: linux-m32r-low.c $(linux_low_h) $(server_h) linux-mips-low.o: linux-mips-low.c $(linux_low_h) $(server_h) linux-ppc-low.o: linux-ppc-low.c $(linux_low_h) $(server_h) +linux-ppc64-low.o: linux-ppc64-low.c $(linux_low_h) $(server_h) linux-s390-low.o: linux-s390-low.c $(linux_low_h) $(server_h) linux-sh-low.o: linux-sh-low.c $(linux_low_h) $(server_h) linux-x86-64-low.o: linux-x86-64-low.c $(linux_low_h) $(server_h) @@ -305,6 +307,9 @@ reg-mips.c : $(srcdir)/../regformats/reg reg-ppc.o : reg-ppc.c $(regdef_h) reg-ppc.c : $(srcdir)/../regformats/reg-ppc.dat $(regdat_sh) sh $(regdat_sh) $(srcdir)/../regformats/reg-ppc.dat reg-ppc.c +reg-ppc64.o : reg-ppc64.c $(regdef_h) +reg-ppc64.c : $(srcdir)/../regformats/reg-ppc64.dat $(regdat_sh) + sh $(regdat_sh) $(srcdir)/../regformats/reg-ppc64.dat reg-ppc64.c reg-s390.o : reg-s390.c $(regdef_h) reg-s390.c : $(srcdir)/../regformats/reg-s390.dat $(regdat_sh) sh $(regdat_sh) $(srcdir)/../regformats/reg-s390.dat reg-s390.c Index: gdbserver/configure.srv =================================================================== RCS file: /home/gcc/repos/src/src/gdb/gdbserver/configure.srv,v retrieving revision 1.10 diff -u -p -r1.10 configure.srv --- gdbserver/configure.srv 23 May 2005 11:20:07 -0000 1.10 +++ gdbserver/configure.srv 28 May 2005 21:41:59 -0000 @@ -59,7 +59,12 @@ case "${target}" in srv_linux_usrregs=yes srv_linux_thread_db=yes ;; - powerpc*-*-linux*) srv_regobj=reg-ppc.o + powerpc64-*-linux*) srv_regobj=reg-ppc64.o + srv_tgtobj="linux-low.o linux-ppc64-low.o" + srv_linux_usrregs=yes + srv_linux_thread_db=yes + ;; + powerpc-*-linux*) srv_regobj=reg-ppc.o srv_tgtobj="linux-low.o linux-ppc-low.o" srv_linux_usrregs=yes srv_linux_thread_db=yes Index: gdbserver/linux-ppc64-low.c =================================================================== RCS file: gdbserver/linux-ppc64-low.c diff -N gdbserver/linux-ppc64-low.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdbserver/linux-ppc64-low.c 28 May 2005 22:02:21 -0000 @@ -0,0 +1,112 @@ +/* GNU/Linux/PowerPC64 specific low level interface, for the remote server for + GDB. + Copyright 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2005 + Free Software Foundation, Inc. + + This file is part of GDB. + + 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include "server.h" +#include "linux-low.h" + +#include <asm/ptrace.h> + +#define ppc_num_regs 71 + +/* We use a constant for FPSCR instead of PT_FPSCR, because + many shipped PPC64 kernels had the wrong value in ptrace.h. */ +static int ppc_regmap[] = + {PT_R0 * 8, PT_R1 * 8, PT_R2 * 8, PT_R3 * 8, + PT_R4 * 8, PT_R5 * 8, PT_R6 * 8, PT_R7 * 8, + PT_R8 * 8, PT_R9 * 8, PT_R10 * 8, PT_R11 * 8, + PT_R12 * 8, PT_R13 * 8, PT_R14 * 8, PT_R15 * 8, + PT_R16 * 8, PT_R17 * 8, PT_R18 * 8, PT_R19 * 8, + PT_R20 * 8, PT_R21 * 8, PT_R22 * 8, PT_R23 * 8, + PT_R24 * 8, PT_R25 * 8, PT_R26 * 8, PT_R27 * 8, + PT_R28 * 8, PT_R29 * 8, PT_R30 * 8, PT_R31 * 8, + PT_FPR0*8, PT_FPR0*8 + 8, PT_FPR0*8+16, PT_FPR0*8+24, + PT_FPR0*8+32, PT_FPR0*8+40, PT_FPR0*8+48, PT_FPR0*8+56, + PT_FPR0*8+64, PT_FPR0*8+72, PT_FPR0*8+80, PT_FPR0*8+88, + PT_FPR0*8+96, PT_FPR0*8+104, PT_FPR0*8+112, PT_FPR0*8+120, + PT_FPR0*8+128, PT_FPR0*8+136, PT_FPR0*8+144, PT_FPR0*8+152, + PT_FPR0*8+160, PT_FPR0*8+168, PT_FPR0*8+176, PT_FPR0*8+184, + PT_FPR0*8+192, PT_FPR0*8+200, PT_FPR0*8+208, PT_FPR0*8+216, + PT_FPR0*8+224, PT_FPR0*8+232, PT_FPR0*8+240, PT_FPR0*8+248, + PT_NIP * 8, PT_MSR * 8, PT_CCR * 8, PT_LNK * 8, + PT_CTR * 8, PT_XER * 8, PT_FPR0*8 + 256 }; + +static int +ppc_cannot_store_register (int regno) +{ + return 0; +} + +static int +ppc_cannot_fetch_register (int regno) +{ + return 0; +} + +static CORE_ADDR +ppc_get_pc (void) +{ + unsigned long pc; + + collect_register_by_name ("pc", &pc); + return (CORE_ADDR) pc; +} + +static void +ppc_set_pc (CORE_ADDR pc) +{ + unsigned long newpc = pc; + + supply_register_by_name ("pc", &newpc); +} + +/* Correct in either endianness. + This instruction is "twge r2, r2", which GDB uses as a software + breakpoint. */ +static const unsigned int ppc_breakpoint = 0x7d821008; +#define ppc_breakpoint_len 4 + +static int +ppc_breakpoint_at (CORE_ADDR where) +{ + unsigned int insn; + + (*the_target->read_memory) (where, (char *) &insn, 4); + if (insn == ppc_breakpoint) + return 1; + /* If necessary, recognize more trap instructions here. GDB only uses the + one. */ + return 0; +} + +struct linux_target_ops the_low_target = { + ppc_num_regs, + ppc_regmap, + ppc_cannot_fetch_register, + ppc_cannot_store_register, + ppc_get_pc, + ppc_set_pc, + (const char *) &ppc_breakpoint, + ppc_breakpoint_len, + NULL, + 0, + ppc_breakpoint_at, +}; Index: regformats/reg-ppc64.dat =================================================================== RCS file: regformats/reg-ppc64.dat diff -N regformats/reg-ppc64.dat --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ regformats/reg-ppc64.dat 28 May 2005 21:41:59 -0000 @@ -0,0 +1,76 @@ +name:ppc +expedite:r1,pc +64:r0 +64:r1 +64:r2 +64:r3 +64:r4 +64:r5 +64:r6 +64:r7 +64:r8 +64:r9 +64:r10 +64:r11 +64:r12 +64:r13 +64:r14 +64:r15 +64:r16 +64:r17 +64:r18 +64:r19 +64:r20 +64:r21 +64:r22 +64:r23 +64:r24 +64:r25 +64:r26 +64:r27 +64:r28 +64:r29 +64:r30 +64:r31 + +64:f0 +64:f1 +64:f2 +64:f3 +64:f4 +64:f5 +64:f6 +64:f7 +64:f8 +64:f9 +64:f10 +64:f11 +64:f12 +64:f13 +64:f14 +64:f15 +64:f16 +64:f17 +64:f18 +64:f19 +64:f20 +64:f21 +64:f22 +64:f23 +64:f24 +64:f25 +64:f26 +64:f27 +64:f28 +64:f29 +64:f30 +64:f31 + +64:pc +64:ps + +32:cr +64:lr +64:ctr +32:xer +32:fpscr ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-19 14:46 [RFC] gdb.server testcases (resend) Wu Zhou 2005-05-19 17:52 ` Manoj Iyer @ 2005-05-22 20:40 ` Daniel Jacobowitz 2005-05-22 21:01 ` Daniel Jacobowitz 2005-05-23 11:21 ` Wu Zhou 1 sibling, 2 replies; 9+ messages in thread From: Daniel Jacobowitz @ 2005-05-22 20:40 UTC (permalink / raw) To: Wu Zhou; +Cc: Manoj Iyer, gdb-patches On Thu, May 19, 2005 at 04:07:06AM -0400, Wu Zhou wrote: > 2. 64-bits gdbserver with 32-bits debuggee > > without Daniel's patch, the 64-bits gdbserver on my power4 box also > report "reading register I/O error" at register 1. After applying > Daniel's patch, gdbserver could start the 32-bits debuggee and begin > to wait for the remote gdb's connection. > > On the host side, my gdb session is somewhat the same as yours. It > seems that gdb at the host side expects 32-bits register, something > like: > > T0501:ffffe6b0;40:40010470; > > but the remote gdbserver sends back 64-bits value: > > T0501:00000000ffffe6b0;40:0000000040010470; > > So it report "Remote register badly formatted" error. Yes, this will not work. The correct way to handle this is to wait until I have implemented the available target features proposal I've posted on gdb@, and then I can make gdbserver inform GDB that 64-bit registers are available so that it will expect them. This will require some surgery in GDB, I'm sure. The way MIPS implements this is not very reliable. > Program received signal SIGFPE, Arithmetic exception. > 0x000000800013fd64 in .vfprintf () from /lib64/tls/libc.so.6 > (gdb) > I have no idea what causes this one, sorry. -- Daniel Jacobowitz CodeSourcery, LLC ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-22 20:40 ` [RFC] gdb.server testcases (resend) Daniel Jacobowitz @ 2005-05-22 21:01 ` Daniel Jacobowitz 2005-05-23 11:21 ` Wu Zhou 1 sibling, 0 replies; 9+ messages in thread From: Daniel Jacobowitz @ 2005-05-22 21:01 UTC (permalink / raw) To: Wu Zhou, Manoj Iyer, gdb-patches On Sun, May 22, 2005 at 01:15:20PM -0400, Daniel Jacobowitz wrote: > Yes, this will not work. The correct way to handle this is to wait > until I have implemented the available target features proposal I've > posted on gdb@, and then I can make gdbserver inform GDB that 64-bit > registers are available so that it will expect them. > > This will require some surgery in GDB, I'm sure. The way MIPS > implements this is not very reliable. I should add: it won't work for LinuxThreads libthread_db-based debugging either. I don't know if it will work for NPTL, but I hope that it will. Some changes were made to libthread_db to support this. -- Daniel Jacobowitz CodeSourcery, LLC ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-22 20:40 ` [RFC] gdb.server testcases (resend) Daniel Jacobowitz 2005-05-22 21:01 ` Daniel Jacobowitz @ 2005-05-23 11:21 ` Wu Zhou 2005-05-23 18:26 ` Daniel Jacobowitz 1 sibling, 1 reply; 9+ messages in thread From: Wu Zhou @ 2005-05-23 11:21 UTC (permalink / raw) To: Daniel Jacobowitz; +Cc: Manoj Iyer, gdb-patches > Yes, this will not work. The correct way to handle this is to wait > until I have implemented the available target features proposal I've > posted on gdb@, and then I can make gdbserver inform GDB that 64-bit > registers are available so that it will expect them. So you are going to add a command for gdbserver to notify remote gdb the availability of 64-bit registers? That is good. But I am also thinking of other ways. The first solution I thought of is to let gdbserver choose which set of registers to use according to the arch (32-bit or 64-bit) of the debuggee. The other solution I could thought of is to let host-side gdb accept 64-bit register as well. I even tried some coding with the second method. It seems that it worked sorta, at least I can set breakpoint, continue the process and so on. But I did met problems with "next" and "step" commands, which didn't go on with executing the process at all. Because I am not that familar with the code of gdb/gdbserver, so I am not very sure where to find the root cause of these problems. I am also not sure whether these two methods are workable? Would you please help evaluate this? If it is really workable, what is the pros and cons of these methods compared to your proposal? Thanks a lot! > This will require some surgery in GDB, I'm sure. The way MIPS > implements this is not very reliable. > > > Program received signal SIGFPE, Arithmetic exception. > > 0x000000800013fd64 in .vfprintf () from /lib64/tls/libc.so.6 > > (gdb) > > > > I have no idea what causes this one, sorry. That SIGFPE error disappeared after applying your patch to latest GDB cvs tree. But I met with another strange problem when debugging gdb.base/break, which defines the following function: int factorial (value) int value; #endif { if (value > 1) { /* set breakpoint 7 here */ value *= factorial (value - 1); } return (value); /* set breakpoint 19 here */ } normally factorial(6) will recursively call itself 5 times and return 720. However while using 64-bit gdbserver on 64-bit binary, it doesn't call factorial(5) at all, return directly 6 as the result. I am suspecting that "value > 1" doesn't get executed, so I change the conditional statement to "if (value - 1)", it worked! So it turn out that "value > 1" always return 0 in this running context. That is really odd. Any clues you could thought of? Thanks in advance. Cheers - Wu Zhou ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-23 11:21 ` Wu Zhou @ 2005-05-23 18:26 ` Daniel Jacobowitz 2005-05-24 4:17 ` Wu Zhou 0 siblings, 1 reply; 9+ messages in thread From: Daniel Jacobowitz @ 2005-05-23 18:26 UTC (permalink / raw) To: Wu Zhou; +Cc: Manoj Iyer, gdb-patches On Mon, May 23, 2005 at 06:57:48AM -0700, Wu Zhou wrote: > > > Yes, this will not work. The correct way to handle this is to wait > > until I have implemented the available target features proposal I've > > posted on gdb@, and then I can make gdbserver inform GDB that 64-bit > > registers are available so that it will expect them. > > So you are going to add a command for gdbserver to notify remote gdb > the availability of 64-bit registers? That is good. But I am also > thinking of other ways. The first solution I thought of is to let > gdbserver choose which set of registers to use according to the > arch (32-bit or 64-bit) of the debuggee. The other solution I could > thought of is to let host-side gdb accept 64-bit register as well. > I even tried some coding with the second method. It seems that it > worked sorta, at least I can set breakpoint, continue the process > and so on. But I did met problems with "next" and "step" commands, > which didn't go on with executing the process at all. > > Because I am not that familar with the code of gdb/gdbserver, so I > am not very sure where to find the root cause of these problems. I > am also not sure whether these two methods are workable? Would you > please help evaluate this? If it is really workable, what is the > pros and cons of these methods compared to your proposal? Thanks > a lot! Don't do that. Please go read my proposal on gdb@, paying particular attention to the description of the MIPS execution environment. The reason to always provide 64-bit registers if they are available is that they are physically present; the upper 32 bits can affect the behavior of the program in some cases. So not displaying them can be very bad! > That SIGFPE error disappeared after applying your patch to latest > GDB cvs tree. But I met with another strange problem when debugging > gdb.base/break, which defines the following function: > > int factorial (value) > int value; > #endif > { > if (value > 1) { /* set breakpoint 7 here */ > value *= factorial (value - 1); > } > return (value); /* set breakpoint 19 here */ > } > > normally factorial(6) will recursively call itself 5 times and return > 720. However while using 64-bit gdbserver on 64-bit binary, it doesn't > call factorial(5) at all, return directly 6 as the result. > > I am suspecting that "value > 1" doesn't get executed, so I change the > conditional statement to "if (value - 1)", it worked! So it turn out > that "value > 1" always return 0 in this running context. That is really > odd. Any clues you could thought of? Thanks in advance. Um... your compiler must be broken, then. -- Daniel Jacobowitz CodeSourcery, LLC ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-23 18:26 ` Daniel Jacobowitz @ 2005-05-24 4:17 ` Wu Zhou 2005-05-24 8:29 ` Daniel Jacobowitz 0 siblings, 1 reply; 9+ messages in thread From: Wu Zhou @ 2005-05-24 4:17 UTC (permalink / raw) To: Daniel Jacobowitz; +Cc: gdb-patches On Mon, 23 May 2005, Daniel Jacobowitz wrote: > Don't do that. Please go read my proposal on gdb@, paying particular > attention to the description of the MIPS execution environment. The > reason to always provide 64-bit registers if they are available is that > they are physically present; the upper 32 bits can affect the behavior > of the program in some cases. So not displaying them can be very bad! ok, I got it. I will read your proposal more carefully. Thanks. > > That SIGFPE error disappeared after applying your patch to latest > > GDB cvs tree. But I met with another strange problem when debugging > > gdb.base/break, which defines the following function: > > > > int factorial (value) > > int value; > > #endif > > { > > if (value > 1) { /* set breakpoint 7 here */ > > value *= factorial (value - 1); > > } > > return (value); /* set breakpoint 19 here */ > > } > > > > normally factorial(6) will recursively call itself 5 times and return > > 720. However while using 64-bit gdbserver on 64-bit binary, it doesn't > > call factorial(5) at all, return directly 6 as the result. > > > > I am suspecting that "value > 1" doesn't get executed, so I change the > > conditional statement to "if (value - 1)", it worked! So it turn out > > that "value > 1" always return 0 in this running context. That is really > > odd. Any clues you could thought of? Thanks in advance. > > Um... your compiler must be broken, then. Um...can't understand this. If it is like this, how to interpret the fact that it returns 720 correctly to run gdb.base/break standalone. Anyway I will try to find another box or another compiler to verify this. Thanks. Cheers - Wu Zhou ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-24 4:17 ` Wu Zhou @ 2005-05-24 8:29 ` Daniel Jacobowitz 0 siblings, 0 replies; 9+ messages in thread From: Daniel Jacobowitz @ 2005-05-24 8:29 UTC (permalink / raw) To: Wu Zhou; +Cc: gdb-patches On Tue, May 24, 2005 at 02:32:09AM -0700, Wu Zhou wrote: > > > normally factorial(6) will recursively call itself 5 times and return > > > 720. However while using 64-bit gdbserver on 64-bit binary, it doesn't > > > call factorial(5) at all, return directly 6 as the result. > > > > > > I am suspecting that "value > 1" doesn't get executed, so I change the > > > conditional statement to "if (value - 1)", it worked! So it turn out > > > that "value > 1" always return 0 in this running context. That is really > > > odd. Any clues you could thought of? Thanks in advance. > > > > Um... your compiler must be broken, then. > > Um...can't understand this. If it is like this, how to interpret the fact > that it returns 720 correctly to run gdb.base/break standalone. Anyway I > will try to find another box or another compiler to verify this. Thanks. I missed that in your message. The other alternative is that a breakpoint is somehow corrupting program state (condition codes, for instance). This could be a kernel bug or a GDB bug; it wouldn't be the first time. -- Daniel Jacobowitz CodeSourcery, LLC ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2005-05-28 22:10 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2005-05-19 14:46 [RFC] gdb.server testcases (resend) Wu Zhou 2005-05-19 17:52 ` Manoj Iyer 2005-05-28 22:51 ` [commit] gdbserver for powerpc64-linux Daniel Jacobowitz 2005-05-22 20:40 ` [RFC] gdb.server testcases (resend) Daniel Jacobowitz 2005-05-22 21:01 ` Daniel Jacobowitz 2005-05-23 11:21 ` Wu Zhou 2005-05-23 18:26 ` Daniel Jacobowitz 2005-05-24 4:17 ` Wu Zhou 2005-05-24 8:29 ` Daniel Jacobowitz
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox