* configure.tgt (powerpc64-*-linux*): Enable gdbserver.
	* regformats/reg-ppc64.dat: New file.
gdbserver/
	* 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.
This commit is contained in:
Daniel Jacobowitz 2005-05-28 22:09:04 +00:00
parent 3133ddbf1d
commit eee84df140
7 changed files with 215 additions and 4 deletions

View File

@ -1,3 +1,8 @@
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>
From Wu Zhou <woodzltc@cn.ibm.com>:

View File

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

View File

@ -1,3 +1,10 @@
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.
2005-05-23 Orjan Friberg <orjanf@axis.com>
* linux-cris-low.c: New file with support for CRIS.
@ -9,7 +16,6 @@
* configure.srv: Add cris-*-linux* and crisv32-*-linux* to list of
recognized targets.
2005-05-16 Ulrich Weigand <uweigand@de.ibm.com>
* linux-low.c (fetch_register): Ensure buffer size is a multiple

View File

@ -124,7 +124,8 @@ SFILES= $(srcdir)/gdbreplay.c $(srcdir)/inferiors.c \
$(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 $(linux_low_h) $(server_h)
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-mips.dat $(regdat_sh)
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

View File

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

View File

@ -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,
};

View File

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