* features/Makefile, features/arm-with-iwmmxt.xml,
features/gdbserver-regs.xsl, features/number-regs.xsl, features/sort-regs.xsl, features/xscale-iwmmxt.xml: New files. * regformats/arm-with-iwmmxt.dat: Generate. * NEWS: Mention iWMMXt. * gdb.arch/iwmmxt-regs.c, gdb.arch/iwmmxt-regs.exp: New. * Makefile.in (OBS): Add $(XML_BUILTIN). (XML_DIR, XML_TARGET, XML_FILES, XML_BUILTIN): New. (clean): Update. (target.xml, xml-builtin.c, stamp-xml, arm-with-iwmmxt.o) (arm-with-iwmmxt.c): New. * config.in, configure: Regenerate. * configure.ac: Check for iWMMXt. Handle srv_xmltarget, srv_xmlbuiltin, and srv_xmlfiles. Define USE_XML. * configure.srv: Mention srv_xmltarget and srv_xmlfiles. (arm*-*-linux*): Add iWMMXt and regset support. * linux-arm-low.c (PTRACE_GETWMMXREGS, PTRACE_SETWMMXREGS): Define. (arm_fill_gregset, arm_store_gregset, arm_fill_wmmxregset) (arm_store_wmmxregset, target_regsets): New. * server.c (get_features_xml): Take annex argument. Check builtin XML documents. (handle_query): Handle multiple annexes.
This commit is contained in:
parent
f3cd89f49b
commit
fb1e4ffce3
|
@ -1,3 +1,11 @@
|
|||
2007-02-08 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* features/Makefile, features/arm-with-iwmmxt.xml,
|
||||
features/gdbserver-regs.xsl, features/number-regs.xsl,
|
||||
features/sort-regs.xsl, features/xscale-iwmmxt.xml: New files.
|
||||
* regformats/arm-with-iwmmxt.dat: Generate.
|
||||
* NEWS: Mention iWMMXt.
|
||||
|
||||
2007-02-08 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* Makefile.in (arm-tdep.o, eval.o, target-descriptions.o)
|
||||
|
|
3
gdb/NEWS
3
gdb/NEWS
|
@ -22,6 +22,9 @@ a local file or over the remote serial protocol.
|
|||
for architectures which have implemented the support (currently
|
||||
only ARM).
|
||||
|
||||
* The GDB remote stub, gdbserver, now supports the XScale iWMMXt
|
||||
coprocessor.
|
||||
|
||||
* New commands
|
||||
|
||||
set mem inaccessible-by-default
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
# Copyright (C) 2007 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
|
||||
# This file requires GNU make!
|
||||
|
||||
# This Makefile updates files in ../regformats from their XML master
|
||||
# copies. Because this relies on xsltproc, it is not normally run
|
||||
# during the build process; it should be run by hand when one of the
|
||||
# affected XML files is changed, and the results should be kept in the
|
||||
# GDB repository.
|
||||
|
||||
WHICH = arm-with-iwmmxt
|
||||
|
||||
# Record which registers should be sent to GDB by default after stop.
|
||||
arm-with-iwmmxt-expedite = r11,sp,pc
|
||||
|
||||
XSLTPROC = xsltproc
|
||||
outdir = ../regformats
|
||||
OUTPUTS = $(patsubst %,$(outdir)/%.dat,$(WHICH))
|
||||
|
||||
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 "expedite:$($*-expedite)" >> $(outdir)/$*.tmp
|
||||
$(XSLTPROC) --xinclude number-regs.xsl $< | \
|
||||
$(XSLTPROC) sort-regs.xsl - | \
|
||||
$(XSLTPROC) gdbserver-regs.xsl - >> $(outdir)/$*.tmp
|
||||
sh ../../move-if-change $(outdir)/$*.tmp $(outdir)/$*.dat
|
||||
|
||||
# Other dependencies.
|
||||
$(outdir)/arm-with-iwmmxt.dat: arm-core.xml xscale-iwmmxt.xml
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved. -->
|
||||
|
||||
<!DOCTYPE target SYSTEM "gdb-target.dtd">
|
||||
<target>
|
||||
<architecture>iwmmxt</architecture>
|
||||
<xi:include href="arm-core.xml"/>
|
||||
<xi:include href="xscale-iwmmxt.xml"/>
|
||||
</target>
|
|
@ -0,0 +1,47 @@
|
|||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:output method="text"/>
|
||||
|
||||
<xsl:variable name="total" select="count(//reg)"/>
|
||||
|
||||
<xsl:template name="pad">
|
||||
<xsl:param name="count" select="0"/>
|
||||
<xsl:text>0:
|
||||
</xsl:text>
|
||||
<xsl:if test="$count > 1">
|
||||
<xsl:call-template name="pad">
|
||||
<xsl:with-param name="count" select="$count - 1"/>
|
||||
</xsl:call-template>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="reg">
|
||||
<xsl:param name="which" select="1"/>
|
||||
<xsl:param name="nextnum" select="0"/>
|
||||
<xsl:variable name="thisnum" select="@regnum"/>
|
||||
<xsl:if test="$nextnum < number(@regnum)">
|
||||
<xsl:call-template name="pad">
|
||||
<xsl:with-param name="count" select="@regnum - $nextnum"/>
|
||||
</xsl:call-template>
|
||||
</xsl:if>
|
||||
<xsl:value-of select="@bitsize"/>
|
||||
<xsl:text>:</xsl:text>
|
||||
<xsl:value-of select="@name"/>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
<xsl:if test="$which < $total">
|
||||
<xsl:for-each select="/descendant::reg[$which + 1]">
|
||||
<xsl:call-template name="reg">
|
||||
<xsl:with-param name="which" select="$which + 1"/>
|
||||
<xsl:with-param name="nextnum" select="$thisnum + 1"/>
|
||||
</xsl:call-template>
|
||||
</xsl:for-each>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="/">
|
||||
<xsl:for-each select="/descendant::reg[1]">
|
||||
<xsl:call-template name="reg"/>
|
||||
</xsl:for-each>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,47 @@
|
|||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:variable name="total" select="count(//reg)"/>
|
||||
<xsl:template name="reg">
|
||||
<xsl:param name="which" select="1"/>
|
||||
<xsl:param name="nextnum" select="0"/>
|
||||
<xsl:variable name="thisnum" select="@regnum"/>
|
||||
<xsl:element name="reg">
|
||||
<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
|
||||
<xsl:attribute name="bitsize"><xsl:value-of select="@bitsize"/></xsl:attribute>
|
||||
<xsl:choose>
|
||||
<xsl:when test="not(@regnum)">
|
||||
<xsl:attribute name="regnum"><xsl:value-of select="$nextnum"/></xsl:attribute>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:attribute name="regnum"><xsl:value-of select="@regnum"/></xsl:attribute>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:element>
|
||||
<xsl:if test="$which < $total">
|
||||
<xsl:for-each select="/descendant::reg[$which + 1]">
|
||||
<xsl:choose>
|
||||
<xsl:when test="not($thisnum)">
|
||||
<xsl:call-template name="reg">
|
||||
<xsl:with-param name="which" select="$which + 1"/>
|
||||
<xsl:with-param name="nextnum" select="$nextnum + 1"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:call-template name="reg">
|
||||
<xsl:with-param name="which" select="$which + 1"/>
|
||||
<xsl:with-param name="nextnum" select="$thisnum + 1"/>
|
||||
</xsl:call-template>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:for-each>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="/">
|
||||
<target>
|
||||
<xsl:for-each select="/descendant::reg[1]">
|
||||
<xsl:call-template name="reg"/>
|
||||
</xsl:for-each>
|
||||
</target>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,11 @@
|
|||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:template match="/">
|
||||
<target>
|
||||
<xsl:for-each select="//reg">
|
||||
<xsl:sort select="regnum" data-type="number"/>
|
||||
<xsl:copy-of select="."/>
|
||||
</xsl:for-each>
|
||||
</target>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved. -->
|
||||
|
||||
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
|
||||
<feature name="org.gnu.gdb.xscale.iwmmxt">
|
||||
<vector id="iwmmxt_v8u8" type="uint8" count="8"/>
|
||||
<vector id="iwmmxt_v4u16" type="uint16" count="4"/>
|
||||
<vector id="iwmmxt_v2u32" type="uint32" count="2"/>
|
||||
<union id="iwmmxt_vec64i">
|
||||
<field name="u8" type="iwmmxt_v8u8"/>
|
||||
<field name="u16" type="iwmmxt_v4u16"/>
|
||||
<field name="u32" type="iwmmxt_v2u32"/>
|
||||
<field name="u64" type="uint64"/>
|
||||
</union>
|
||||
|
||||
<reg name="wr0" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr1" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr2" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr3" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr4" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr5" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr6" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr7" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr8" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr9" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr10" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr11" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr12" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr13" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr14" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
<reg name="wr15" bitsize="64" type="iwmmxt_vec64i"/>
|
||||
|
||||
<reg name="wcssf" bitsize="32" type="int" group="vector"/>
|
||||
<reg name="wcasf" bitsize="32" type="int" group="vector"/>
|
||||
|
||||
<reg name="wcgr0" bitsize="32" type="int" group="vector"/>
|
||||
<reg name="wcgr1" bitsize="32" type="int" group="vector"/>
|
||||
<reg name="wcgr2" bitsize="32" type="int" group="vector"/>
|
||||
<reg name="wcgr3" bitsize="32" type="int" group="vector"/>
|
||||
</feature>
|
|
@ -1,3 +1,22 @@
|
|||
2007-02-08 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* Makefile.in (OBS): Add $(XML_BUILTIN).
|
||||
(XML_DIR, XML_TARGET, XML_FILES, XML_BUILTIN): New.
|
||||
(clean): Update.
|
||||
(target.xml, xml-builtin.c, stamp-xml, arm-with-iwmmxt.o)
|
||||
(arm-with-iwmmxt.c): New.
|
||||
* config.in, configure: Regenerate.
|
||||
* configure.ac: Check for iWMMXt. Handle srv_xmltarget,
|
||||
srv_xmlbuiltin, and srv_xmlfiles. Define USE_XML.
|
||||
* configure.srv: Mention srv_xmltarget and srv_xmlfiles.
|
||||
(arm*-*-linux*): Add iWMMXt and regset support.
|
||||
* linux-arm-low.c (PTRACE_GETWMMXREGS, PTRACE_SETWMMXREGS): Define.
|
||||
(arm_fill_gregset, arm_store_gregset, arm_fill_wmmxregset)
|
||||
(arm_store_wmmxregset, target_regsets): New.
|
||||
* server.c (get_features_xml): Take annex argument. Check builtin
|
||||
XML documents.
|
||||
(handle_query): Handle multiple annexes.
|
||||
|
||||
2007-01-29 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* remote-utils.c [USE_WIN32API] (read, write): Define.
|
||||
|
|
|
@ -137,10 +137,17 @@ TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS}
|
|||
OBS = inferiors.o regcache.o remote-utils.o server.o signals.o target.o \
|
||||
utils.o version.o \
|
||||
mem-break.o \
|
||||
$(XML_BUILTIN) \
|
||||
$(DEPFILES)
|
||||
GDBSERVER_LIBS = @GDBSERVER_LIBS@
|
||||
XM_CLIBS = @LIBS@
|
||||
|
||||
# XML files to compile in to gdbserver, if any.
|
||||
XML_DIR = $(srcdir)/../features
|
||||
XML_TARGET = @srv_xmltarget@
|
||||
XML_FILES = @srv_xmlfiles@
|
||||
XML_BUILTIN = @srv_xmlbuiltin@
|
||||
|
||||
# Prevent Sun make from putting in the machine type. Setting
|
||||
# TARGET_ARCH to nothing works for SunOS 3, 4.0, but not for 4.1.
|
||||
.c.o:
|
||||
|
@ -207,6 +214,8 @@ clean:
|
|||
rm -f reg-arm.c reg-i386.c reg-ia64.c reg-m32r.c reg-m68k.c reg-mips.c
|
||||
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 reg-mips64.c
|
||||
rm -f arm-with-iwmmxt.c
|
||||
rm -f xml-builtin.c stamp-xml target.xml
|
||||
|
||||
maintainer-clean realclean distclean: clean
|
||||
rm -f nm.h tm.h xm.h config.status config.h stamp-h config.log
|
||||
|
@ -232,6 +241,19 @@ version.c: Makefile $(srcdir)/../version.in
|
|||
mv version.c-tmp version.c
|
||||
version.o: version.c $(server_h)
|
||||
|
||||
target.xml: $(XML_TARGET)
|
||||
rm -f target.xml
|
||||
cp $(XML_TARGET) target.xml
|
||||
|
||||
xml-builtin.c: stamp-xml; @true
|
||||
stamp-xml: $(XML_DIR)/feature_to_c.sh Makefile $(XML_FILES)
|
||||
rm -f xml-builtin.tmp
|
||||
$(SHELL) $(XML_DIR)/feature_to_c.sh xml-builtin.tmp $(XML_FILES)
|
||||
$(SHELL) $(srcdir)/../../move-if-change xml-builtin.tmp xml-builtin.c
|
||||
echo stamp > stamp-xml
|
||||
|
||||
.PRECIOUS: target.xml xml-builtin.c
|
||||
|
||||
# GNU Make has an annoying habit of putting *all* the Makefile variables
|
||||
# into the environment, unless you include this target as a circumvention.
|
||||
# Rumor is that this will be fixed (and this target can be removed)
|
||||
|
@ -294,6 +316,9 @@ spu-low.o: spu-low.c $(server_h)
|
|||
reg-arm.o : reg-arm.c $(regdef_h)
|
||||
reg-arm.c : $(srcdir)/../regformats/reg-arm.dat $(regdat_sh)
|
||||
sh $(regdat_sh) $(srcdir)/../regformats/reg-arm.dat reg-arm.c
|
||||
arm-with-iwmmxt.o : arm-with-iwmmxt.c $(regdef_h)
|
||||
arm-with-iwmmxt.c : $(srcdir)/../regformats/arm-with-iwmmxt.dat $(regdat_sh)
|
||||
sh $(regdat_sh) $(srcdir)/../regformats/arm-with-iwmmxt.dat arm-with-iwmmxt.c
|
||||
reg-cris.o : reg-cris.c $(regdef_h)
|
||||
reg-cris.c : $(srcdir)/../regformats/reg-cris.dat $(regdat_sh)
|
||||
sh $(regdat_sh) $(srcdir)/../regformats/reg-cris.dat reg-cris.c
|
||||
|
|
|
@ -135,3 +135,6 @@
|
|||
Windows, we use the Windows API when building for MinGW, but the POSIX API
|
||||
when building for Cygwin. */
|
||||
#undef USE_WIN32API
|
||||
|
||||
/* Define if an XML target description is available. */
|
||||
#undef USE_XML
|
||||
|
|
|
@ -309,7 +309,7 @@ ac_includes_default="\
|
|||
# include <unistd.h>
|
||||
#endif"
|
||||
|
||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CPP EGREP RDYNAMIC GDBSERVER_DEPFILES GDBSERVER_LIBS USE_THREAD_DB LIBOBJS LTLIBOBJS'
|
||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CPP EGREP RDYNAMIC GDBSERVER_DEPFILES GDBSERVER_LIBS USE_THREAD_DB srv_xmlbuiltin srv_xmlfiles srv_xmltarget LIBOBJS LTLIBOBJS'
|
||||
ac_subst_files=''
|
||||
|
||||
# Initialize some variables set by options.
|
||||
|
@ -3230,6 +3230,45 @@ _ACEOF
|
|||
|
||||
fi
|
||||
|
||||
|
||||
# Check for various supplementary target information (beyond the
|
||||
# triplet) which might affect the choices in configure.srv.
|
||||
case "${target}" in
|
||||
arm*-*-linux*)
|
||||
echo "$as_me:$LINENO: checking if iWMMXt is selected" >&5
|
||||
echo $ECHO_N "checking if iWMMXt is selected... $ECHO_C" >&6
|
||||
if test "${gdb_cv_arm_iwmmxt+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 __IWMMXT__
|
||||
got it
|
||||
#endif
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
$EGREP "got it" >/dev/null 2>&1; then
|
||||
gdb_cv_arm_iwmmxt=yes
|
||||
else
|
||||
gdb_cv_arm_iwmmxt=no
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
CPPFLAGS="$save_CPPFLAGS"
|
||||
fi
|
||||
echo "$as_me:$LINENO: result: $gdb_cv_arm_iwmmxt" >&5
|
||||
echo "${ECHO_T}$gdb_cv_arm_iwmmxt" >&6
|
||||
;;
|
||||
esac
|
||||
|
||||
. ${srcdir}/configure.srv
|
||||
|
||||
if test "${srv_mingw}" = "yes"; then
|
||||
|
@ -3977,6 +4016,22 @@ _ACEOF
|
|||
fi
|
||||
fi
|
||||
|
||||
if test "$srv_xmltarget" != ""; then
|
||||
srv_xmltarget="\$(XML_DIR)/$srv_xmltarget"
|
||||
srv_xmlbuiltin="xml-builtin.o"
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define USE_XML 1
|
||||
_ACEOF
|
||||
|
||||
|
||||
tmp_xmlfiles=$srv_xmlfiles
|
||||
srv_xmlfiles="target.xml"
|
||||
for f in $tmp_xmlfiles; do
|
||||
srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f"
|
||||
done
|
||||
fi
|
||||
|
||||
GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_thread_depfiles"
|
||||
GDBSERVER_LIBS="$srv_libs"
|
||||
|
||||
|
@ -3984,6 +4039,9 @@ GDBSERVER_LIBS="$srv_libs"
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ac_config_files="$ac_config_files Makefile"
|
||||
ac_config_commands="$ac_config_commands default"
|
||||
cat >confcache <<\_ACEOF
|
||||
|
@ -4630,6 +4688,9 @@ s,@RDYNAMIC@,$RDYNAMIC,;t t
|
|||
s,@GDBSERVER_DEPFILES@,$GDBSERVER_DEPFILES,;t t
|
||||
s,@GDBSERVER_LIBS@,$GDBSERVER_LIBS,;t t
|
||||
s,@USE_THREAD_DB@,$USE_THREAD_DB,;t t
|
||||
s,@srv_xmlbuiltin@,$srv_xmlbuiltin,;t t
|
||||
s,@srv_xmlfiles@,$srv_xmlfiles,;t t
|
||||
s,@srv_xmltarget@,$srv_xmltarget,;t t
|
||||
s,@LIBOBJS@,$LIBOBJS,;t t
|
||||
s,@LTLIBOBJS@,$LTLIBOBJS,;t t
|
||||
CEOF
|
||||
|
|
|
@ -48,6 +48,24 @@ AC_CHECK_TYPES(socklen_t, [], [],
|
|||
[#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
])
|
||||
|
||||
# Check for various supplementary target information (beyond the
|
||||
# triplet) which might affect the choices in configure.srv.
|
||||
case "${target}" in
|
||||
arm*-*-linux*)
|
||||
AC_CACHE_CHECK([if iWMMXt is selected], [gdb_cv_arm_iwmmxt],
|
||||
[save_CPPFLAGS="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $CFLAGS"
|
||||
AC_EGREP_CPP([got it], [
|
||||
#ifdef __IWMMXT__
|
||||
got it
|
||||
#endif
|
||||
], [gdb_cv_arm_iwmmxt=yes],
|
||||
[gdb_cv_arm_iwmmxt=no])
|
||||
CPPFLAGS="$save_CPPFLAGS"])
|
||||
;;
|
||||
esac
|
||||
|
||||
. ${srcdir}/configure.srv
|
||||
|
||||
if test "${srv_mingw}" = "yes"; then
|
||||
|
@ -140,12 +158,27 @@ if test "$srv_linux_thread_db" = "yes"; then
|
|||
fi
|
||||
fi
|
||||
|
||||
if test "$srv_xmltarget" != ""; then
|
||||
srv_xmltarget="\$(XML_DIR)/$srv_xmltarget"
|
||||
srv_xmlbuiltin="xml-builtin.o"
|
||||
AC_DEFINE(USE_XML, 1, [Define if an XML target description is available.])
|
||||
|
||||
tmp_xmlfiles=$srv_xmlfiles
|
||||
srv_xmlfiles="target.xml"
|
||||
for f in $tmp_xmlfiles; do
|
||||
srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f"
|
||||
done
|
||||
fi
|
||||
|
||||
GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_thread_depfiles"
|
||||
GDBSERVER_LIBS="$srv_libs"
|
||||
|
||||
AC_SUBST(GDBSERVER_DEPFILES)
|
||||
AC_SUBST(GDBSERVER_LIBS)
|
||||
AC_SUBST(USE_THREAD_DB)
|
||||
AC_SUBST(srv_xmlbuiltin)
|
||||
AC_SUBST(srv_xmlfiles)
|
||||
AC_SUBST(srv_xmltarget)
|
||||
|
||||
AC_OUTPUT(Makefile,
|
||||
[case x$CONFIG_HEADERS in
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
# srv_regobj The register protocol appropriate for this target.
|
||||
# srv_tgtobj Any other target-specific modules appropriate
|
||||
# for this target.
|
||||
# srv_xmltarget The XML source file to use for target.xml, if any.
|
||||
# srv_xmlfiles Any other XML files which should be available for
|
||||
# gdbserver in this configuration.
|
||||
#
|
||||
# In addition, on GNU/Linux the following shell variables will be set:
|
||||
# srv_linux_regsets Set to "yes" if ptrace(PTRACE_GETREGS) and friends
|
||||
|
@ -18,10 +21,17 @@
|
|||
# Input is taken from the "${target}" variable.
|
||||
|
||||
case "${target}" in
|
||||
arm*-*-linux*) srv_regobj=reg-arm.o
|
||||
srv_tgtobj="linux-low.o linux-arm-low.o"
|
||||
arm*-*-linux*) srv_tgtobj="linux-low.o linux-arm-low.o"
|
||||
srv_linux_usrregs=yes
|
||||
srv_linux_regsets=yes
|
||||
srv_linux_thread_db=yes
|
||||
if test $gdb_cv_arm_iwmmxt = yes; then
|
||||
srv_regobj=arm-with-iwmmxt.o
|
||||
srv_xmltarget=arm-with-iwmmxt.xml
|
||||
srv_xmlfiles="arm-core.xml xscale-iwmmxt.xml"
|
||||
else
|
||||
srv_regobj=reg-arm.o
|
||||
fi
|
||||
;;
|
||||
crisv32-*-linux*) srv_regobj=reg-crisv32.o
|
||||
srv_tgtobj="linux-low.o linux-crisv32-low.o"
|
||||
|
|
|
@ -30,6 +30,11 @@
|
|||
#define PTRACE_GET_THREAD_AREA 22
|
||||
#endif
|
||||
|
||||
#ifndef PTRACE_GETWMMXREGS
|
||||
# define PTRACE_GETWMMXREGS 18
|
||||
# define PTRACE_SETWMMXREGS 19
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_REG_H
|
||||
#include <sys/reg.h>
|
||||
#endif
|
||||
|
@ -55,6 +60,60 @@ arm_cannot_fetch_register (int regno)
|
|||
return (regno >= arm_num_regs);
|
||||
}
|
||||
|
||||
static void
|
||||
arm_fill_gregset (void *buf)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < arm_num_regs; i++)
|
||||
if (arm_regmap[i] != -1)
|
||||
collect_register (i, ((char *) buf) + arm_regmap[i]);
|
||||
}
|
||||
|
||||
static void
|
||||
arm_store_gregset (const void *buf)
|
||||
{
|
||||
int i;
|
||||
char zerobuf[8];
|
||||
|
||||
memset (zerobuf, 0, 8);
|
||||
for (i = 0; i < arm_num_regs; i++)
|
||||
if (arm_regmap[i] != -1)
|
||||
supply_register (i, ((char *) buf) + arm_regmap[i]);
|
||||
else
|
||||
supply_register (i, zerobuf);
|
||||
}
|
||||
|
||||
#ifdef __IWMMXT__
|
||||
|
||||
static void
|
||||
arm_fill_wmmxregset (void *buf)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
collect_register (arm_num_regs + i, (char *) buf + i * 8);
|
||||
|
||||
/* We only have access to wcssf, wcasf, and wcgr0-wcgr3. */
|
||||
for (i = 0; i < 6; i++)
|
||||
collect_register (arm_num_regs + i + 16, (char *) buf + 16 * 8 + i * 4);
|
||||
}
|
||||
|
||||
static void
|
||||
arm_store_wmmxregset (const void *buf)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
supply_register (arm_num_regs + i, (char *) buf + i * 8);
|
||||
|
||||
/* We only have access to wcssf, wcasf, and wcgr0-wcgr3. */
|
||||
for (i = 0; i < 6; i++)
|
||||
supply_register (arm_num_regs + i + 16, (char *) buf + 16 * 8 + i * 4);
|
||||
}
|
||||
|
||||
#endif /* __IWMMXT__ */
|
||||
|
||||
extern int debug_threads;
|
||||
|
||||
static CORE_ADDR
|
||||
|
@ -130,6 +189,18 @@ ps_get_thread_area (const struct ps_prochandle *ph,
|
|||
return PS_OK;
|
||||
}
|
||||
|
||||
struct regset_info target_regsets[] = {
|
||||
{ PTRACE_GETREGS, PTRACE_SETREGS, 18 * 4,
|
||||
GENERAL_REGS,
|
||||
arm_fill_gregset, arm_store_gregset },
|
||||
#ifdef __IWMMXT__
|
||||
{ PTRACE_GETWMMXREGS, PTRACE_SETWMMXREGS, 16 * 8 + 6 * 4,
|
||||
EXTENDED_REGS,
|
||||
arm_fill_wmmxregset, arm_store_wmmxregset },
|
||||
#endif
|
||||
{ 0, 0, -1, -1, NULL, NULL }
|
||||
};
|
||||
|
||||
struct linux_target_ops the_low_target = {
|
||||
arm_num_regs,
|
||||
arm_regmap,
|
||||
|
|
|
@ -193,11 +193,27 @@ handle_general_set (char *own_buf)
|
|||
}
|
||||
|
||||
static const char *
|
||||
get_features_xml (void)
|
||||
get_features_xml (const char *annex)
|
||||
{
|
||||
static int features_supported = -1;
|
||||
static char *document;
|
||||
|
||||
#ifdef USE_XML
|
||||
extern const char *const xml_builtin[][2];
|
||||
int i;
|
||||
|
||||
/* Look for the annex. */
|
||||
for (i = 0; xml_builtin[i][0] != NULL; i++)
|
||||
if (strcmp (annex, xml_builtin[i][0]) == 0)
|
||||
break;
|
||||
|
||||
if (xml_builtin[i][0] != NULL)
|
||||
return xml_builtin[i][1];
|
||||
#endif
|
||||
|
||||
if (strcmp (annex, "target.xml") != 0)
|
||||
return NULL;
|
||||
|
||||
if (features_supported == -1)
|
||||
{
|
||||
const char *arch = (*the_target->arch_string) ();
|
||||
|
@ -311,17 +327,24 @@ handle_query (char *own_buf, int *new_packet_len_p)
|
|||
const char *document;
|
||||
char *annex;
|
||||
|
||||
document = get_features_xml ();
|
||||
/* Check for support. */
|
||||
document = get_features_xml ("target.xml");
|
||||
if (document == NULL)
|
||||
{
|
||||
own_buf[0] = '\0';
|
||||
return;
|
||||
}
|
||||
|
||||
/* Reject any annex other than target.xml; grab the offset and
|
||||
length. */
|
||||
if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0
|
||||
|| strcmp (annex, "target.xml") != 0)
|
||||
/* Grab the annex, offset, and length. */
|
||||
if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0)
|
||||
{
|
||||
strcpy (own_buf, "E00");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Now grab the correct annex. */
|
||||
document = get_features_xml (annex);
|
||||
if (document == NULL)
|
||||
{
|
||||
strcpy (own_buf, "E00");
|
||||
return;
|
||||
|
@ -352,7 +375,7 @@ handle_query (char *own_buf, int *new_packet_len_p)
|
|||
if (the_target->read_auxv != NULL)
|
||||
strcat (own_buf, ";qXfer:auxv:read+");
|
||||
|
||||
if (get_features_xml () != NULL)
|
||||
if (get_features_xml ("target.xml") != NULL)
|
||||
strcat (own_buf, ";qXfer:features:read+");
|
||||
|
||||
return;
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
# DO NOT EDIT: generated from arm-with-iwmmxt.xml
|
||||
name:arm_with_iwmmxt
|
||||
expedite:r11,sp,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:sp
|
||||
32:lr
|
||||
32:pc
|
||||
0:
|
||||
0:
|
||||
0:
|
||||
0:
|
||||
0:
|
||||
0:
|
||||
0:
|
||||
0:
|
||||
0:
|
||||
32:cpsr
|
||||
64:wr0
|
||||
64:wr1
|
||||
64:wr2
|
||||
64:wr3
|
||||
64:wr4
|
||||
64:wr5
|
||||
64:wr6
|
||||
64:wr7
|
||||
64:wr8
|
||||
64:wr9
|
||||
64:wr10
|
||||
64:wr11
|
||||
64:wr12
|
||||
64:wr13
|
||||
64:wr14
|
||||
64:wr15
|
||||
32:wcssf
|
||||
32:wcasf
|
||||
32:wcgr0
|
||||
32:wcgr1
|
||||
32:wcgr2
|
||||
32:wcgr3
|
|
@ -1,3 +1,7 @@
|
|||
2007-02-08 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* gdb.arch/iwmmxt-regs.c, gdb.arch/iwmmxt-regs.exp: New.
|
||||
|
||||
2007-02-08 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* tdesc-arch.exp (set_arch): Add KFAIL for missing OS ABI handlers.
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
/* Register test program.
|
||||
|
||||
Copyright 2007 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. */
|
||||
|
||||
void
|
||||
read_regs (unsigned long long regs[16], unsigned long control_regs[6])
|
||||
{
|
||||
asm volatile ("wstrd wr0, %0" : "=m" (regs[0]));
|
||||
asm volatile ("wstrd wr1, %0" : "=m" (regs[1]));
|
||||
asm volatile ("wstrd wr2, %0" : "=m" (regs[2]));
|
||||
asm volatile ("wstrd wr3, %0" : "=m" (regs[3]));
|
||||
asm volatile ("wstrd wr4, %0" : "=m" (regs[4]));
|
||||
asm volatile ("wstrd wr5, %0" : "=m" (regs[5]));
|
||||
asm volatile ("wstrd wr6, %0" : "=m" (regs[6]));
|
||||
asm volatile ("wstrd wr7, %0" : "=m" (regs[7]));
|
||||
asm volatile ("wstrd wr8, %0" : "=m" (regs[8]));
|
||||
asm volatile ("wstrd wr9, %0" : "=m" (regs[9]));
|
||||
asm volatile ("wstrd wr10, %0" : "=m" (regs[10]));
|
||||
asm volatile ("wstrd wr11, %0" : "=m" (regs[11]));
|
||||
asm volatile ("wstrd wr12, %0" : "=m" (regs[12]));
|
||||
asm volatile ("wstrd wr13, %0" : "=m" (regs[13]));
|
||||
asm volatile ("wstrd wr14, %0" : "=m" (regs[14]));
|
||||
asm volatile ("wstrd wr15, %0" : "=m" (regs[15]));
|
||||
|
||||
asm volatile ("wstrw wcssf, %0" : "=m" (control_regs[0]));
|
||||
asm volatile ("wstrw wcasf, %0" : "=m" (control_regs[1]));
|
||||
asm volatile ("wstrw wcgr0, %0" : "=m" (control_regs[2]));
|
||||
asm volatile ("wstrw wcgr1, %0" : "=m" (control_regs[3]));
|
||||
asm volatile ("wstrw wcgr2, %0" : "=m" (control_regs[4]));
|
||||
asm volatile ("wstrw wcgr3, %0" : "=m" (control_regs[5]));
|
||||
}
|
||||
|
||||
void
|
||||
write_regs (unsigned long long regs[16], unsigned long control_regs[6])
|
||||
{
|
||||
asm volatile ("wldrd wr0, %0" : : "m" (regs[0]));
|
||||
asm volatile ("wldrd wr1, %0" : : "m" (regs[1]));
|
||||
asm volatile ("wldrd wr2, %0" : : "m" (regs[2]));
|
||||
asm volatile ("wldrd wr3, %0" : : "m" (regs[3]));
|
||||
asm volatile ("wldrd wr4, %0" : : "m" (regs[4]));
|
||||
asm volatile ("wldrd wr5, %0" : : "m" (regs[5]));
|
||||
asm volatile ("wldrd wr6, %0" : : "m" (regs[6]));
|
||||
asm volatile ("wldrd wr7, %0" : : "m" (regs[7]));
|
||||
asm volatile ("wldrd wr8, %0" : : "m" (regs[8]));
|
||||
asm volatile ("wldrd wr9, %0" : : "m" (regs[9]));
|
||||
asm volatile ("wldrd wr10, %0" : : "m" (regs[10]));
|
||||
asm volatile ("wldrd wr11, %0" : : "m" (regs[11]));
|
||||
asm volatile ("wldrd wr12, %0" : : "m" (regs[12]));
|
||||
asm volatile ("wldrd wr13, %0" : : "m" (regs[13]));
|
||||
asm volatile ("wldrd wr14, %0" : : "m" (regs[14]));
|
||||
asm volatile ("wldrd wr15, %0" : : "m" (regs[15]));
|
||||
|
||||
asm volatile ("wldrw wcssf, %0" : : "m" (control_regs[0]));
|
||||
asm volatile ("wldrw wcasf, %0" : : "m" (control_regs[1]));
|
||||
asm volatile ("wldrw wcgr0, %0" : : "m" (control_regs[2]));
|
||||
asm volatile ("wldrw wcgr1, %0" : : "m" (control_regs[3]));
|
||||
asm volatile ("wldrw wcgr2, %0" : : "m" (control_regs[4]));
|
||||
asm volatile ("wldrw wcgr3, %0" : : "m" (control_regs[5]));
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
unsigned long long regs[16];
|
||||
unsigned long control_regs[6];
|
||||
|
||||
read_regs (regs, control_regs);
|
||||
write_regs (regs, control_regs);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
# Copyright 2007 Free Software Foundation, Inc.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
# Tests for ARM iWMMXt register setting and fetching.
|
||||
|
||||
if ![istarget "arm*-*-*"] then {
|
||||
verbose "Skipping iWMMXt register tests."
|
||||
return
|
||||
}
|
||||
|
||||
set testfile "iwmmxt-regs"
|
||||
set binfile ${objdir}/${subdir}/${testfile}
|
||||
set src1 ${srcdir}/${subdir}/${testfile}.c
|
||||
|
||||
# Try to compile the test case. If we can't, assume this is not an
|
||||
# iWMMXt toolchain and bail out.
|
||||
if { [gdb_compile ${src1} ${binfile} executable {quiet debug}] != "" } {
|
||||
verbose "Skipping iWMMXt register tests."
|
||||
return
|
||||
}
|
||||
|
||||
gdb_start
|
||||
gdb_reinitialize_dir $srcdir/$subdir
|
||||
gdb_load ${binfile}
|
||||
|
||||
#
|
||||
# Run to `main' where we begin our tests.
|
||||
#
|
||||
|
||||
if ![runto_main] then {
|
||||
gdb_suppress_tests
|
||||
}
|
||||
|
||||
# Set all the registers to arbitrary values.
|
||||
for {set i 0} {$i < 16} {incr i 1} {
|
||||
gdb_test "set \$wr$i.u64 = ((${i}LL << 32) | ${i})" "" "set reg wr$i"
|
||||
}
|
||||
gdb_test "set \$wcssf = 300" "" "set reg wcssf"
|
||||
gdb_test "set \$wcasf = 200" "" "set reg wcasf"
|
||||
for {set i 0} {$i < 4} {incr i 1} {
|
||||
gdb_test "set \$wcgr$i = 100 + $i" "" "set reg wcgr$i"
|
||||
}
|
||||
|
||||
# See if the sets stuck.
|
||||
gdb_test "next" ".*write_regs.*" "next over read_regs"
|
||||
|
||||
for {set i 0} {$i < 16} {incr i 1} {
|
||||
gdb_test "p \$wr$i.u64 == ((${i}LL << 32) | ${i})" "\\\$$decimal = 1" "test reg wr$i"
|
||||
}
|
||||
# Don't test wcssf.
|
||||
gdb_test "p \$wcasf" "\\\$$decimal = 200" "test reg wcasf"
|
||||
for {set i 0} {$i < 4} {incr i 1} {
|
||||
gdb_test "p \$wcgr$i == 100 + $i" "\\\$$decimal = 1" "test reg wcgr$i"
|
||||
}
|
||||
|
||||
# Also verify the copies read by the target.
|
||||
for {set i 0} {$i < 16} {incr i 1} {
|
||||
gdb_test "p regs\[$i\] == ((${i}LL << 32) | ${i})" "\\\$$decimal = 1" "test stored wr$i"
|
||||
}
|
||||
# Don't test wcssf.
|
||||
gdb_test "p control_regs\[1\]" "\\\$$decimal = 200" "test stored wcasf"
|
||||
for {set i 0} {$i < 4} {incr i 1} {
|
||||
gdb_test "p control_regs\[$i + 2\] == 100 + $i" "\\\$$decimal = 1" "test stored wcgr$i"
|
||||
}
|
Loading…
Reference in New Issue