* 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ messages in thread
* [RFC] gdb.server testcases (resend)
@ 2005-05-17 2:38 Manoj Iyer
2005-05-17 19:02 ` Manoj Iyer
2005-05-18 1:45 ` Daniel Jacobowitz
0 siblings, 2 replies; 17+ messages in thread
From: Manoj Iyer @ 2005-05-17 2:38 UTC (permalink / raw)
To: gdb-patches
In my previous email I missed the changelog. Here is my complete patch.
Please review and comment.
2005-05-16 Manoj Iyer <manjo@austin.ibm.com>
* gdb.server/server-run.exp: added testcases.
* gdb.server/server.c: added nested function call to test
backtrace.
=============== server-run.exp ==================
--- ./old/src/gdb/testsuite/gdb.server/server-run.exp 2005-05-16 11:42:45.000000000 -0500
+++ ./new/src/gdb/testsuite/gdb.server/server-run.exp 2005-05-16 11:44:30.000000000 -0500
@@ -38,5 +38,21 @@ gdb_start
gdbserver_load $binfile ""
gdb_reinitialize_dir $srcdir/$subdir
+# test setting a breakpoint
gdb_breakpoint main
-gdb_test "continue" "Breakpoint.* main .*" "continue to main"
+
+gdb_test "continue" ".*Continuing\\..*Breakpoint \[0-9\], main.*at .*$srcfile:\[0-9\]+.*"
+
+# test if list command displays source code
+gdb_test "list" ".*main.*\{.*\}"
+
+# set breakpoint at a function and test backtrace command
+gdb_test "break function3" "Breakpoint 2 at.*file .*$srcfile, line \[0-9\]+."
+
+gdb_test "continue" ".*Continuing\\..*Breakpoint \[0-9\]+, function3.*at.*$srcfile:\[0-9\]+.*"
+
+gdb_test "backtrace" "\#0.*function3.*at.*server.c:\[0-9\]+.*\#1.*function2.*at.*server.c:\[0-9\]+.*\#2.*function1.*at.*server.c:\[0-9\]+.*\#3.*main.*at.*server.c:\[0-9\]+"
+
+gdb_test "step" ".*function4.*at.*server.c:\[0-9\]+.*;"
+
+gdb_test "step 2" ".*\[0-9\]+.*x = y;"
===============================================
=============== server.c ======================
--- ./old/src/gdb/testsuite/gdb.server/server.c 2005-05-16 11:42:45.000000000 -0500
+++ ./new/src/gdb/testsuite/gdb.server/server.c 2005-05-16 11:44:17.000000000 -0500
@@ -17,8 +17,40 @@
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
+static void
+function4()
+{
+ int x = 1;
+ int y = 2;
+
+ x = y;
+ return;
+}
+
+
+static void
+function3()
+{
+ function4();
+}
+
+
+static void
+function2()
+{
+ function3();
+}
+
+
+static void
+function1()
+{
+ function2();
+}
+
int
main (int argc, char **argv)
{
- return 0;
+ function1();
+ return 0;
}
=================================
Thanks
-----
manjo
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Cogito ergo sum +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
^ permalink raw reply [flat|nested] 17+ messages in thread* Re: [RFC] gdb.server testcases (resend) 2005-05-17 2:38 Manoj Iyer @ 2005-05-17 19:02 ` Manoj Iyer 2005-05-18 1:45 ` Daniel Jacobowitz 1 sibling, 0 replies; 17+ messages in thread From: Manoj Iyer @ 2005-05-17 19:02 UTC (permalink / raw) To: gdb-patches Daniel, Any comments on this one? ok to commit? Thanks ----- manjo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Cogito ergo sum + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ On Mon, 16 May 2005, Manoj Iyer wrote: > > In my previous email I missed the changelog. Here is my complete patch. > Please review and comment. > > 2005-05-16 Manoj Iyer <manjo@austin.ibm.com> > > * gdb.server/server-run.exp: added testcases. > * gdb.server/server.c: added nested function call to test > backtrace. > > =============== server-run.exp ================== > --- ./old/src/gdb/testsuite/gdb.server/server-run.exp 2005-05-16 11:42:45.000000000 -0500 > +++ ./new/src/gdb/testsuite/gdb.server/server-run.exp 2005-05-16 11:44:30.000000000 -0500 > @@ -38,5 +38,21 @@ gdb_start > gdbserver_load $binfile "" > gdb_reinitialize_dir $srcdir/$subdir > > +# test setting a breakpoint > gdb_breakpoint main > -gdb_test "continue" "Breakpoint.* main .*" "continue to main" > + > +gdb_test "continue" ".*Continuing\\..*Breakpoint \[0-9\], main.*at .*$srcfile:\[0-9\]+.*" > + > +# test if list command displays source code > +gdb_test "list" ".*main.*\{.*\}" > + > +# set breakpoint at a function and test backtrace command > +gdb_test "break function3" "Breakpoint 2 at.*file .*$srcfile, line \[0-9\]+." > + > +gdb_test "continue" ".*Continuing\\..*Breakpoint \[0-9\]+, function3.*at.*$srcfile:\[0-9\]+.*" > + > +gdb_test "backtrace" "\#0.*function3.*at.*server.c:\[0-9\]+.*\#1.*function2.*at.*server.c:\[0-9\]+.*\#2.*function1.*at.*server.c:\[0-9\]+.*\#3.*main.*at.*server.c:\[0-9\]+" > + > +gdb_test "step" ".*function4.*at.*server.c:\[0-9\]+.*;" > + > +gdb_test "step 2" ".*\[0-9\]+.*x = y;" > =============================================== > > =============== server.c ====================== > --- ./old/src/gdb/testsuite/gdb.server/server.c 2005-05-16 11:42:45.000000000 -0500 > +++ ./new/src/gdb/testsuite/gdb.server/server.c 2005-05-16 11:44:17.000000000 -0500 > @@ -17,8 +17,40 @@ > Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, > USA. */ > > +static void > +function4() > +{ > + int x = 1; > + int y = 2; > + > + x = y; > + return; > +} > + > + > +static void > +function3() > +{ > + function4(); > +} > + > + > +static void > +function2() > +{ > + function3(); > +} > + > + > +static void > +function1() > +{ > + function2(); > +} > + > int > main (int argc, char **argv) > { > - return 0; > + function1(); > + return 0; > } > ================================= > > > Thanks > ----- > manjo > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > + Cogito ergo sum + > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-17 2:38 Manoj Iyer 2005-05-17 19:02 ` Manoj Iyer @ 2005-05-18 1:45 ` Daniel Jacobowitz 2005-05-18 9:52 ` Manoj Iyer 1 sibling, 1 reply; 17+ messages in thread From: Daniel Jacobowitz @ 2005-05-18 1:45 UTC (permalink / raw) To: Manoj Iyer; +Cc: gdb-patches On Mon, May 16, 2005 at 12:13:17PM -0500, Manoj Iyer wrote: > > In my previous email I missed the changelog. Here is my complete patch. > Please review and comment. > > 2005-05-16 Manoj Iyer <manjo@austin.ibm.com> > > * gdb.server/server-run.exp: added testcases. > * gdb.server/server.c: added nested function call to test > backtrace. That's not a changelog; it does not describe what has changed. Please follow the conventions for C code when changing C files in the testsuite; each function needs its own entry, for instance. You've changed the indentation in server.c, away from the GNU style. It's not as important to maintain GNU Coding Standards in the testsuite, but please don't ignore it without a reason. > +# test setting a breakpoint Comments are full sentences, start with capital letters, and end with periods. > gdb_breakpoint main > -gdb_test "continue" "Breakpoint.* main .*" "continue to main" > + > +gdb_test "continue" ".*Continuing\\..*Breakpoint \[0-9\], main.*at .*$srcfile:\[0-9\]+.*" > + > +# test if list command displays source code > +gdb_test "list" ".*main.*\{.*\}" > + > +# set breakpoint at a function and test backtrace command > +gdb_test "break function3" "Breakpoint 2 at.*file .*$srcfile, line \[0-9\]+." > + > +gdb_test "continue" ".*Continuing\\..*Breakpoint \[0-9\]+, function3.*at.*$srcfile:\[0-9\]+.*" You'll need to give names to tests; otherwise this test is going to report "PASS: gdb.server/server-run.exp: continue" multiple times. Manoj, before you revise the patch again, could you explain why you want to add these tests? It is possible to run the entire testsuite using gdbserver if you want to specifically validate gdbserver; the purpose of the gdb.server directory is: 1. To make sure that minimal remote protocol support is not accidentally broken by people working on native debuggers. 2. (Someday) to test gdbserver-specific features, like gdbserver --attach. Do these tests add value to #1? We're already testing that we can reach main; on a native configuration that tests breakpoints, continuing, and single-stepping (for the dynamic linker breakpoints). -- Daniel Jacobowitz CodeSourcery, LLC ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-18 1:45 ` Daniel Jacobowitz @ 2005-05-18 9:52 ` Manoj Iyer 2005-05-18 16:01 ` Daniel Jacobowitz 0 siblings, 1 reply; 17+ messages in thread From: Manoj Iyer @ 2005-05-18 9:52 UTC (permalink / raw) To: gdb-patches Daniel, I misunderstood the use of gdb.server directory. I thought that this directory is for testing gdbserver remote debugging functionality. I am trying to get gdbserver working on ppc. As a starting point I used these tests. But you are correct. In this perspective my testcases seem useless. To begin with gdbserver program fails outright on ppc64 PPC970 Altivec hardware: ./gdbserver uranus.ltc.austin.ibm.com:1234 /tmp/server Process /tmp/server created; pid = 30836 reading register 1: Input/output error Exiting I am trying to chase down the problem and get gdbserver working. If you have any insight into this problem please advice. Thanks ----- manjo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Cogito ergo sum + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ On Tue, 17 May 2005, Daniel Jacobowitz wrote: > On Mon, May 16, 2005 at 12:13:17PM -0500, Manoj Iyer wrote: > > > > In my previous email I missed the changelog. Here is my complete patch. > > Please review and comment. > > > > 2005-05-16 Manoj Iyer <manjo@austin.ibm.com> > > > > * gdb.server/server-run.exp: added testcases. > > * gdb.server/server.c: added nested function call to test > > backtrace. > > That's not a changelog; it does not describe what has changed. Please > follow the conventions for C code when changing C files in the > testsuite; each function needs its own entry, for instance. > > You've changed the indentation in server.c, away from the GNU style. > It's not as important to maintain GNU Coding Standards in the > testsuite, but please don't ignore it without a reason. > > > +# test setting a breakpoint > > Comments are full sentences, start with capital letters, and end with > periods. > > > gdb_breakpoint main > > -gdb_test "continue" "Breakpoint.* main .*" "continue to main" > > + > > +gdb_test "continue" ".*Continuing\\..*Breakpoint \[0-9\], main.*at .*$srcfile:\[0-9\]+.*" > > + > > +# test if list command displays source code > > +gdb_test "list" ".*main.*\{.*\}" > > + > > +# set breakpoint at a function and test backtrace command > > +gdb_test "break function3" "Breakpoint 2 at.*file .*$srcfile, line \[0-9\]+." > > + > > +gdb_test "continue" ".*Continuing\\..*Breakpoint \[0-9\]+, function3.*at.*$srcfile:\[0-9\]+.*" > > You'll need to give names to tests; otherwise this test is going to > report "PASS: gdb.server/server-run.exp: continue" multiple times. > > Manoj, before you revise the patch again, could you explain why you > want to add these tests? It is possible to run the entire testsuite > using gdbserver if you want to specifically validate gdbserver; the > purpose of the gdb.server directory is: > > 1. To make sure that minimal remote protocol support is not > accidentally broken by people working on native debuggers. > > 2. (Someday) to test gdbserver-specific features, like gdbserver > --attach. > > Do these tests add value to #1? We're already testing that we can > reach main; on a native configuration that tests breakpoints, > continuing, and single-stepping (for the dynamic linker breakpoints). > > -- > Daniel Jacobowitz > CodeSourcery, LLC > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-18 9:52 ` Manoj Iyer @ 2005-05-18 16:01 ` Daniel Jacobowitz 2005-05-18 16:29 ` Manoj Iyer 0 siblings, 1 reply; 17+ messages in thread From: Daniel Jacobowitz @ 2005-05-18 16:01 UTC (permalink / raw) To: Manoj Iyer; +Cc: gdb-patches On Tue, May 17, 2005 at 11:39:27PM -0500, Manoj Iyer wrote: > > > Daniel, > > I misunderstood the use of gdb.server directory. I thought that this > directory is for testing gdbserver remote debugging functionality. I am > trying to get gdbserver working on ppc. As a starting point I used these > tests. But you are correct. In this perspective my testcases seem useless. Take a look 'round the list archives for the DejaGNU board file you'll need to run the entire testsuite using gdbserver. There are about a hundred failures I haven't really looked into yet, but enough tests pass to be useful. > To begin with gdbserver program fails outright on ppc64 PPC970 Altivec > hardware: > > ./gdbserver uranus.ltc.austin.ibm.com:1234 /tmp/server > Process /tmp/server created; pid = 30836 > reading register 1: Input/output error > Exiting > > I am trying to chase down the problem and get gdbserver working. If you > have any insight into this problem please advice. Gdbserver does not have any configuration for ppc64. I have a ppc64 port around here somewhere; I'll attach it to this message. Can you test it for me? I never submitted it because I had no way to test it. Just like the PPC port, it doesn't support NPTL; we can do that separately. -- Daniel Jacobowitz CodeSourcery, LLC Index: src/gdb/configure.tgt =================================================================== RCS file: /cvs/src/src/gdb/configure.tgt,v retrieving revision 1.161 diff -u -p -r1.161 configure.tgt --- src/gdb/configure.tgt 18 Mar 2005 18:59:17 -0000 1.161 +++ src/gdb/configure.tgt 29 Mar 2005 16:33:20 -0000 @@ -146,7 +146,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: src/gdb/gdbserver/Makefile.in =================================================================== RCS file: /cvs/src/src/gdb/gdbserver/Makefile.in,v retrieving revision 1.28 diff -u -p -r1.28 Makefile.in --- src/gdb/gdbserver/Makefile.in 4 Mar 2005 18:16:25 -0000 1.28 +++ src/gdb/gdbserver/Makefile.in 29 Mar 2005 16:33:21 -0000 @@ -122,7 +122,8 @@ SFILES= $(srcdir)/gdbreplay.c $(srcdir)/ $(srcdir)/i387-fp.c \ $(srcdir)/linux-ia64-low.c $(srcdir)/linux-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@ @@ -265,6 +266,7 @@ linux-i386-low.o: linux-i386-low.c $(lin linux-ia64-low.o: linux-ia64-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) @@ -290,6 +292,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: src/gdb/gdbserver/configure.srv =================================================================== RCS file: /cvs/src/src/gdb/gdbserver/configure.srv,v retrieving revision 1.8 diff -u -p -r1.8 configure.srv --- src/gdb/gdbserver/configure.srv 21 Nov 2004 03:09:39 -0000 1.8 +++ src/gdb/gdbserver/configure.srv 29 Mar 2005 16:33:21 -0000 @@ -44,7 +44,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: src/gdb/gdbserver/linux-ppc64-low.c =================================================================== RCS file: src/gdb/gdbserver/linux-ppc64-low.c diff -N src/gdb/gdbserver/linux-ppc64-low.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/gdb/gdbserver/linux-ppc64-low.c 29 Mar 2005 16:33:22 -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 + +/* Currently, don't check/send MQ. */ +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_FPSCR * 8, }; + +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); +printf ("Stop pc is 0x%lx\n", 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: src/gdb/regformats/reg-ppc64.dat =================================================================== RCS file: src/gdb/regformats/reg-ppc64.dat diff -N src/gdb/regformats/reg-ppc64.dat --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/gdb/regformats/reg-ppc64.dat 29 Mar 2005 16:33:22 -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] 17+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-18 16:01 ` Daniel Jacobowitz @ 2005-05-18 16:29 ` Manoj Iyer 2005-05-18 18:08 ` Daniel Jacobowitz 0 siblings, 1 reply; 17+ messages in thread From: Manoj Iyer @ 2005-05-18 16:29 UTC (permalink / raw) To: gdb-patches 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 Thanks ----- manjo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Cogito ergo sum + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ On Wed, 18 May 2005, Daniel Jacobowitz wrote: > On Tue, May 17, 2005 at 11:39:27PM -0500, Manoj Iyer wrote: > > > > > > Daniel, > > > > I misunderstood the use of gdb.server directory. I thought that this > > directory is for testing gdbserver remote debugging functionality. I am > > trying to get gdbserver working on ppc. As a starting point I used these > > tests. But you are correct. In this perspective my testcases seem useless. > > Take a look 'round the list archives for the DejaGNU board file you'll > need to run the entire testsuite using gdbserver. There are about a > hundred failures I haven't really looked into yet, but enough tests > pass to be useful. > > > To begin with gdbserver program fails outright on ppc64 PPC970 Altivec > > hardware: > > > > ./gdbserver uranus.ltc.austin.ibm.com:1234 /tmp/server > > Process /tmp/server created; pid = 30836 > > reading register 1: Input/output error > > Exiting > > > > I am trying to chase down the problem and get gdbserver working. If you > > have any insight into this problem please advice. > > Gdbserver does not have any configuration for ppc64. I have a ppc64 > port around here somewhere; I'll attach it to this message. Can you > test it for me? I never submitted it because I had no way to test it. > > Just like the PPC port, it doesn't support NPTL; we can do that > separately. > > -- > Daniel Jacobowitz > CodeSourcery, LLC > > Index: src/gdb/configure.tgt > =================================================================== > RCS file: /cvs/src/src/gdb/configure.tgt,v > retrieving revision 1.161 > diff -u -p -r1.161 configure.tgt > --- src/gdb/configure.tgt 18 Mar 2005 18:59:17 -0000 1.161 > +++ src/gdb/configure.tgt 29 Mar 2005 16:33:20 -0000 > @@ -146,7 +146,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: src/gdb/gdbserver/Makefile.in > =================================================================== > RCS file: /cvs/src/src/gdb/gdbserver/Makefile.in,v > retrieving revision 1.28 > diff -u -p -r1.28 Makefile.in > --- src/gdb/gdbserver/Makefile.in 4 Mar 2005 18:16:25 -0000 1.28 > +++ src/gdb/gdbserver/Makefile.in 29 Mar 2005 16:33:21 -0000 > @@ -122,7 +122,8 @@ SFILES= $(srcdir)/gdbreplay.c $(srcdir)/ > $(srcdir)/i387-fp.c \ > $(srcdir)/linux-ia64-low.c $(srcdir)/linux-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@ > @@ -265,6 +266,7 @@ linux-i386-low.o: linux-i386-low.c $(lin > linux-ia64-low.o: linux-ia64-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) > @@ -290,6 +292,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: src/gdb/gdbserver/configure.srv > =================================================================== > RCS file: /cvs/src/src/gdb/gdbserver/configure.srv,v > retrieving revision 1.8 > diff -u -p -r1.8 configure.srv > --- src/gdb/gdbserver/configure.srv 21 Nov 2004 03:09:39 -0000 1.8 > +++ src/gdb/gdbserver/configure.srv 29 Mar 2005 16:33:21 -0000 > @@ -44,7 +44,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: src/gdb/gdbserver/linux-ppc64-low.c > =================================================================== > RCS file: src/gdb/gdbserver/linux-ppc64-low.c > diff -N src/gdb/gdbserver/linux-ppc64-low.c > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ src/gdb/gdbserver/linux-ppc64-low.c 29 Mar 2005 16:33:22 -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 > + > +/* Currently, don't check/send MQ. */ > +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_FPSCR * 8, }; > + > +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); > +printf ("Stop pc is 0x%lx\n", 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: src/gdb/regformats/reg-ppc64.dat > =================================================================== > RCS file: src/gdb/regformats/reg-ppc64.dat > diff -N src/gdb/regformats/reg-ppc64.dat > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ src/gdb/regformats/reg-ppc64.dat 29 Mar 2005 16:33:22 -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] 17+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-18 16:29 ` Manoj Iyer @ 2005-05-18 18:08 ` Daniel Jacobowitz 2005-05-18 22:08 ` Manoj Iyer 0 siblings, 1 reply; 17+ messages in thread From: Daniel Jacobowitz @ 2005-05-18 18:08 UTC (permalink / raw) To: Manoj Iyer; +Cc: gdb-patches 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 ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [RFC] gdb.server testcases (resend) 2005-05-18 18:08 ` Daniel Jacobowitz @ 2005-05-18 22:08 ` Manoj Iyer 0 siblings, 0 replies; 17+ messages in thread From: Manoj Iyer @ 2005-05-18 22:08 UTC (permalink / raw) To: Daniel Jacobowitz; +Cc: gdb-patches Looks like RHEL 4 ships wrong kernel headers, on RHEL4 /usr/include/linux/version.h: #define UTS_RELEASE "2.4.20", your patch works sorta on SLES (/usr/include/linux/version.h: #define UTS_RELEASE "2.6.5") running on a power5. 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 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 > ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2005-05-28 22:10 UTC | newest] Thread overview: 17+ 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 -- strict thread matches above, loose matches on Subject: below -- 2005-05-17 2:38 Manoj Iyer 2005-05-17 19:02 ` Manoj Iyer 2005-05-18 1:45 ` Daniel Jacobowitz 2005-05-18 9:52 ` Manoj Iyer 2005-05-18 16:01 ` Daniel Jacobowitz 2005-05-18 16:29 ` Manoj Iyer 2005-05-18 18:08 ` Daniel Jacobowitz 2005-05-18 22:08 ` Manoj Iyer
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox