* [patch] gdbserver support for e500 / altivec
@ 2007-10-05 18:02 Daniel Jacobowitz
2007-10-15 20:22 ` Daniel Jacobowitz
2007-10-16 22:22 ` Ulrich Weigand
0 siblings, 2 replies; 4+ messages in thread
From: Daniel Jacobowitz @ 2007-10-05 18:02 UTC (permalink / raw)
To: gdb-patches
And finally, the end of my patch flood for today. This patch teaches
gdbserver about the e500 and AltiVec vector register sets, and lets
it return an XML description to GDB indicating which registers are
present.
I've tested this by hand on targets with AltiVec, SPE, and neither.
I'll commit it after the various patches it depends on, which I've
posted earlier today.
Oh, I suppose this needs a NEWS entry. I'll handle that after it's
checked in.
--
Daniel Jacobowitz
CodeSourcery
2007-10-05 Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.in (clean): Remove new files.
(powerpc-32.o, powerpc-32.c, powerpc-e500.o, powerpc-e500.c)
(powerpc-64.o, powerpc-64.c): New rules.
* configure.srv: Use alternate register sets for powerpc64-*-linux*
with AltiVec, powerpc-*-linux* with AltiVec, and powerpc-*-linux*
with SPE.
* linux-ppc-low.c (ppc_regmap): Do not fetch the FP registers for
SPE targets.
(ppc_cannot_store_register): Do not check for FPSCR for SPE targets.
(PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS, ppc_fill_vrregset)
(ppc_store_vrregset, PTRACE_GETEVRREGS, PTRACE_SETEVRREGS)
(struct gdb_evrregset_t, ppc_fill_evrregset, ppc_store_evrregset): New.
(target_regsets): Add AltiVec and SPE register sets.
* configure.ac: Check for AltiVec and SPE.
* linux-ppc64-low.c (PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS)
(ppc_fill_vrregset, ppc_store_vrregset): New.
(target_regsets): Add AltiVec register set.
* configure: Regenerated.
* features/Makefile (WHICH): Add PowerPC register definitions.
(rs6000/powerpc-32-expedite, rs6000/powerpc-e500-expedite)
(rs6000/powerpc-64-expedite): New macros.
($(outdir)/%.dat): Handle subdirectories.
* regformats/rs6000/powerpc-32.dat, regformats/rs6000/powerpc-64.dat,
regformats/rs6000/powerpc-e500.dat: New generated files.
---
gdb/features/Makefile | 10 ++
gdb/gdbserver/Makefile.in | 10 ++
gdb/gdbserver/configure | 64 ++++++++++++++++++
gdb/gdbserver/configure.ac | 22 ++++++
gdb/gdbserver/configure.srv | 31 +++++++-
gdb/gdbserver/linux-ppc-low.c | 114 ++++++++++++++++++++++++++++++++-
gdb/gdbserver/linux-ppc64-low.c | 47 +++++++++++++
gdb/regformats/rs6000/powerpc-32.dat | 108 +++++++++++++++++++++++++++++++
gdb/regformats/rs6000/powerpc-64.dat | 108 +++++++++++++++++++++++++++++++
gdb/regformats/rs6000/powerpc-e500.dat | 76 ++++++++++++++++++++++
10 files changed, 581 insertions(+), 9 deletions(-)
Index: src/gdb/gdbserver/configure
===================================================================
--- src.orig/gdb/gdbserver/configure 2007-10-04 14:23:56.000000000 -0400
+++ src/gdb/gdbserver/configure 2007-10-04 16:06:09.000000000 -0400
@@ -3567,6 +3567,70 @@ fi
echo "$as_me:$LINENO: result: $gdb_cv_arm_iwmmxt" >&5
echo "${ECHO_T}$gdb_cv_arm_iwmmxt" >&6
;;
+ powerpc*-*-*)
+ echo "$as_me:$LINENO: checking if Altivec is selected" >&5
+echo $ECHO_N "checking if Altivec is selected... $ECHO_C" >&6
+if test "${gdb_cv_ppc_altivec+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $CFLAGS"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef __ALTIVEC__
+got it
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "got it" >/dev/null 2>&1; then
+ gdb_cv_ppc_altivec=yes
+else
+ gdb_cv_ppc_altivec=no
+fi
+rm -f conftest*
+
+ CPPFLAGS="$save_CPPFLAGS"
+fi
+echo "$as_me:$LINENO: result: $gdb_cv_ppc_altivec" >&5
+echo "${ECHO_T}$gdb_cv_ppc_altivec" >&6
+ echo "$as_me:$LINENO: checking if SPE is selected" >&5
+echo $ECHO_N "checking if SPE is selected... $ECHO_C" >&6
+if test "${gdb_cv_ppc_spe+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $CFLAGS"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef __SPE__
+got it
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "got it" >/dev/null 2>&1; then
+ gdb_cv_ppc_spe=yes
+else
+ gdb_cv_ppc_spe=no
+fi
+rm -f conftest*
+
+ CPPFLAGS="$save_CPPFLAGS"
+fi
+echo "$as_me:$LINENO: result: $gdb_cv_ppc_spe" >&5
+echo "${ECHO_T}$gdb_cv_ppc_spe" >&6
+ ;;
esac
. ${srcdir}/configure.srv
Index: src/gdb/gdbserver/Makefile.in
===================================================================
--- src.orig/gdb/gdbserver/Makefile.in 2007-10-04 14:23:56.000000000 -0400
+++ src/gdb/gdbserver/Makefile.in 2007-10-04 16:31:05.000000000 -0400
@@ -219,6 +219,7 @@ clean:
rm -f reg-ppc.c reg-sh.c reg-spu.c reg-x86-64.c reg-i386-linux.c
rm -f reg-cris.c reg-crisv32.c reg-x86-64-linux.c
rm -f arm-with-iwmmxt.c mips-linux.c mips64-linux.c
+ rm -f powerpc-32.c powerpc-64.c powerpc-e500.c
rm -f xml-builtin.c stamp-xml target.xml
maintainer-clean realclean distclean: clean
@@ -356,6 +357,15 @@ reg-ppc.c : $(srcdir)/../regformats/reg-
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
+powerpc-32.o : powerpc-32.c $(regdef_h)
+powerpc-32.c : $(srcdir)/../regformats/rs6000/powerpc-32.dat $(regdat_sh)
+ sh $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-32.dat powerpc-32.c
+powerpc-e500.o : powerpc-e500.c $(regdef_h)
+powerpc-e500.c : $(srcdir)/../regformats/rs6000/powerpc-e500.dat $(regdat_sh)
+ sh $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-e500.dat powerpc-e500.c
+powerpc-64.o : powerpc-64.c $(regdef_h)
+powerpc-64.c : $(srcdir)/../regformats/rs6000/powerpc-64.dat $(regdat_sh)
+ sh $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-64.dat powerpc-64.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
===================================================================
--- src.orig/gdb/gdbserver/configure.srv 2007-10-04 14:23:56.000000000 -0400
+++ src/gdb/gdbserver/configure.srv 2007-10-04 16:06:09.000000000 -0400
@@ -99,17 +99,38 @@ case "${target}" in
srv_linux_usrregs=yes
srv_linux_thread_db=yes
;;
- powerpc64-*-linux*) srv_regobj=reg-ppc64.o
- srv_tgtobj="linux-low.o linux-ppc64-low.o"
+ powerpc64-*-linux*) srv_tgtobj="linux-low.o linux-ppc64-low.o"
srv_linux_usrregs=yes
srv_linux_regsets=yes
srv_linux_thread_db=yes
- ;;
- powerpc-*-linux*) srv_regobj=reg-ppc.o
- srv_tgtobj="linux-low.o linux-ppc-low.o"
+ if test $gdb_cv_ppc_altivec = yes; then
+ srv_regobj=powerpc-64.o
+ srv_xmltarget=rs6000/powerpc-64.xml
+ srv_xmlfiles="rs6000/power-altivec.xml"
+ srv_xmlfiles="$srv_xmlfiles rs6000/power64-core.xml"
+ srv_xmlfiles="$srv_xmlfiles rs6000/power-fpu.xml"
+ else
+ srv_regobj=reg-ppc64.o
+ fi
+ ;;
+ powerpc-*-linux*) srv_tgtobj="linux-low.o linux-ppc-low.o"
srv_linux_usrregs=yes
srv_linux_regsets=yes
srv_linux_thread_db=yes
+ if test $gdb_cv_ppc_altivec = yes; then
+ srv_regobj=powerpc-32.o
+ srv_xmltarget=rs6000/powerpc-32.xml
+ srv_xmlfiles="rs6000/power-altivec.xml"
+ srv_xmlfiles="$srv_xmlfiles rs6000/power-core.xml"
+ srv_xmlfiles="$srv_xmlfiles rs6000/power-fpu.xml"
+ elif test $gdb_cv_ppc_spe = yes; then
+ srv_regobj=powerpc-e500.o
+ srv_xmltarget=rs6000/powerpc-e500.xml
+ srv_xmlfiles="rs6000/power-spe.xml"
+ srv_xmlfiles="$srv_xmlfiles rs6000/power-core.xml"
+ else
+ srv_regobj=reg-ppc.o
+ fi
;;
s390-*-linux*) srv_regobj=reg-s390.o
srv_tgtobj="linux-low.o linux-s390-low.o"
Index: src/gdb/gdbserver/linux-ppc-low.c
===================================================================
--- src.orig/gdb/gdbserver/linux-ppc-low.c 2007-10-04 14:23:56.000000000 -0400
+++ src/gdb/gdbserver/linux-ppc-low.c 2007-10-04 16:17:11.000000000 -0400
@@ -35,6 +35,16 @@ static int ppc_regmap[] =
PT_R20 * 4, PT_R21 * 4, PT_R22 * 4, PT_R23 * 4,
PT_R24 * 4, PT_R25 * 4, PT_R26 * 4, PT_R27 * 4,
PT_R28 * 4, PT_R29 * 4, PT_R30 * 4, PT_R31 * 4,
+#ifdef __SPE__
+ -1, -1, -1, -1,
+ -1, -1, -1, -1,
+ -1, -1, -1, -1,
+ -1, -1, -1, -1,
+ -1, -1, -1, -1,
+ -1, -1, -1, -1,
+ -1, -1, -1, -1,
+ -1, -1, -1, -1,
+#else
PT_FPR0*4, PT_FPR0*4 + 8, PT_FPR0*4+16, PT_FPR0*4+24,
PT_FPR0*4+32, PT_FPR0*4+40, PT_FPR0*4+48, PT_FPR0*4+56,
PT_FPR0*4+64, PT_FPR0*4+72, PT_FPR0*4+80, PT_FPR0*4+88,
@@ -43,15 +53,23 @@ static int ppc_regmap[] =
PT_FPR0*4+160, PT_FPR0*4+168, PT_FPR0*4+176, PT_FPR0*4+184,
PT_FPR0*4+192, PT_FPR0*4+200, PT_FPR0*4+208, PT_FPR0*4+216,
PT_FPR0*4+224, PT_FPR0*4+232, PT_FPR0*4+240, PT_FPR0*4+248,
+#endif
PT_NIP * 4, PT_MSR * 4, PT_CCR * 4, PT_LNK * 4,
- PT_CTR * 4, PT_XER * 4, PT_FPSCR * 4, };
+#ifdef __SPE__
+ PT_CTR * 4, PT_XER * 4, -1
+#else
+ PT_CTR * 4, PT_XER * 4, PT_FPSCR * 4
+#endif
+ };
static int
ppc_cannot_store_register (int regno)
{
+#ifndef __SPE__
/* Some kernels do not allow us to store fpscr. */
if (regno == find_regno ("fpscr"))
return 2;
+#endif
return 0;
}
@@ -113,7 +131,101 @@ static void ppc_fill_gregset (void *buf)
collect_register (i, (char *) buf + ppc_regmap[i]);
}
+#ifdef __ALTIVEC__
+
+#ifndef PTRACE_GETVRREGS
+#define PTRACE_GETVRREGS 18
+#define PTRACE_SETVRREGS 19
+#endif
+
+#define SIZEOF_VRREGS 33*16+4
+
+static void
+ppc_fill_vrregset (void *buf)
+{
+ int i, base;
+ char *regset = buf;
+
+ base = find_regno ("vr0");
+ for (i = 0; i < 32; i++)
+ collect_register (base + i, ®set[i * 16]);
+
+ collect_register_by_name ("vscr", ®set[32 * 16 + 12]);
+ collect_register_by_name ("vrsave", ®set[33 * 16]);
+}
+
+static void
+ppc_store_vrregset (const void *buf)
+{
+ int i, base;
+ const char *regset = buf;
+
+ base = find_regno ("vr0");
+ for (i = 0; i < 32; i++)
+ supply_register (base + i, ®set[i * 16]);
+
+ supply_register_by_name ("vscr", ®set[32 * 16 + 12]);
+ supply_register_by_name ("vrsave", ®set[33 * 16]);
+}
+
+#endif /* __ALTIVEC__ */
+
+#ifdef __SPE__
+
+#ifndef PTRACE_GETEVRREGS
+#define PTRACE_GETEVRREGS 20
+#define PTRACE_SETEVRREGS 21
+#endif
+
+struct gdb_evrregset_t
+{
+ unsigned long evr[32];
+ unsigned long long acc;
+ unsigned long spefscr;
+};
+
+static void
+ppc_fill_evrregset (void *buf)
+{
+ int i, ev0;
+ struct gdb_evrregset_t *regset = buf;
+
+ ev0 = find_regno ("ev0h");
+ for (i = 0; i < 32; i++)
+ collect_register (ev0 + i, ®set->evr[i]);
+
+ collect_register_by_name ("acc", ®set->acc);
+ collect_register_by_name ("spefscr", ®set->spefscr);
+}
+
+static void
+ppc_store_evrregset (const void *buf)
+{
+ int i, ev0;
+ const struct gdb_evrregset_t *regset = buf;
+
+ ev0 = find_regno ("ev0h");
+ for (i = 0; i < 32; i++)
+ supply_register (ev0 + i, ®set->evr[i]);
+
+ supply_register_by_name ("acc", ®set->acc);
+ supply_register_by_name ("spefscr", ®set->spefscr);
+}
+#endif /* __SPE__ */
+
struct regset_info target_regsets[] = {
+ /* List the extra register sets before GENERAL_REGS. That way we will
+ fetch them every time, but still fall back to PTRACE_PEEKUSER for the
+ general registers. Some kernels support these, but not the newer
+ PPC_PTRACE_GETREGS. */
+#ifdef __ALTIVEC__
+ { PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS, EXTENDED_REGS,
+ ppc_fill_vrregset, ppc_store_vrregset },
+#endif
+#ifdef __SPE__
+ { PTRACE_GETEVRREGS, PTRACE_SETEVRREGS, 32 * 4 + 8 + 4, EXTENDED_REGS,
+ ppc_fill_evrregset, ppc_store_evrregset },
+#endif
{ 0, 0, 0, GENERAL_REGS, ppc_fill_gregset, NULL },
{ 0, 0, -1, -1, NULL, NULL }
};
Index: src/gdb/gdbserver/configure.ac
===================================================================
--- src.orig/gdb/gdbserver/configure.ac 2007-10-04 14:23:57.000000000 -0400
+++ src/gdb/gdbserver/configure.ac 2007-10-04 16:06:09.000000000 -0400
@@ -81,6 +81,28 @@ got it
[gdb_cv_arm_iwmmxt=no])
CPPFLAGS="$save_CPPFLAGS"])
;;
+ powerpc*-*-*)
+ AC_CACHE_CHECK([if Altivec is selected], [gdb_cv_ppc_altivec],
+ [save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $CFLAGS"
+ AC_EGREP_CPP([got it], [
+#ifdef __ALTIVEC__
+got it
+#endif
+ ], [gdb_cv_ppc_altivec=yes],
+ [gdb_cv_ppc_altivec=no])
+ CPPFLAGS="$save_CPPFLAGS"])
+ AC_CACHE_CHECK([if SPE is selected], [gdb_cv_ppc_spe],
+ [save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $CFLAGS"
+ AC_EGREP_CPP([got it], [
+#ifdef __SPE__
+got it
+#endif
+ ], [gdb_cv_ppc_spe=yes],
+ [gdb_cv_ppc_spe=no])
+ CPPFLAGS="$save_CPPFLAGS"])
+ ;;
esac
. ${srcdir}/configure.srv
Index: src/gdb/gdbserver/linux-ppc64-low.c
===================================================================
--- src.orig/gdb/gdbserver/linux-ppc64-low.c 2007-10-04 14:23:57.000000000 -0400
+++ src/gdb/gdbserver/linux-ppc64-low.c 2007-10-04 16:06:09.000000000 -0400
@@ -109,7 +109,54 @@ static void ppc_fill_gregset (void *buf)
collect_register (i, (char *) buf + ppc_regmap[i]);
}
+#ifdef __ALTIVEC__
+
+#ifndef PTRACE_GETVRREGS
+#define PTRACE_GETVRREGS 18
+#define PTRACE_SETVRREGS 19
+#endif
+
+#define SIZEOF_VRREGS 33*16+4
+
+static void
+ppc_fill_vrregset (void *buf)
+{
+ int i, base;
+ char *regset = buf;
+
+ base = find_regno ("vr0");
+ for (i = 0; i < 32; i++)
+ collect_register (base + i, ®set[i * 16]);
+
+ collect_register_by_name ("vscr", ®set[32 * 16 + 12]);
+ collect_register_by_name ("vrsave", ®set[33 * 16]);
+}
+
+static void
+ppc_store_vrregset (const void *buf)
+{
+ int i, base;
+ const char *regset = buf;
+
+ base = find_regno ("vr0");
+ for (i = 0; i < 32; i++)
+ supply_register (base + i, ®set[i * 16]);
+
+ supply_register_by_name ("vscr", ®set[32 * 16 + 12]);
+ supply_register_by_name ("vrsave", ®set[33 * 16]);
+}
+
+#endif /* __ALTIVEC__ */
+
struct regset_info target_regsets[] = {
+ /* List the extra register sets before GENERAL_REGS. That way we will
+ fetch them every time, but still fall back to PTRACE_PEEKUSER for the
+ general registers. Some kernels support these, but not the newer
+ PPC_PTRACE_GETREGS. */
+#ifdef __ALTIVEC__
+ { PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS, EXTENDED_REGS,
+ ppc_fill_vrregset, ppc_store_vrregset },
+#endif
{ 0, 0, 0, GENERAL_REGS, ppc_fill_gregset, NULL },
{ 0, 0, -1, -1, NULL, NULL }
};
Index: src/gdb/features/Makefile
===================================================================
--- src.orig/gdb/features/Makefile 2007-10-04 14:23:57.000000000 -0400
+++ src/gdb/features/Makefile 2007-10-04 16:06:09.000000000 -0400
@@ -31,12 +31,16 @@
# in the GDB repository. To generate C files:
# make GDB=/path/to/gdb XMLTOC="xml files" cfiles
-WHICH = arm-with-iwmmxt mips-linux mips64-linux
+WHICH = arm-with-iwmmxt mips-linux mips64-linux \
+ rs6000/powerpc-32 rs6000/powerpc-e500 rs6000/powerpc-64
# Record which registers should be sent to GDB by default after stop.
arm-with-iwmmxt-expedite = r11,sp,pc
mips-linux-expedite = r29,pc
mips64-linux-expedite = r29,pc
+rs6000/powerpc-32-expedite = r1,pc
+rs6000/powerpc-e500-expedite = r1,pc
+rs6000/powerpc-64-expedite = r1,pc
XSLTPROC = xsltproc
outdir = ../regformats
@@ -50,9 +54,9 @@ all: $(OUTPUTS)
$(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl
echo "# DO NOT EDIT: generated from $<" > $(outdir)/$*.tmp
- echo "name:`echo $* | sed 's/-/_/g'`" >> $(outdir)/$*.tmp
+ echo "name:`echo $(notdir $*) | sed 's/-/_/g'`" >> $(outdir)/$*.tmp
echo "expedite:$($*-expedite)" >> $(outdir)/$*.tmp
- $(XSLTPROC) --xinclude number-regs.xsl $< | \
+ $(XSLTPROC) --path "$(PWD)" --xinclude number-regs.xsl $< | \
$(XSLTPROC) sort-regs.xsl - | \
$(XSLTPROC) gdbserver-regs.xsl - >> $(outdir)/$*.tmp
sh ../../move-if-change $(outdir)/$*.tmp $(outdir)/$*.dat
Index: src/gdb/regformats/rs6000/powerpc-32.dat
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ src/gdb/regformats/rs6000/powerpc-32.dat 2007-10-04 16:06:09.000000000 -0400
@@ -0,0 +1,108 @@
+# DO NOT EDIT: generated from rs6000/powerpc-32.xml
+name:powerpc_32
+expedite:r1,pc
+32:r0
+32:r1
+32:r2
+32:r3
+32:r4
+32:r5
+32:r6
+32:r7
+32:r8
+32:r9
+32:r10
+32:r11
+32:r12
+32:r13
+32:r14
+32:r15
+32:r16
+32:r17
+32:r18
+32:r19
+32:r20
+32:r21
+32:r22
+32:r23
+32:r24
+32:r25
+32:r26
+32:r27
+32:r28
+32:r29
+32:r30
+32: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
+32:pc
+32:msr
+32:cr
+32:lr
+32:ctr
+32:xer
+32:fpscr
+128:vr0
+128:vr1
+128:vr2
+128:vr3
+128:vr4
+128:vr5
+128:vr6
+128:vr7
+128:vr8
+128:vr9
+128:vr10
+128:vr11
+128:vr12
+128:vr13
+128:vr14
+128:vr15
+128:vr16
+128:vr17
+128:vr18
+128:vr19
+128:vr20
+128:vr21
+128:vr22
+128:vr23
+128:vr24
+128:vr25
+128:vr26
+128:vr27
+128:vr28
+128:vr29
+128:vr30
+128:vr31
+32:vscr
+32:vrsave
Index: src/gdb/regformats/rs6000/powerpc-64.dat
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ src/gdb/regformats/rs6000/powerpc-64.dat 2007-10-04 16:06:09.000000000 -0400
@@ -0,0 +1,108 @@
+# DO NOT EDIT: generated from rs6000/powerpc-64.xml
+name:powerpc_64
+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:msr
+32:cr
+64:lr
+64:ctr
+32:xer
+32:fpscr
+128:vr0
+128:vr1
+128:vr2
+128:vr3
+128:vr4
+128:vr5
+128:vr6
+128:vr7
+128:vr8
+128:vr9
+128:vr10
+128:vr11
+128:vr12
+128:vr13
+128:vr14
+128:vr15
+128:vr16
+128:vr17
+128:vr18
+128:vr19
+128:vr20
+128:vr21
+128:vr22
+128:vr23
+128:vr24
+128:vr25
+128:vr26
+128:vr27
+128:vr28
+128:vr29
+128:vr30
+128:vr31
+32:vscr
+32:vrsave
Index: src/gdb/regformats/rs6000/powerpc-e500.dat
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ src/gdb/regformats/rs6000/powerpc-e500.dat 2007-10-04 16:06:09.000000000 -0400
@@ -0,0 +1,76 @@
+# DO NOT EDIT: generated from rs6000/powerpc-e500.xml
+name:powerpc_e500
+expedite:r1,pc
+32:r0
+32:r1
+32:r2
+32:r3
+32:r4
+32:r5
+32:r6
+32:r7
+32:r8
+32:r9
+32:r10
+32:r11
+32:r12
+32:r13
+32:r14
+32:r15
+32:r16
+32:r17
+32:r18
+32:r19
+32:r20
+32:r21
+32:r22
+32:r23
+32:r24
+32:r25
+32:r26
+32:r27
+32:r28
+32:r29
+32:r30
+32:r31
+32:ev0h
+32:ev1h
+32:ev2h
+32:ev3h
+32:ev4h
+32:ev5h
+32:ev6h
+32:ev7h
+32:ev8h
+32:ev9h
+32:ev10h
+32:ev11h
+32:ev12h
+32:ev13h
+32:ev14h
+32:ev15h
+32:ev16h
+32:ev17h
+32:ev18h
+32:ev19h
+32:ev20h
+32:ev21h
+32:ev22h
+32:ev23h
+32:ev24h
+32:ev25h
+32:ev26h
+32:ev27h
+32:ev28h
+32:ev29h
+32:ev30h
+32:ev31h
+32:pc
+32:msr
+32:cr
+32:lr
+32:ctr
+32:xer
+0:
+64:acc
+32:spefscr
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch] gdbserver support for e500 / altivec
2007-10-05 18:02 [patch] gdbserver support for e500 / altivec Daniel Jacobowitz
@ 2007-10-15 20:22 ` Daniel Jacobowitz
2007-10-16 22:22 ` Ulrich Weigand
1 sibling, 0 replies; 4+ messages in thread
From: Daniel Jacobowitz @ 2007-10-15 20:22 UTC (permalink / raw)
To: gdb-patches
On Fri, Oct 05, 2007 at 02:02:07PM -0400, Daniel Jacobowitz wrote:
> Oh, I suppose this needs a NEWS entry. I'll handle that after it's
> checked in.
I've checked it in, along with this NEWS entry.
--
Daniel Jacobowitz
CodeSourcery
2007-10-15 Daniel Jacobowitz <dan@codesourcery.com>
* NEWS: Mention gdbserver PowerPC improvements.
Index: NEWS
===================================================================
RCS file: /cvs/src/src/gdb/NEWS,v
retrieving revision 1.242
diff -u -p -r1.242 NEWS
--- NEWS 15 Oct 2007 19:45:30 -0000 1.242
+++ NEWS 15 Oct 2007 20:00:00 -0000
@@ -12,6 +12,9 @@ and in inlined functions.
* Target descriptions can now describe registers for PowerPC.
+* The GDB remote stub, gdbserver, now supports the AltiVec and SPE
+registers on PowerPC targets.
+
*** Changes in GDB 6.7
* Resolved 101 resource leaks, null pointer dereferences, etc. in gdb,
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch] gdbserver support for e500 / altivec
2007-10-05 18:02 [patch] gdbserver support for e500 / altivec Daniel Jacobowitz
2007-10-15 20:22 ` Daniel Jacobowitz
@ 2007-10-16 22:22 ` Ulrich Weigand
2007-10-17 1:02 ` Daniel Jacobowitz
1 sibling, 1 reply; 4+ messages in thread
From: Ulrich Weigand @ 2007-10-16 22:22 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: gdb-patches
Dan Jacobowitz wrote:
> * configure.srv: Use alternate register sets for powerpc64-*-linux*
> with AltiVec, powerpc-*-linux* with AltiVec, and powerpc-*-linux*
> with SPE.
This uses a configure-time check whether __ALTIVEC__ is defined. However,
GCC for PowerPC by default does not define __ALTIVEC__, it does so only
when using the -maltivec flag. In any case, this is rather independent of
whether the target system supports AltiVec or not ...
Why does this need to be a configure check in the first place? Wouldn't
it be much preferable if you could build a single gdbserver binary that
would report the properties of the system it happens to be running on?
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch] gdbserver support for e500 / altivec
2007-10-16 22:22 ` Ulrich Weigand
@ 2007-10-17 1:02 ` Daniel Jacobowitz
0 siblings, 0 replies; 4+ messages in thread
From: Daniel Jacobowitz @ 2007-10-17 1:02 UTC (permalink / raw)
To: Ulrich Weigand; +Cc: gdb-patches
On Wed, Oct 17, 2007 at 12:09:32AM +0200, Ulrich Weigand wrote:
> Dan Jacobowitz wrote:
>
> > * configure.srv: Use alternate register sets for powerpc64-*-linux*
> > with AltiVec, powerpc-*-linux* with AltiVec, and powerpc-*-linux*
> > with SPE.
>
> This uses a configure-time check whether __ALTIVEC__ is defined. However,
> GCC for PowerPC by default does not define __ALTIVEC__, it does so only
> when using the -maltivec flag. In any case, this is rather independent of
> whether the target system supports AltiVec or not ...
Not quite independent: if you built gdbserver with -maltivec (and
-mabi=altivec normally) then gdbserver will require altivec to run.
The other direction is a problem though.
> Why does this need to be a configure check in the first place? Wouldn't
> it be much preferable if you could build a single gdbserver binary that
> would report the properties of the system it happens to be running on?
I agree. But to do it that way, you need to make gdbserver support
multiple register cache layouts; multiple potential XML descriptions
to return as target.xml; and runtime detection of which register set
to use.
It's definitely doable (GDB does it). I haven't found the time
yet, and this was easy. So consider it a missing feature, or
a challenge :-)
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2007-10-17 0:36 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-10-05 18:02 [patch] gdbserver support for e500 / altivec Daniel Jacobowitz
2007-10-15 20:22 ` Daniel Jacobowitz
2007-10-16 22:22 ` Ulrich Weigand
2007-10-17 1:02 ` Daniel Jacobowitz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox