From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9189 invoked by alias); 28 May 2005 22:10:16 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 9164 invoked by uid 22791); 28 May 2005 22:10:08 -0000 Received: from nevyn.them.org (HELO nevyn.them.org) (66.93.172.17) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Sat, 28 May 2005 22:10:08 +0000 Received: from drow by nevyn.them.org with local (Exim 4.50) id 1Dc9VO-00066Z-LY; Sat, 28 May 2005 18:10:06 -0400 Date: Sat, 28 May 2005 22:51:00 -0000 From: Daniel Jacobowitz To: Manoj Iyer Cc: gdb-patches@sources.redhat.com Subject: [commit] gdbserver for powerpc64-linux Message-ID: <20050528221006.GA22435@nevyn.them.org> Mail-Followup-To: Manoj Iyer , gdb-patches@sources.redhat.com References: <1116490026.428c492a8f3d8@imap.linux.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.8i X-SW-Source: 2005-05/txt/msg00590.txt.bz2 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 * configure.tgt (powerpc64-*-linux*): Enable gdbserver. * regformats/reg-ppc64.dat: New file. 2005-05-28 Daniel Jacobowitz * 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 + +#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