diff options
author | nobody <> | 2005-11-17 00:00:03 +0000 |
---|---|---|
committer | nobody <> | 2005-11-17 00:00:03 +0000 |
commit | 7153440fc9e8b787288e4b69695436d29ec7090e (patch) | |
tree | e8347e86e0acfd54c6e016e4f79fcac305a32442 | |
parent | afa48399debfcfa568e71e5295416b80b1573c82 (diff) | |
download | gdb-7153440fc9e8b787288e4b69695436d29ec7090e.zip gdb-7153440fc9e8b787288e4b69695436d29ec7090e.tar.gz gdb-7153440fc9e8b787288e4b69695436d29ec7090e.tar.bz2 |
This commit was manufactured by cvs2svn to create branch 'gdb-csl-gxxpro-gdb-csl-gxxpro-6_3-branchpoint
6_3-branch'.
Sprout from gdb_6_4-branch 2005-11-04 02:48:52 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'gdb_6_4-branch'.'
Cherrypick from gdb_6_4-branch 2005-11-01 22:57:24 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'gdb_6_4-branch'.':
gdb/README
Cherrypick from master 2005-11-17 00:00:02 UTC gdbadmin <gdbadmin@sourceware.org> '*** empty log message ***':
ChangeLog
Makefile.def
Makefile.in
Makefile.tpl
bfd/ChangeLog
bfd/archures.c
bfd/bfd-in2.h
bfd/bfdio.c
bfd/cache.c
bfd/config.in
bfd/configure
bfd/configure.host
bfd/configure.in
bfd/cpu-ms1.c
bfd/elf.c
bfd/elf32-ms1.c
bfd/elflink.c
bfd/elfxx-mips.c
bfd/elfxx-mips.h
bfd/libbfd-in.h
bfd/libbfd.h
bfd/opncls.c
bfd/reloc.c
bfd/version.h
bfd/warning.m4
configure
configure.in
cpu/ChangeLog
cpu/ms1.cpu
cpu/ms1.opc
gdb/ChangeLog
gdb/MAINTAINERS
gdb/Makefile.in
gdb/NEWS
gdb/arm-linux-tdep.c
gdb/cli/cli-script.c
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/dwarf2loc.c
gdb/dwarf2read.c
gdb/elfread.c
gdb/event-top.c
gdb/frv-linux-tdep.c
gdb/frv-tdep.c
gdb/gdbserver/ChangeLog
gdb/gdbserver/configure.srv
gdb/gdbserver/linux-arm-low.c
gdb/gdbserver/linux-x86-64-low.c
gdb/hppa-linux-nat.c
gdb/ia64-tdep.c
gdb/infrun.c
gdb/inftarg.c
gdb/interps.h
gdb/linux-nat.c
gdb/m32r-linux-tdep.c
gdb/m32r-tdep.c
gdb/m68hc11-tdep.c
gdb/main.c
gdb/main.h
gdb/monitor.c
gdb/ppc-sysv-tdep.c
gdb/remote-e7000.c
gdb/remote-m32r-sdi.c
gdb/sh-tdep.c
gdb/sh64-tdep.c
gdb/solib-frv.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.arch/gdb1558.c
gdb/testsuite/gdb.asm/asm-source.exp
gdb/testsuite/gdb.asm/m68hc11.inc
gdb/testsuite/gdb.base/break.exp
gdb/testsuite/gdb.base/structs2.exp
gdb/thread.c
gdb/top.c
gdb/tui/tui-command.c
gdb/tui/tui-interp.c
gdb/tui/tui-win.c
gdb/version.in
include/ChangeLog
include/bfdlink.h
include/elf/ChangeLog
include/elf/hppa.h
include/elf/mips.h
include/elf/ms1.h
include/opcode/ChangeLog
include/opcode/mips.h
libiberty/ChangeLog
libiberty/splay-tree.c
opcodes/ChangeLog
opcodes/arm-dis.c
opcodes/configure
opcodes/i386-dis.c
opcodes/iq2000-desc.c
opcodes/iq2000-desc.h
opcodes/iq2000-dis.c
opcodes/iq2000-opc.c
opcodes/m32c-desc.c
opcodes/m68k-dis.c
opcodes/mips-dis.c
opcodes/mips16-opc.c
opcodes/ms1-asm.c
opcodes/ms1-desc.c
opcodes/ms1-desc.h
opcodes/ms1-dis.c
opcodes/ms1-ibld.c
opcodes/ms1-opc.c
opcodes/ms1-opc.h
opcodes/ppc-opc.c
sim/ChangeLog
sim/cris/cris-tmpl.c
sim/sh/ChangeLog
sim/sh/interp.c
Delete:
gdb/config/ms1/ms1.mt
gdb/config/v850/v850.mt
gdb/testsuite/gdb.ada/array_return/p.adb
gdb/testsuite/gdb.ada/array_return/pck.adb
gdb/testsuite/gdb.ada/array_return/pck.ads
gdb/testsuite/gdb.ada/arrayidx/p.adb
112 files changed, 3676 insertions, 2106 deletions
@@ -1,3 +1,11 @@ +2005-11-11 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.def: Remove gdb dependencies for gdbtk. + * Makefile.tpl (CONFIGURE_GDB_TK, INSTALL_GDB_TK): New variables. + (configure-gdb, install-gdb): New rules. + * configure.in: Set CONFIGURE_GDB_TK and INSTALL_GDB_TK. + * Makefile.in, configure: Regenerated. + 2005-10-22 Paolo Bonzini <bonzini@gnu.org> PR bootstrap/24297 diff --git a/Makefile.def b/Makefile.def index 035def5..dc7d612 100644 --- a/Makefile.def +++ b/Makefile.def @@ -275,9 +275,6 @@ dependencies = { module=all-fixincludes; on=all-libiberty; }; dependencies = { module=all-gnattools; on=all-target-libada; }; // Host modules specific to gdb. -dependencies = { module=configure-gdb; on=configure-itcl; }; -dependencies = { module=configure-gdb; on=configure-tcl; }; -dependencies = { module=configure-gdb; on=configure-tk; }; dependencies = { module=configure-gdb; on=configure-sim; }; dependencies = { module=all-gdb; on=all-libiberty; }; dependencies = { module=all-gdb; on=all-opcodes; }; @@ -286,10 +283,6 @@ dependencies = { module=all-gdb; on=all-readline; }; dependencies = { module=all-gdb; on=all-build-bison; }; dependencies = { module=all-gdb; on=all-build-byacc; }; dependencies = { module=all-gdb; on=all-sim; }; -dependencies = { module=install-gdb; on=install-tcl; }; -dependencies = { module=install-gdb; on=install-tk; }; -dependencies = { module=install-gdb; on=install-itcl; }; -dependencies = { module=install-gdb; on=install-libgui; }; dependencies = { module=configure-libgui; on=configure-tcl; }; dependencies = { module=configure-libgui; on=configure-tk; }; diff --git a/Makefile.in b/Makefile.in index 0344ad3..fe0db6c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -36621,9 +36621,6 @@ all-stageprofile-libcpp: maybe-all-stageprofile-intl all-stagefeedback-libcpp: maybe-all-stagefeedback-intl all-fixincludes: maybe-all-libiberty all-gnattools: maybe-all-target-libada -configure-gdb: maybe-configure-itcl -configure-gdb: maybe-configure-tcl -configure-gdb: maybe-configure-tk configure-gdb: maybe-configure-sim all-gdb: maybe-all-libiberty all-gdb: maybe-all-opcodes @@ -36632,10 +36629,6 @@ all-gdb: maybe-all-readline all-gdb: maybe-all-build-bison all-gdb: maybe-all-build-byacc all-gdb: maybe-all-sim -install-gdb: maybe-install-tcl -install-gdb: maybe-install-tk -install-gdb: maybe-install-itcl -install-gdb: maybe-install-libgui configure-libgui: maybe-configure-tcl configure-libgui: maybe-configure-tk all-libgui: maybe-all-tcl @@ -36934,8 +36927,12 @@ all-prebootstrap: maybe-all-libiberty all-prebootstrap: maybe-all-zlib @endif gcc-no-bootstrap +CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@ GDB_TK = @GDB_TK@ +INSTALL_GDB_TK = @INSTALL_GDB_TK@ +configure-gdb: $(CONFIGURE_GDB_TK) all-gdb: $(gdbnlmrequirements) $(GDB_TK) +install-gdb: $(INSTALL_GDB_TK) # Serialization dependencies. Host configures don't work well in parallel to # each other, due to contention over config.cache. Target configures and diff --git a/Makefile.tpl b/Makefile.tpl index 0c3d75e..c99ba5b 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -1756,8 +1756,12 @@ all-prebootstrap: maybe-all-[+module+][+ ENDFOR host_modules +] @endif gcc-no-bootstrap +CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@ GDB_TK = @GDB_TK@ +INSTALL_GDB_TK = @INSTALL_GDB_TK@ +configure-gdb: $(CONFIGURE_GDB_TK) all-gdb: $(gdbnlmrequirements) $(GDB_TK) +install-gdb: $(INSTALL_GDB_TK) # Serialization dependencies. Host configures don't work well in parallel to # each other, due to contention over config.cache. Target configures and diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ff9effd..fdc81a2 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,40 @@ +2005-11-11 Nick Clifton <nickc@redhat.com> + + PR 1150 + * elfxx-mips.c (mips_elf_calculate_relocation): Ignore an + undefined symbol if it is optional. + (_bfd_mips_elf_merge_symbol_attribute): Make sure that the + optional flag is merged as well as the visibility. + * elfxx-mips.h (_bfd_mips_elf_merge_symbol_attribute): Prototype. + (elf_backend_merge_symbol_attribute): Define. + +2005-11-08 Nathan Sidwell <nathan@codesourcery.com> + + Add ms2 support + * archures.c (bfd_mach_ms2): Define. + * cpu-ms1.c (arch_info_struct): Add ms2 stanza. + * elf32-ms1.c (elf32_ms1_machine): Add ms2 case. + (ms1_elf_merge_private_bfd_data): Remove unused variables. Add + correct merging logic, with workaround. + (ms1_elf_print_private_bfd_data): Add ms2 case. + * reloc.c (BFD_RELOC_MS1_PCINSN8): Add ms2 specific reloc. + * libbfd.h: Regenerated. + * bfd-in2.h: Regenerated. + +2005-11-07 Steve Ellcey <sje@cup.hp.com> + + * warning.m4 (AM_BINUTILS_WARNINGS): Default to empty string + if compiler is not GCC. + * configure: Regenerate + +2005-11-07 Steve Ellcey <sje@cup.hp.com> + + * configure: Regenerate after modifying bfd/warning.m4. + +2005-11-07 Steve Ellcey <sje@cup.hp.com> + + * configure.host (ia64-*-hpux*): Set _LARGEFILE64_SOURCE. + 2005-11-03 Daniel Jacobowitz <dan@codesourcery.com> * configure.in: Check for fopen64. @@ -7,6 +44,21 @@ * opncls.c (bfd_fopen, bfd_fill_in_gnu_debuglink_section): Use it. * cache.c (bfd_open_file): Likewise. +2005-11-03 Thiemo Seufer <ths@networkno.de> + + * elfxx-mips.c (mips_elf_calculate_relocation): Handle only + forced local symbols here. + (mips_elf_create_dynamic_relocation): Likewise. + (_bfd_mips_elf_finish_dynamic_symbol): Fix typo in comment. + +2005-11-03 Alan Modra <amodra@bigpond.net.au> + + * elf.c (elf_fake_sections): When calculating tbss size, just use + the last link_order. + (assign_file_positions_for_segments): Likewise. + * elflink.c (bfd_elf_final_link): Likewise. + (elf_reloc_link_order): Correct comment. + 2005-11-02 Alan Modra <amodra@bigpond.net.au> PR ld/1775 diff --git a/bfd/archures.c b/bfd/archures.c index a96771c..561ddfc 100644 --- a/bfd/archures.c +++ b/bfd/archures.c @@ -320,6 +320,7 @@ DESCRIPTION . bfd_arch_ms1, .#define bfd_mach_ms1 1 .#define bfd_mach_mrisc2 2 +.#define bfd_mach_ms2 3 . bfd_arch_pj, . bfd_arch_avr, {* Atmel AVR microcontrollers. *} .#define bfd_mach_avr1 1 diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 7afe437..d857086 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -1908,6 +1908,7 @@ enum bfd_architecture bfd_arch_ms1, #define bfd_mach_ms1 1 #define bfd_mach_mrisc2 2 +#define bfd_mach_ms2 3 bfd_arch_pj, bfd_arch_avr, /* Atmel AVR microcontrollers. */ #define bfd_mach_avr1 1 @@ -3970,6 +3971,9 @@ This is the 5 bits of a value. */ /* Morpho MS1 - Used to tell the linker which vtable entries are used. */ BFD_RELOC_MS1_GNU_VTENTRY, +/* Morpho MS1 - 8 bit immediate relocation. */ + BFD_RELOC_MS1_PCINSN8, + /* msp430 specific relocation codes */ BFD_RELOC_MSP430_10_PCREL, BFD_RELOC_MSP430_16_PCREL, diff --git a/bfd/configure b/bfd/configure index a70caff..57f1e72 100755 --- a/bfd/configure +++ b/bfd/configure @@ -975,7 +975,7 @@ esac else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi - cd "$ac_popdir" + cd $ac_popdir done fi @@ -1999,7 +1999,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2057,7 +2058,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2173,7 +2175,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2227,7 +2230,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2272,7 +2276,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2316,7 +2321,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2394,7 +2400,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2448,7 +2455,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3968,7 +3976,7 @@ test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic" case $host in *-*-irix6*) # Find out which ABI we are using. - echo '#line 3971 "configure"' > conftest.$ac_ext + echo '#line 3979 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -4064,7 +4072,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4276,7 +4285,7 @@ _ACEOF fi -WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" +GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" # Check whether --enable-werror or --disable-werror was given. if test "${enable_werror+set}" = set; then @@ -4297,20 +4306,26 @@ fi NO_WERROR= if test "${ERROR_ON_WARNING}" = yes ; then - WARN_CFLAGS="$WARN_CFLAGS -Werror" + GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Werror" NO_WERROR="-Wno-error" fi +if test "${GCC}" = yes ; then + WARN_CFLAGS="${GCC_WARN_CFLAGS}" +fi + # Check whether --enable-build-warnings or --disable-build-warnings was given. if test "${enable_build_warnings+set}" = set; then enableval="$enable_build_warnings" case "${enableval}" in - yes) ;; - no) WARN_CFLAGS="-w";; + yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; + no) if test "${GCC}" = yes ; then + WARN_CFLAGS="-w" + fi;; ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` - WARN_CFLAGS="${WARN_CFLAGS} ${t}";; + WARN_CFLAGS="${GCC_WARN_CFLAGS} ${t}";; *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` - WARN_CFLAGS="${t} ${WARN_CFLAGS}";; + WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; esac fi; @@ -4787,7 +4802,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4845,7 +4861,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4961,7 +4978,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5015,7 +5033,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5060,7 +5079,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5104,7 +5124,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5514,7 +5535,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5721,7 +5743,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5781,7 +5804,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5860,7 +5884,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5925,7 +5950,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5990,7 +6016,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6054,7 +6081,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6135,7 +6163,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6276,7 +6305,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6414,7 +6444,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6598,7 +6629,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6849,7 +6881,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7043,7 +7076,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7146,7 +7180,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7217,7 +7252,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7314,7 +7350,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7450,7 +7487,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7514,7 +7552,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7569,7 +7608,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7709,7 +7749,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7842,7 +7883,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8119,7 +8161,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8391,7 +8434,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8449,7 +8493,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8511,7 +8556,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8551,7 +8597,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8607,7 +8654,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8647,7 +8695,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8711,7 +8760,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8742,8 +8792,10 @@ See \`config.log' for more details." >&2;} esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF @@ -8857,7 +8909,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8919,7 +8972,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8959,7 +9013,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9015,7 +9070,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9055,7 +9111,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9119,7 +9176,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9150,8 +9208,10 @@ See \`config.log' for more details." >&2;} esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF @@ -9330,7 +9390,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9481,7 +9542,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9629,7 +9691,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9700,7 +9763,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9772,7 +9836,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9826,7 +9891,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9897,7 +9963,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9951,7 +10018,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10015,7 +10083,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10121,7 +10190,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10222,7 +10292,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10287,7 +10358,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10358,7 +10430,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10429,7 +10502,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10500,7 +10574,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10571,7 +10646,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10653,7 +10729,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10724,7 +10801,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10795,7 +10873,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10866,7 +10945,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10937,7 +11017,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11008,7 +11089,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11079,7 +11161,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11150,7 +11233,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11221,7 +11305,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11448,7 +11533,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11568,7 +11654,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11715,7 +11802,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11779,7 +11867,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11843,7 +11932,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11907,7 +11997,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11971,7 +12062,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12035,7 +12127,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12099,7 +12192,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12163,7 +12257,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12227,7 +12322,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12291,7 +12387,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12355,7 +12452,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12419,7 +12517,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12483,7 +12582,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12547,7 +12647,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12611,7 +12712,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12675,7 +12777,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13298,7 +13401,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13363,7 +13467,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13425,7 +13530,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13465,7 +13571,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13521,7 +13628,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13561,7 +13669,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13625,7 +13734,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13656,8 +13766,10 @@ See \`config.log' for more details." >&2;} esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF @@ -13796,7 +13908,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13980,7 +14093,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -14257,7 +14371,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -15238,6 +15353,11 @@ esac *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ @@ -15276,12 +15396,6 @@ echo "$as_me: error: cannot find input file: $f" >&2;} fi;; esac done` || { (exit 1); exit 1; } - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub diff --git a/bfd/configure.host b/bfd/configure.host index 024ed62..adf2cc6 100644 --- a/bfd/configure.host +++ b/bfd/configure.host @@ -29,6 +29,8 @@ hppa*-*-mpeix*) HDEFINES=-DHOST_HPPAMPEIX ;; hppa*-*-bsd*) HDEFINES=-DHOST_HPPABSD ;; hppa*-*-osf*) HDEFINES=-DHOST_HPPAOSF ;; +ia64-*-hpux*) HDEFINES=-D_LARGEFILE64_SOURCE + host64=true;; ia64-*-*) host64=true;; # Workaround for limitations on win9x where file contents are diff --git a/bfd/cpu-ms1.c b/bfd/cpu-ms1.c index 1a0a726..18d75a0 100644 --- a/bfd/cpu-ms1.c +++ b/bfd/cpu-ms1.c @@ -35,8 +35,22 @@ const bfd_arch_info_type arch_info_struct[] = FALSE, /* The default ? */ bfd_default_compatible, /* Architecture comparison fn. */ bfd_default_scan, /* String to architecture convert fn. */ + &arch_info_struct[1] /* Next in list. */ +}, +{ + 32, /* Bits per word - not really true. */ + 32, /* Bits per address. */ + 8, /* Bits per byte. */ + bfd_arch_ms1, /* Architecture. */ + bfd_mach_ms2, /* Machine. */ + "ms1", /* Architecture name. */ + "ms2", /* Printable name. */ + 1, /* Section align power. */ + FALSE, /* The default ? */ + bfd_default_compatible, /* Architecture comparison fn. */ + bfd_default_scan, /* String to architecture convert fn. */ NULL /* Next in list. */ -} +}, }; const bfd_arch_info_type bfd_ms1_arch = @@ -2764,16 +2764,18 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg) if ((asect->flags & SEC_THREAD_LOCAL) != 0) { this_hdr->sh_flags |= SHF_TLS; - if (asect->size == 0 && (asect->flags & SEC_HAS_CONTENTS) == 0) + if (asect->size == 0 + && (asect->flags & SEC_HAS_CONTENTS) == 0) { - struct bfd_link_order *o; + struct bfd_link_order *o = asect->map_tail.link_order; this_hdr->sh_size = 0; - for (o = asect->map_head.link_order; o != NULL; o = o->next) - if (this_hdr->sh_size < o->offset + o->size) + if (o != NULL) + { this_hdr->sh_size = o->offset + o->size; - if (this_hdr->sh_size) - this_hdr->sh_type = SHT_NOBITS; + if (this_hdr->sh_size != 0) + this_hdr->sh_type = SHT_NOBITS; + } } } @@ -4396,14 +4398,9 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info) && sec->size == 0 && (sec->flags & SEC_HAS_CONTENTS) == 0) { - struct bfd_link_order *o; - bfd_vma tbss_size = 0; - - for (o = sec->map_head.link_order; o != NULL; o = o->next) - if (tbss_size < o->offset + o->size) - tbss_size = o->offset + o->size; - - p->p_memsz += tbss_size; + struct bfd_link_order *o = sec->map_tail.link_order; + if (o != NULL) + p->p_memsz += o->offset + o->size; } if (align > p->p_align diff --git a/bfd/elf32-ms1.c b/bfd/elf32-ms1.c index 51841e5..c4ce614 100644 --- a/bfd/elf32-ms1.c +++ b/bfd/elf32-ms1.c @@ -501,6 +501,7 @@ elf32_ms1_machine (bfd *abfd) { case EF_MS1_CPU_MRISC: return bfd_mach_ms1; case EF_MS1_CPU_MRISC2: return bfd_mach_mrisc2; + case EF_MS1_CPU_MS2: return bfd_mach_ms2; } return bfd_mach_ms1; @@ -548,7 +549,6 @@ ms1_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd) { flagword old_flags, new_flags; bfd_boolean error = FALSE; - static bfd * last_ibfd = 0; /* Check if we have the same endianess. */ if (_bfd_generic_verify_endian_match (ibfd, obfd) == FALSE) @@ -569,13 +569,29 @@ ms1_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd) ibfd, old_flags, new_flags, elf_flags_init (obfd) ? "yes" : "no"); #endif - elf_flags_init (obfd) = TRUE; - - if ((new_flags & EF_MS1_CPU_MASK) == EF_MS1_CPU_MRISC2) + if (!elf_flags_init (obfd)) + { + old_flags = new_flags; + elf_flags_init (obfd) = TRUE; + } + else if ((new_flags & EF_MS1_CPU_MASK) != (old_flags & EF_MS1_CPU_MASK)) + { + /* CPU has changed. This is invalid, because MRISC, MRISC2 and + MS2 are not subsets of each other. */ + error = 1; + + /* FIXME:However, until the compiler is multilibbed, preventing + mixing breaks the build. So we allow merging and use the + greater CPU value. This is of course unsafe. */ + error = 0; + if ((new_flags & EF_MS1_CPU_MASK) > (old_flags & EF_MS1_CPU_MASK)) + old_flags = ((old_flags & ~EF_MS1_CPU_MASK) + | (new_flags & EF_MS1_CPU_MASK)); + } + if (!error) { - elf_elfheader (obfd)->e_flags = new_flags; - last_ibfd = ibfd; obfd->arch_info = ibfd->arch_info; + elf_elfheader (obfd)->e_flags = old_flags; } return !error; @@ -598,8 +614,9 @@ ms1_elf_print_private_bfd_data (bfd * abfd, void * ptr) switch (flags & EF_MS1_CPU_MASK) { default: - case EF_MS1_CPU_MRISC: fprintf (file, " ms1-16-002"); break; + case EF_MS1_CPU_MRISC: fprintf (file, " ms1-16-002"); break; case EF_MS1_CPU_MRISC2: fprintf (file, " ms1-16-003"); break; + case EF_MS1_CPU_MS2: fprintf (file, " ms2"); break; } fputc ('\n', file); diff --git a/bfd/elflink.c b/bfd/elflink.c index 899c48d..1fcfce3 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -7394,7 +7394,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) } /* Generate a reloc when linking an ELF file. This is a reloc - requested by the linker, and does come from any input file. This + requested by the linker, and does not come from any input file. This is used to build constructor and destructor tables when linking with -Ur. */ @@ -8129,15 +8129,14 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) sec && (sec->flags & SEC_THREAD_LOCAL); sec = sec->next) { - bfd_vma size = sec->size; + bfd_size_type size = sec->size; - if (size == 0 && (sec->flags & SEC_HAS_CONTENTS) == 0) + if (size == 0 + && (sec->flags & SEC_HAS_CONTENTS) == 0) { - struct bfd_link_order *o; - - for (o = sec->map_head.link_order; o != NULL; o = o->next) - if (size < o->offset + o->size) - size = o->offset + o->size; + struct bfd_link_order *o = sec->map_tail.link_order; + if (o != NULL) + size = o->offset + o->size; } end = sec->vma + size; } diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 685f1d2..d4b90de 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -3792,6 +3792,17 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL); symbol = 0; } + else if (ELF_MIPS_IS_OPTIONAL (h->root.other)) + { + /* This is an optional symbol - an Irix specific extension to the + ELF spec. Ignore it for now. + XXX - FIXME - there is more to the spec for OPTIONAL symbols + than simply ignoring them, but we do not handle this for now. + For information see the "64-bit ELF Object File Specification" + which is available from here: + http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf */ + symbol = 0; + } else { if (! ((*info->callbacks->undefined_symbol) @@ -3918,7 +3929,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, if (h->tls_type == GOT_NORMAL && (! elf_hash_table(info)->dynamic_sections_created || (info->shared - && (info->symbolic || h->root.dynindx == -1) + && (info->symbolic || h->root.forced_local) && h->root.def_regular))) { /* This is a static link or a -Bsymbolic link. The @@ -4483,10 +4494,8 @@ mips_elf_create_dynamic_relocation (bfd *output_bfd, /* We must now calculate the dynamic symbol table index to use in the relocation. */ if (h != NULL - && (! info->symbolic || !h->root.def_regular) - /* h->root.dynindx may be -1 if this symbol was marked to - become local. */ - && h->root.dynindx != -1) + && (!h->root.def_regular + || (info->shared && !info->symbolic && !h->root.forced_local))) { indx = h->root.dynindx; if (SGI_COMPAT (output_bfd)) @@ -7379,7 +7388,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, MIPS_ELF_STUB_SECTION_NAME (dynobj)); BFD_ASSERT (s != NULL); - /* FIXME: Can h->dynindex be more than 64K? */ + /* FIXME: Can h->dynindx be more than 64K? */ if (h->dynindx & 0xffff0000) return FALSE; @@ -8869,8 +8878,7 @@ _bfd_elf_mips_get_relocated_section_contents case bfd_reloc_undefined: if (!((*link_info->callbacks->undefined_symbol) (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr), - input_bfd, input_section, (*parent)->address, - TRUE))) + input_bfd, input_section, (*parent)->address, TRUE))) goto error_return; break; case bfd_reloc_dangerous: @@ -9996,3 +10004,16 @@ const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] = { ".ucode", 6, 0, SHT_MIPS_UCODE, 0 }, { NULL, 0, 0, 0, 0 } }; + +/* Ensure that the STO_OPTIONAL flag is copied into h->other, + even if this is not a defintion of the symbol. */ +void +_bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h, + const Elf_Internal_Sym *isym, + bfd_boolean definition, + bfd_boolean dynamic ATTRIBUTE_UNUSED) +{ + if (! definition + && ELF_MIPS_IS_OPTIONAL (isym->st_other)) + h->other |= STO_OPTIONAL; +} diff --git a/bfd/elfxx-mips.h b/bfd/elfxx-mips.h index d419435..3af342a 100644 --- a/bfd/elfxx-mips.h +++ b/bfd/elfxx-mips.h @@ -127,6 +127,8 @@ extern bfd_boolean _bfd_mips_relax_section (bfd *, asection *, struct bfd_link_info *, bfd_boolean *); extern bfd_vma _bfd_mips_elf_sign_extend (bfd_vma, int); +extern void _bfd_mips_elf_merge_symbol_attribute + (struct elf_link_hash_entry *, const Elf_Internal_Sym *, bfd_boolean, bfd_boolean); extern const struct bfd_elf_special_section _bfd_mips_elf_special_sections []; @@ -134,3 +136,4 @@ extern const struct bfd_elf_special_section _bfd_mips_elf_special_sections []; _bfd_mips_elf_name_local_section_symbols #define elf_backend_special_sections _bfd_mips_elf_special_sections #define elf_backend_eh_frame_address_size _bfd_mips_elf_eh_frame_address_size +#define elf_backend_merge_symbol_attribute _bfd_mips_elf_merge_symbol_attribute diff --git a/bfd/libbfd.h b/bfd/libbfd.h index 1fc5416..e05252c 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -1764,6 +1764,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_MS1_LO16", "BFD_RELOC_MS1_GNU_VTINHERIT", "BFD_RELOC_MS1_GNU_VTENTRY", + "BFD_RELOC_MS1_PCINSN8", "BFD_RELOC_MSP430_10_PCREL", "BFD_RELOC_MSP430_16_PCREL", "BFD_RELOC_MSP430_16", diff --git a/bfd/reloc.c b/bfd/reloc.c index ea73d13..d964f16 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -4424,6 +4424,10 @@ ENUM BFD_RELOC_MS1_GNU_VTENTRY ENUMDOC Morpho MS1 - Used to tell the linker which vtable entries are used. +ENUM + BFD_RELOC_MS1_PCINSN8 +ENUMDOC + Morpho MS1 - 8 bit immediate relocation. ENUM BFD_RELOC_MSP430_10_PCREL diff --git a/bfd/version.h b/bfd/version.h index c9200e1..83fdb53 100644 --- a/bfd/version.h +++ b/bfd/version.h @@ -1,3 +1,3 @@ -#define BFD_VERSION_DATE 20051101 +#define BFD_VERSION_DATE 20051117 #define BFD_VERSION @bfd_version@ #define BFD_VERSION_STRING @bfd_version_string@ diff --git a/bfd/warning.m4 b/bfd/warning.m4 index 38feb5f..2e2dd42 100644 --- a/bfd/warning.m4 +++ b/bfd/warning.m4 @@ -1,7 +1,7 @@ dnl Common configure.in fragment AC_DEFUN([AM_BINUTILS_WARNINGS],[ -WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" +GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" AC_ARG_ENABLE(werror, [ --enable-werror treat compile warnings as errors], @@ -18,19 +18,25 @@ fi NO_WERROR= if test "${ERROR_ON_WARNING}" = yes ; then - WARN_CFLAGS="$WARN_CFLAGS -Werror" + GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Werror" NO_WERROR="-Wno-error" fi +if test "${GCC}" = yes ; then + WARN_CFLAGS="${GCC_WARN_CFLAGS}" +fi + AC_ARG_ENABLE(build-warnings, [ --enable-build-warnings Enable build-time compiler warnings], [case "${enableval}" in - yes) ;; - no) WARN_CFLAGS="-w";; + yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; + no) if test "${GCC}" = yes ; then + WARN_CFLAGS="-w" + fi;; ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` - WARN_CFLAGS="${WARN_CFLAGS} ${t}";; + WARN_CFLAGS="${GCC_WARN_CFLAGS} ${t}";; *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` - WARN_CFLAGS="${t} ${WARN_CFLAGS}";; + WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; esac]) @@ -3133,6 +3133,8 @@ case "$enable_gdbtk" in fi ;; esac +CONFIGURE_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-configure-/g` +INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g` # Strip out unwanted targets. @@ -3494,6 +3496,8 @@ done + + # Build module lists & subconfigure args. @@ -3521,7 +3525,7 @@ test -n "$target_alias" && ncn_target_tool_prefix=$target_alias- # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3525: checking for $ac_word" >&5 +echo "configure:3529: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3552,7 +3556,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3556: checking for $ac_word" >&5 +echo "configure:3560: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3596,7 +3600,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3600: checking for $ac_word" >&5 +echo "configure:3604: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3627,7 +3631,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3631: checking for $ac_word" >&5 +echo "configure:3635: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3671,7 +3675,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3675: checking for $ac_word" >&5 +echo "configure:3679: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3702,7 +3706,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3706: checking for $ac_word" >&5 +echo "configure:3710: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3746,7 +3750,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3750: checking for $ac_word" >&5 +echo "configure:3754: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3777,7 +3781,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3781: checking for $ac_word" >&5 +echo "configure:3785: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3821,7 +3825,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3825: checking for $ac_word" >&5 +echo "configure:3829: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3852,7 +3856,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3856: checking for $ac_word" >&5 +echo "configure:3860: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3896,7 +3900,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3900: checking for $ac_word" >&5 +echo "configure:3904: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3927,7 +3931,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3931: checking for $ac_word" >&5 +echo "configure:3935: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3966,7 +3970,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3970: checking for $ac_word" >&5 +echo "configure:3974: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3997,7 +4001,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4001: checking for $ac_word" >&5 +echo "configure:4005: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4041,7 +4045,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4045: checking for $ac_word" >&5 +echo "configure:4049: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4072,7 +4076,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4076: checking for $ac_word" >&5 +echo "configure:4080: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4116,7 +4120,7 @@ fi # Extract the first word of "${ncn_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4120: checking for $ac_word" >&5 +echo "configure:4124: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4147,7 +4151,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4151: checking for $ac_word" >&5 +echo "configure:4155: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4199,7 +4203,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4203: checking for $ac_word" >&5 +echo "configure:4207: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4230,7 +4234,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4234: checking for $ac_word" >&5 +echo "configure:4238: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4274,7 +4278,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4278: checking for $ac_word" >&5 +echo "configure:4282: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4305,7 +4309,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4309: checking for $ac_word" >&5 +echo "configure:4313: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4349,7 +4353,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4353: checking for $ac_word" >&5 +echo "configure:4357: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4380,7 +4384,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4384: checking for $ac_word" >&5 +echo "configure:4388: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4424,7 +4428,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4428: checking for $ac_word" >&5 +echo "configure:4432: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4455,7 +4459,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4459: checking for $ac_word" >&5 +echo "configure:4463: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4499,7 +4503,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4503: checking for $ac_word" >&5 +echo "configure:4507: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4530,7 +4534,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4534: checking for $ac_word" >&5 +echo "configure:4538: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4574,7 +4578,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4578: checking for $ac_word" >&5 +echo "configure:4582: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4605,7 +4609,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4609: checking for $ac_word" >&5 +echo "configure:4613: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GCC_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4644,7 +4648,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4648: checking for $ac_word" >&5 +echo "configure:4652: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4675,7 +4679,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4679: checking for $ac_word" >&5 +echo "configure:4683: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GCJ_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4719,7 +4723,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4723: checking for $ac_word" >&5 +echo "configure:4727: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4750,7 +4754,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4754: checking for $ac_word" >&5 +echo "configure:4758: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GFORTRAN_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4794,7 +4798,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4798: checking for $ac_word" >&5 +echo "configure:4802: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4825,7 +4829,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4829: checking for $ac_word" >&5 +echo "configure:4833: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4869,7 +4873,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4873: checking for $ac_word" >&5 +echo "configure:4877: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4900,7 +4904,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4904: checking for $ac_word" >&5 +echo "configure:4908: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LIPO_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4944,7 +4948,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4948: checking for $ac_word" >&5 +echo "configure:4952: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4975,7 +4979,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4979: checking for $ac_word" >&5 +echo "configure:4983: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5019,7 +5023,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5023: checking for $ac_word" >&5 +echo "configure:5027: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5050,7 +5054,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5054: checking for $ac_word" >&5 +echo "configure:5058: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5094,7 +5098,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5098: checking for $ac_word" >&5 +echo "configure:5102: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5125,7 +5129,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5129: checking for $ac_word" >&5 +echo "configure:5133: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5164,7 +5168,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5168: checking for $ac_word" >&5 +echo "configure:5172: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5195,7 +5199,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5199: checking for $ac_word" >&5 +echo "configure:5203: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5239,7 +5243,7 @@ fi # Extract the first word of "${ncn_target_tool_prefix}${ncn_progname}", so it can be a program name with args. set dummy ${ncn_target_tool_prefix}${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5243: checking for $ac_word" >&5 +echo "configure:5247: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5270,7 +5274,7 @@ fi # Extract the first word of "${ncn_progname}", so it can be a program name with args. set dummy ${ncn_progname}; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5274: checking for $ac_word" >&5 +echo "configure:5278: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5380,7 +5384,7 @@ RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target} NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target} echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 -echo "configure:5384: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo "configure:5388: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" @@ -5427,7 +5431,7 @@ esac # gcc for stageN-gcc and stagePREV-gcc for stage(N-1). In case this is not # possible, however, we can resort to mv. echo $ac_n "checking if symbolic links between directories work""... $ac_c" 1>&6 -echo "configure:5431: checking if symbolic links between directories work" >&5 +echo "configure:5435: checking if symbolic links between directories work" >&5 if eval "test \"`echo '$''{'gcc_cv_prog_ln_s_dir'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5673,7 +5677,9 @@ s%@BUILD_PREFIX@%$BUILD_PREFIX%g s%@BUILD_PREFIX_1@%$BUILD_PREFIX_1%g s%@tooldir@%$tooldir%g s%@build_tooldir@%$build_tooldir%g +s%@CONFIGURE_GDB_TK@%$CONFIGURE_GDB_TK%g s%@GDB_TK@%$GDB_TK%g +s%@INSTALL_GDB_TK@%$INSTALL_GDB_TK%g s%@build_configargs@%$build_configargs%g s%@build_configdirs@%$build_configdirs%g s%@host_configargs@%$host_configargs%g diff --git a/configure.in b/configure.in index 61c8040..c9169b6 100644 --- a/configure.in +++ b/configure.in @@ -1724,6 +1724,8 @@ case "$enable_gdbtk" in fi ;; esac +CONFIGURE_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-configure-/g` +INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g` # Strip out unwanted targets. @@ -2077,7 +2079,9 @@ AC_SUBST(BUILD_PREFIX) AC_SUBST(BUILD_PREFIX_1) AC_SUBST(tooldir) AC_SUBST(build_tooldir) +AC_SUBST(CONFIGURE_GDB_TK) AC_SUBST(GDB_TK) +AC_SUBST(INSTALL_GDB_TK) # Build module lists & subconfigure args. AC_SUBST(build_configargs) diff --git a/cpu/ChangeLog b/cpu/ChangeLog index 1fc6255..e159430 100644 --- a/cpu/ChangeLog +++ b/cpu/ChangeLog @@ -1,3 +1,25 @@ +2005-11-08 Nathan Sidwell <nathan@codesourcery.com> + + Add ms2 + * ms1.cpu (ms2, ms2bf): New architecture variant, cpu, machine and + model. + (f-uu8, f-uu1, f-imm16l, f-loopo, f-cb1sel, f-cb2sel, f-cb1incr, + f-cb2incr, f-rc3): New fields. + (LOOP): New instruction. + (JAL-HAZARD): New hazard. + (imm16o, loopsize, imm16l, rc3, cb1sel, cb2sel, cb1incr, cb2incr): + New operands. + (mul, muli, dbnz, iflush): Enable for ms2 + (jal, reti): Has JAL-HAZARD. + (ldctxt, ldfb, stfb): Only ms1. + (fbcb): Only ms1,ms1-003. + (wfbinc, mefbinc, wfbincr, mwfbincr, fbcbincs, mfbcbincs, + fbcbincrs, mfbcbincrs): Enable for ms2. + (loop, loopu, dfbc, dwfb, fbwfb, dfbr): New ms2 insns. + * ms1.opc (parse_loopsize): New. + (parse_imm16): hi16/lo16 relocs are applicable to IMM16L. + (print_pcrel): New. + 2005-10-28 Dave Brolley <brolley@redhat.com> Contribute the following change: diff --git a/cpu/ms1.cpu b/cpu/ms1.cpu index f80690c..441a9373 100644 --- a/cpu/ms1.cpu +++ b/cpu/ms1.cpu @@ -32,7 +32,7 @@ (comment "Morpho Technologies mRISC family") (default-alignment aligned) (insn-lsb0? #t) - (machs ms1 ms1-003) + (machs ms1 ms1-003 ms2) (isas ms1) ) @@ -66,6 +66,14 @@ (word-bitsize 32) ) +(define-cpu + ; cpu names must be distinct from the architecture name and machine names. + (name ms2bf) + (comment "Morpho Technologies mRISC family") + (endian big) + (word-bitsize 32) +) + (define-mach (name ms1) (comment "Morpho Technologies mrisc") @@ -80,6 +88,13 @@ (isas ms1) ) +(define-mach + (name ms2) + (comment "Morpho Technologies ms2") + (cpu ms2bf) + (isas ms1) +) + ; Model descriptions. ; Can probably take the u-exec out. We'll see. @@ -109,10 +124,18 @@ ) ) -; Macros to simplify MACH attribute specification. - -(define-pmacro MACHMS1 (MACH ms1)) -(define-pmacro MACHMS1-003 (MACH ms1-003)) +(define-model + (name ms2) + (comment "Morpho Technologies ms2") + (mach ms2) + (unit u-exec "Execution Unit" () + 1 1 ; issue done + () ; state + () ; inputs + () ; outputs + () ; profile action (default) + ) +) ; FIXME: It might simplify things to separate the execute process from the ; one that updates the PC. @@ -140,6 +163,7 @@ ; f-imm16a: 16 bit immediate value when it's a pc-rel offset. ; f-uu4a: unused 4 bit field. ; f-uu4b: second unsed 4 bit field. +; f-uu1: unused 1 bit field ; f-uu12: unused 12 bit field. ; f-uu16: unused 16 bit field. ; f-uu24: unused 24 bit field. @@ -158,7 +182,9 @@ (dnf f-uu4a "unused 4 bit field" () 19 4) (dnf f-uu4b "unused 4 bit field" () 23 4) (dnf f-uu12 "unused 12 bit field" () 11 12) +(dnf f-uu8 "unused 8 bit field" () 15 8) (dnf f-uu16 "unused 16 bit field" () 15 16) +(dnf f-uu1 "unused 1 bit field" () 7 1) ; The following ifields are used exclusively for the MorphoSys instructions. ; In a few cases, a bit field is used for something in addition to what its @@ -214,6 +240,17 @@ (dnf f-rc2 "rc2" () 6 1) (dnf f-ctxdisp "context displacement" () 5 6) +; additional fields in ms2 +(dnf f-imm16l "loop count" () 23 16) +(df f-loopo "loop offset" () 7 8 UINT + ((value pc) (srl SI value 2)) + ((value pc) (add SI (sll value 2) 8)) + ) +(dnf f-cb1sel "cb1 select" () 25 3) +(dnf f-cb2sel "cb2 select" () 22 3) +(dnf f-cb1incr "cb1 increment" (SIGNED) 19 6) +(dnf f-cb2incr "cb2 increment" (SIGNED) 13 6) +(dnf f-rc3 "row/colum context" () 7 1) ; The following is just for a test (dnf f-msysfrsr2 "sr2 for msys" () 19 4) @@ -237,7 +274,7 @@ (ADD ADDU SUB SUBU MUL - - - AND OR XOR NAND NOR XNOR LDUI - LSL LSR ASR - - - - - - BRLT BRLE BREQ JMP JAL BRNEQ DBNZ - + BRLT BRLE BREQ JMP JAL BRNEQ DBNZ LOOP LDW STW - - - - - - - - - - - - - - EI DI SI RETI BREAK IFLUSH - - @@ -257,7 +294,7 @@ ; insn-imm: bit 24. Immediate operand indicator. (define-normal-insn-enum insn-imm "imm enums" () IMM_ f-imm ; This bit specifies whether and immediate operand will be present. - ; It's 1 if ther is, 0 if there is not. + ; It's 1 if there is, 0 if there is not. (NO YES) ) ;;;;;;;;;;;;;;;; @@ -307,6 +344,13 @@ (comment "insn performs an I/O operation") ) +(define-attr + (for insn) + (type boolean) + (name JAL-HAZARD) + (comment "insn has jal-like hazard") +) + (define-pmacro (define-reg-use-attr regfield) (define-attr (for insn) @@ -375,8 +419,8 @@ (type h-sint) (index f-imm16s) (handlers (parse "imm16") (print "dollarhex"))) (define-operand (name imm16z) (comment "immediate value - zero extd") (attrs) (type h-uint) (index f-imm16u) (handlers (parse "imm16") (print "dollarhex"))) -(define-operand (name imm16o) (comment "immediate value") (attrs) - (type h-uint) (index f-imm16s) (handlers (parse "imm16") (print "dollarhex"))) +(define-operand (name imm16o) (comment "immediate value") (attrs PCREL-ADDR) + (type h-uint) (index f-imm16s) (handlers (parse "imm16") (print "pcrel"))) ; Operands for MorphoSys Instructions @@ -490,6 +534,24 @@ (define-operand (name fbincr) (comment "fb incr") (attrs) (type h-uint) (index f-fbincr) (handlers (print "dollarhex"))) +; For the ms2 insns +(define-operand (name loopsize) (comment "immediate value") + (attrs (MACH ms2) PCREL-ADDR) + (type h-uint) (index f-loopo) (handlers (parse "loopsize") (print "pcrel"))) +(define-operand (name imm16l) (comment "immediate value") + (attrs (MACH ms2)) + (type h-uint) (index f-imm16l) (handlers (print "dollarhex"))) +(define-operand (name rc3) (comment "rc3") (attrs (MACH ms2)) + (type h-uint) (index f-rc3) (handlers (parse "rc") (print "dollarhex"))) +(define-operand (name cb1sel) (comment "cb1sel") (attrs (MACH ms2)) + (type h-uint) (index f-cb1sel) (handlers (print "dollarhex"))) +(define-operand (name cb2sel) (comment "cb2sel") (attrs (MACH ms2)) + (type h-uint) (index f-cb2sel) (handlers (print "dollarhex"))) +(define-operand (name cb1incr) (comment "cb1incr") (attrs (MACH ms2)) + (type h-sint) (index f-cb1incr) (handlers (print "dollarhex"))) +(define-operand (name cb2incr) (comment "cb2incr") (attrs (MACH ms2)) + (type h-sint) (index f-cb2incr) (handlers (print "dollarhex"))) + ; Probaby won't need most of these. (define-pmacro r0 (reg h-spr #x0)) (define-pmacro r1 (reg h-spr #x01)) @@ -594,7 +656,7 @@ ) (dni mul "MUL DstReg, SrcReg1, SrcReg2" - (MACHMS1-003 AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2) + ((MACH ms1-003,ms2) AL-INSN USES-FRDRRR USES-FRSR1 USES-FRSR2) "mul $frdrrr,$frsr1,$frsr2" (+ MSYS_NO OPC_MUL IMM_NO frsr1 frsr2 frdrrr (f-uu12 0)) (sequence((HI op1) (HI op2)) @@ -612,7 +674,7 @@ ) (dni muli "MULI DstReg, SrcReg1, UnsImm" - (MACHMS1-003 AL-INSN USES-FRDR USES-FRSR1) + ((MACH ms1-003,ms2) AL-INSN USES-FRDR USES-FRSR1) "muli $frdr,$frsr1,#$imm16" (+ MSYS_NO OPC_MUL IMM_YES frsr1 frdr imm16) (sequence((HI op1) (HI op2)) @@ -851,7 +913,7 @@ ) (dni jal "JAL DstReg, SrcReg1" - (BR-INSN DELAY-SLOT BR-INSN USES-FRDR USES-FRSR1) + (BR-INSN DELAY-SLOT BR-INSN USES-FRDR USES-FRSR1 JAL-HAZARD) "jal $frdrrr,$frsr1" (+ MSYS_NO OPC_JAL IMM_NO frsr1 (f-uu4a 0) frdrrr (f-uu12 0)) (sequence() @@ -867,7 +929,7 @@ ) (dni dbnz "DBNZ SrcReg1, label" - (MACHMS1-003 BR-INSN DELAY-SLOT USES-FRSR1) + ((MACH ms1-003,ms2) BR-INSN DELAY-SLOT USES-FRSR1) "dbnz $frsr1,$imm16o" (+ MSYS_NO OPC_DBNZ IMM_YES frsr1 (f-uu4a 0) imm16o) (sequence() @@ -913,7 +975,7 @@ ) (dni reti "RETI SrcReg1" - (DELAY-SLOT BR-INSN USES-FRSR1) + (DELAY-SLOT BR-INSN USES-FRSR1 JAL-HAZARD) "reti $frsr1" (+ MSYS_NO OPC_RETI IMM_NO frsr1 (f-uu4a 0) (f-uu16 0)) (sequence() @@ -962,7 +1024,7 @@ ; Cache Flush Instruction (dni iflush "IFLUSH" - (MACHMS1-003) + ((MACH ms1-003,ms2)) "iflush" (+ MSYS_NO OPC_IFLUSH (f-imm 0) (f-uu24 0)) (nop) @@ -972,7 +1034,7 @@ ; MorphoSys Instructions (dni ldctxt "LDCTXT SRC1, SRC2, r/c, r/c#, context#" - () + ((MACH ms1)) "ldctxt $frsr1,$frsr2,#$rc,#$rcnum,#$contnum" (+ MSYS_YES MSOPC_LDCTXT (f-uu-2-25 0) frsr1 frsr2 rc rcnum (f-uu-3-11 0) contnum ) @@ -981,7 +1043,7 @@ ) (dni ldfb "LDFB SRC1, byte#" - () + ((MACH ms1)) "ldfb $frsr1,$frsr2,#$imm16z" (+ MSYS_YES MSOPC_LDFB (f-uu-2-25 0) frsr1 frsr2 imm16z) (nop) @@ -989,7 +1051,7 @@ ) (dni stfb "STFB SRC1, SRC2, byte " - () + ((MACH ms1)) "stfb $frsr1,$frsr2,#$imm16z" (+ MSYS_YES MSOPC_STFB (f-uu-2-25 0) frsr1 frsr2 imm16z) (nop) @@ -997,7 +1059,7 @@ ) (dni fbcb "FBCB SRC1, RT/BR1/BR2/CS, B_all, B_r_c, r/c, CB/RB, cell, dup, ctx_disp" - () + ((MACH ms1,ms1-003)) "fbcb $frsr1,#$rbbc,#$ball,#$brc,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp" (+ MSYS_YES MSOPC_FBCB rbbc frsr1 ball brc (f-uu-4-15 0) rc cbrb cell dup ctxdisp) (nop) @@ -1176,7 +1238,7 @@ ;; Issue 66262: The documenatation gives the wrong order for ;; the arguments to the WFBINC instruction. (dni wfbinc "WFBINC type, ccb/rcb, incr, all, c/r, length, rca_row, word, dup, ctxt_disp" - (MACHMS1-003) + ((MACH ms1-003,ms2)) "wfbinc #$rda,#$wr,#$fbincr,#$ball,#$colnum,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp" (+ MSYS_YES MSOPC_WFBINC rda wr fbincr ball colnum length rownum1 rownum2 dup ctxdisp) (nop) @@ -1184,7 +1246,7 @@ ) (dni mwfbinc "MWFBINC mreg, type, ccb/rcb, incr, length, rca_row, word, dup, ctxt_disp" - (MACHMS1-003) + ((MACH ms1-003,ms2)) "mwfbinc $frsr2,#$rda,#$wr,#$fbincr,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp" (+ MSYS_YES MSOPC_MWFBINC rda wr fbincr frsr2 length rownum1 rownum2 dup ctxdisp) (nop) @@ -1192,7 +1254,7 @@ ) (dni wfbincr "WFBINCR ireg, type, ccb/rcb, all, c/r, length, rca_row, word, dup, ctxt_disp" - (MACHMS1-003) + ((MACH ms1-003,ms2)) "wfbincr $frsr1,#$rda,#$wr,#$ball,#$colnum,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp" (+ MSYS_YES MSOPC_WFBINCR rda wr frsr1 ball colnum length rownum1 rownum2 dup ctxdisp) (nop) @@ -1200,7 +1262,7 @@ ) (dni mwfbincr "MWFBINCR ireg, mreg, type, ccb/rcb, length, rca_row, word, dup, ctxt_disp" - (MACHMS1-003) + ((MACH ms1-003,ms2)) "mwfbincr $frsr1,$frsr2,#$rda,#$wr,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp" (+ MSYS_YES MSOPC_MWFBINCR rda wr frsr1 frsr2 length rownum1 rownum2 dup ctxdisp) (nop) @@ -1208,7 +1270,7 @@ ) (dni fbcbincs "FBCBINCS perm, all, c/r, cbs, incr, ccb/rcb, cdb/rdb, word, dup, ctxt_disp" - (MACHMS1-003) + ((MACH ms1-003,ms2)) "fbcbincs #$perm,#$a23,#$cr,#$cbs,#$incr,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp" (+ MSYS_YES MSOPC_FBCBINCS perm a23 cr cbs incr ccb cdb rownum2 dup ctxdisp) (nop) @@ -1216,7 +1278,7 @@ ) (dni mfbcbincs "MFBCBINCS ireg, perm, cbs, incr, ccb/rcb, cdb/rdb, word, dup, ctxt_disp" - (MACHMS1-003) + ((MACH ms1-003,ms2)) "mfbcbincs $frsr1,#$perm,#$cbs,#$incr,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp" (+ MSYS_YES MSOPC_MFBCBINCS perm frsr1 cbs incr ccb cdb rownum2 dup ctxdisp) (nop) @@ -1224,7 +1286,7 @@ ) (dni fbcbincrs "FBCBINCRS ireg, perm, all, c/r, cbs, ccb/rcb, cdb/rdb, word, dup, ctxt_disp" - (MACHMS1-003) + ((MACH ms1-003,ms2)) "fbcbincrs $frsr1,#$perm,#$ball,#$colnum,#$cbx,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp" (+ MSYS_YES MSOPC_FBCBINCRS perm frsr1 ball colnum (f-uu-1-15 0) cbx ccb cdb rownum2 dup ctxdisp) (nop) @@ -1232,9 +1294,58 @@ ) (dni mfbcbincrs "MFBCBINCRS ireg, mreg, perm, cbs, ccb/rcb, cdb/rdb, word, dup, ctxt_disp" - (MACHMS1-003) + ((MACH ms1-003,ms2)) "mfbcbincrs $frsr1,$frsr2,#$perm,#$cbx,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp" (+ MSYS_YES MSOPC_MFBCBINCRS perm frsr1 frsr2 (f-uu-1-15 0) cbx ccb cdb rownum2 dup ctxdisp) (nop) () ) + +; MS2 instructions +(dni loop "LOOP SrcReg1, label" + ((MACH ms2) DELAY-SLOT USES-FRSR1) + "loop $frsr1,$loopsize" + (+ MSYS_NO OPC_LOOP IMM_NO frsr1 (f-uu4a 0) (f-uu8 0) loopsize) + (nop) ;; to be filled in + () +) + +(dni loopi "LOOPI niter, label" + ((MACH ms2) DELAY-SLOT) + "loopi #$imm16l,$loopsize" + (+ MSYS_NO OPC_LOOP IMM_YES imm16l loopsize) + (nop) ;; to be filled in + () +) + +(dni dfbc "dfbc cb1sel,cb2sel,cb1inc,cb2inc,dr/c,cr/c,ctxdisp" + ((MACH ms2)) + "dfbc #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc3,#$rc2,#$ctxdisp" + (+ MSYS_YES MSOPC_LDCTXT cb1sel cb2sel cb1incr cb2incr rc3 rc2 ctxdisp) + (nop) + () +) + +(dni dwfb "dwfb cb1sel,cb2sel,cb1inc,cb2inc,cr/c,ctxdisp" + ((MACH ms2)) + "dwfb #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc2,#$ctxdisp" + (+ MSYS_YES MSOPC_LDFB cb1sel cb2sel cb1incr cb2incr (f-uu1 0) rc2 ctxdisp) + (nop) + () +) + +(dni fbwfb "fbwfb cb1sel,cb2sel,cb1inc,cb2inc,r0/1,cr/c,ctxdisp" + ((MACH ms2)) + "fbwfb #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc3,#$rc2,#$ctxdisp" + (+ MSYS_YES MSOPC_STFB cb1sel cb2sel cb1incr cb2incr rc3 rc2 ctxdisp) + (nop) + () +) + +(dni dfbr "dfbr cb1sel,cb2sel,reg,W/O1,W/O2,mode,cr/c,ctxdisp" + ((MACH ms2) USES-FRSR2) + "dfbr #$cb1sel,#$cb2sel,$frsr2,#$length,#$rownum1,#$rownum2,#$rc2,#$ctxdisp" + (+ MSYS_YES MSOPC_FBCB cb1sel cb2sel frsr2 length rownum1 rownum2 rc2 ctxdisp) + (nop) + () +) diff --git a/cpu/ms1.opc b/cpu/ms1.opc index 3655f14..e3b32db 100644 --- a/cpu/ms1.opc +++ b/cpu/ms1.opc @@ -101,6 +101,31 @@ signed_out_of_bounds (long val) } static const char * +parse_loopsize (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + void *arg) +{ + signed long * valuep = (signed long *) arg; + const char *errmsg; + bfd_reloc_code_real_type code = BFD_RELOC_NONE; + enum cgen_parse_operand_result result_type; + bfd_vma value; + + /* Is it a control transfer instructions? */ + if (opindex == (CGEN_OPERAND_TYPE) MS1_OPERAND_LOOPSIZE) + { + code = BFD_RELOC_MS1_PCINSN8; + errmsg = cgen_parse_address (cd, strp, opindex, code, + & result_type, & value); + *valuep = value; + return errmsg; + } + + abort (); +} + +static const char * parse_imm16 (CGEN_CPU_DESC cd, const char **strp, int opindex, @@ -129,7 +154,9 @@ parse_imm16 (CGEN_CPU_DESC cd, /* If it's not a control transfer instruction, then we have to check for %OP relocating operators. */ - if (strncmp (*strp, "%hi16", 5) == 0) + if (opindex == (CGEN_OPERAND_TYPE) MS1_OPERAND_IMM16L) + ; + else if (strncmp (*strp, "%hi16", 5) == 0) { *strp += 5; code = BFD_RELOC_HI16; @@ -411,6 +438,7 @@ parse_type (CGEN_CPU_DESC cd, /* -- dis.c */ static void print_dollarhex (CGEN_CPU_DESC, PTR, long, unsigned, bfd_vma, int); +static void print_pcrel (CGEN_CPU_DESC, PTR, long, unsigned, bfd_vma, int); static void print_dollarhex (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, @@ -428,6 +456,16 @@ print_dollarhex (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, print_normal (cd, dis_info, value, attrs, pc, length); } +static void +print_pcrel (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, + void * dis_info, + long value, + unsigned int attrs ATTRIBUTE_UNUSED, + bfd_vma pc ATTRIBUTE_UNUSED, + int length ATTRIBUTE_UNUSED) +{ + print_address (cd, dis_info, value + pc, attrs, pc, length); +} /* -- */ diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e8d04ef..5bc4e76 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,19 +1,244 @@ +2005-11-16 Andrew Stubbs <andrew.stubbs@st.com> + + * NEWS (6.4): Mention $argc. + +2005-11-15 Andrew Stubbs <andrew.stubbs@st.com> + + * NEWS: Add --batch-silent, --return-child-result, and --eval-command + options to the 6.4 section. + +2005-11-15 Andrew Stubbs <andrew.stubbs@st.com> + + * cli/cli-script.c: Include gdb_assert.h. + (locate_arg): Detect $argc. + (insert_args): Substitute $argc. + * Makefile.in (cli-script.o): Add dependency on gdb_assert.h. + +2005-11-14 James E Wilson <wilson@specifix.com> + + PR 2024 + * dwarf2loc.c (dwarf_expr_frame_base): Use get_frame_address_in_block + instead of get_frame_pc. + (loclist_read_variable): Likewise. + +2005-11-14 Andrew Stubbs <andrew.stubbs@st.com> + + * MAINTAINERS (Write After Approval): Add myself to the list. + +2005-11-14 Andrew Stubbs <andrew.stubbs@st.com> + + * thread.c (_initialize_thread): Correct the 'thread apply' help + message. + +2005-11-13 Daniel Jacobowitz <dan@codesourcery.com> + + * elfread.c (elf_symtab_read): Remove if (1) and reindent. + +2005-11-13 Daniel Jacobowitz <dan@codesourcery.com> + + * arm-linux-tdep.c (eabi_linux_arm_le_breakpoint) + (eabi_linux_arm_be_breakpoint): New variables. + (arm_linux_init_abi): Use them. + +2005-11-11 Michael Snyder <msnyder@redhat.com> + + * inftarg.c (child_wait): Delete unused local variable. + +2005-11-11 Stephane Carrez <stcarrez@nerim.fr> + + PR tui/1995 + * tui/tui-command.c (tui_dispatch_ctrl_char): Handle CTRL-L even if the + focus is on the command window. + +2005-11-11 Stephane Carrez <stcarrez@nerim.fr> + + * tui/tui-win.c (tui_update_gdb_sizes): Use tui_term_width() and + tui_term_height() to restore the terminal size when leaving the + TUI mode. + +2005-11-11 Stephane Carrez <stcarrez@nerim.fr> + + * m68hc11-tdep.c (m68hc11_pseudo_register_write): Use gdb_byte + for buffers. + (m68hc11_pseudo_register_read): Likewise. + (m68hc11_return_value): Likewise. + (m68hc11_frame_prev_register): Likewise. + (m68hc11_frame_align): Remove as its seems no longer necessary. + (m68hc11_gdbarch_init): Don't install frame_align handler. + (m68hc11_scan_prologue): Fix crash that occurred when called from + m68hc11_skip_prologue + +2005-11-10 Mark Kettenis <kettenis@gnu.org> + + * MAINTAINERS: Mark m68k-elf, sparc-elf and vax-netbsd as no + longer broken. + +2005-11-09 Randolph Chung <tausq@debian.org> + + * hppa-linux-nat.c (_initialize_hppa_linux_nat): Use + hppa_linux_{store,fetch}_inferior_registers instead of + arm_linux_{store,fetch}_inferior_registers. + +2005-11-08 Kei Sakamoto <sakamoto.kei@renesas.com> + + * remote-m32r-sdi.c: Update copyright years. + (m32r_resume): Write DBT at word-aligned addresses. + (m32r_wait): Use SDI_WRITE_MEMORY to remove DBT. + +2005-11-08 Kei Sakamoto <sakamoto.kei@renesas.com> + + * m32r-linux-tdep.c (linux_sigtramp_code): Use 'gdb_byte' instead + of 'unsigned char'. + (m32r_linux_sigtramp_start): Likewise. + (linux_rt_sigtramp_code): Likewise. + (m32r_linux_rt_sigtramp_start): Likewise. + (m32r_linux_sigtramp_frame_prev_register): Use 'gdb_byte *' instead + of 'void *'. + * m32r-tdep.c (m32r_memory_insert_breakpoint): Use 'gdb_byte' + instead of 'char'. + (m32r_memory_remove_breakpoint): Likewise. + (m32r_breakpoint_from_pc): Likewise. + (m32r_store_return_value): Likewise. + (decode_prologue): Likewise. + (m32r_push_dummy_call): Likewise. + (m32r_return_value): Use 'gdb_byte *' instead of 'void *'. + * remote-m32r-sdi.c (m32r_xfer_memory): Use 'gdb_byte' instead of + 'char'. + +2005-11-07 Kevin Buettner <kevinb@redhat.com> + + * ia64-tdep.c (floatformat_valid): Change type of `from' from + `const char *' to `const void *'. + +2005-11-07 Kevin Buettner <kevinb@redhat.com> + + * frv-linux-tdep.c (frv_linux_sigtrapm_frame_prev_register): Change + type of `valuep' argument to `gdb_byte *'. + * frv-tdep.c (frv_pseudo_register_write): Change type of `buffer' + argument to `gdb_byte *'. + (frv_extract_return_value): Change type of `valbuf' argument to + `gdb_byte *'. + (frv_store_return_value): Likewise. + (frv_frame_prev_register): Change type of `bufferp' argument to + `gdb_byte *' + * solib-frv.c (ext_Elf32_Half, ext_Elf32_Addr, ext_Elf32_Word) + (ext_ptr): Change base type from `unsigned char' to `gdb_byte'. Adjust + calls to extract_unsigned_integer which use struct members declared + with these array types to not try to take the address of those + members. + (fetch_loadmap, frv_current_sos): Change cast in target_read_memory() + calls from `char *' to `gdb_byte *'. + (lm_base): Change base type of `buf' from `char' to `gdb_byte'. + (enable_break2): Change type of `buf' from `char *' to `gdb_byte *'. + Change base type of `addr_buf' from `char' to `gdb_byte'. + (find_canonical_descriptor_in_load_object): Change base type of `buf' + from `char' to `gdb_byte'. + +2005-11-07 Paul Gilliam <pgilliam@us.ibm.com + + * ppc-sysv-tdep.c (ppc64_sysv_abi_return_value): Copy code from + ppc_sysv_abi_return_value() to handle a vector return value. + +2005-11-07 Andrew Stubbs <andrew.stubbs@st.com> + + * main.h (return_child_result, return_child_result_value): Declare. + * infrun.c: Include main.h. + (print_stop_reason): Remove declaration of return_child_result_value. + * top.c: Include main.h. + (quit_force): Remove declarations of return_child_result_value and + return_child_result. + * Makefile.in (top.o, infrun.o): Add main.h to dependencies. + +2005-11-07 Andrew Stubbs <andrew.stubbs@st.com> + + * Makefile.in (tui-winsource.o): Add gdb_assert.h to dependencies. + +2005-11-07 Andrew Stubbs <andrew.stubbs@st.com> + + * main.c (captured_main): Define struct cmdarg. Change type of cmdarg. + Add new options --eval-command and alias -ex. + Adjust --command to use the new struct cmdarg. + Execute commands given with --eval-command. + (print_gdb_help): Add new options --eval-command, -ex and mention -x. + +2005-11-07 Andrew Stubbs <andrew.stubbs@st.com> + + * main.c (main): Use INTERP_TUI instead of "tui". + Set interpreter to INTERP_INSIGHT when '-w' given. + * interps.h (INTERP_INSIGHT): New define. + * tui/tui-interp.c (_initialize_tui_interp): Use INTERP_TUI instead + of "tui". + +2005-11-04 Andrew Stubbs <andrew.stubbs@st.com> + + * infrun.c (print_stop_reason): Set return_child_result_value on exit. + * main.c (return_child_result): New variable. + (return_child_result_value): Likewise. + (captured_main): Add option --return-child-result. + Replace call to target_detach and exit (in batch mode) with quit_force. + (print_gdb_help): Add option --return-child-result. + * top.c (quit_force): Return child result if appropriate. + +2005-11-03 Wu Zhou <woodzltc@cn.ibm.com> + + Checked in by Elena Zannoni <ezannoni@redhat.com> + + * dwarf2read.c (read_structure_type): Add IBM XL C++ + specific code to set TYPE_VPTR_FIELDNO and TYPE_VPTR_BASETYPE + of a virtual class if a field named "__vfp" is found. + +2005-11-03 Jim Blandy <jimb@redhat.com> + + Checked in by Elena Zannoni <ezannoni@redhat.com> + + * dwarf2read.c (file_full_name): Cope with file numbers that are + out of range for the given line header. + 2005-11-03 Daniel Jacobowitz <dan@codesourcery.com> + Checked in by Elena Zannoni <ezannoni@redhat.com> + + * elfread.c (elf_symtab_read): Add number_of_symbols and + symbol_table as arguments. Do not load the symbol table + here. + (elf_symfile_read): Load the static and dynamic symbol tables + here, before calling elf_symtab_read. Also load any synthetic + symbols and process those. + +2005-11-03 Andrew Cagney <cagney@gnu.org> + + Checked in by Elena Zannoni <ezannoni@redhat.com> + + * dwarf2loc.c (dwarf2_evaluate_loc_desc): Handle DW_OP_piece + reads. + +2006-11-03 Daniel Jacobowitz <dan@codesourcery.com> + * linux-nat.c (linux_nat_resume): Add more debugging messages. Do not short-circuit resuming all threads if the signal will be ignored in linux_nat_wait. -2005-11-02 Joel Brobecker <brobecker@adacore.com> +2005-11-02 Andrew Stubbs <andrew.stubbs@st.com> - * NEWS: Changes sinces GDB 6.3 are now labled as changes in GDB 6.4. - * README: Update README for GDB 6.4 release by replacing all 6.3 - occurrences with 6.4. + * monitor.c (monitor_xfer_memory): Change char to gdb_byte. + (monitor_insert_breakpoint): Likewise. + (monitor_remove_breakpoint): Likewise. + * remote-e7000.c (e7000_xfer_inferior_memory): Likewise. + * sh-tdep.c (sh_return_value_nofpu): Change void to gdb_byte. + (sh_return_value_fpu): Likewise. + (sh_pseudo_register_read): Likewise. + (sh_pseudo_register_write): Likewise. + (sh_frame_prev_register): Likewise. + * sh64-tdep.c (sh64_extract_return_value): Change char to gdb_byte. + (sh64_return_value): Change void to gdb_byte. + (sh64_pseudo_register_read): Likewise. + (sh64_pseudo_register_write): Likewise. + (sh64_frame_prev_register): Likewise. -2005-11-02 Joel Brobecker <brobecker@adacore.com> +2005-11-01 Joel Brobecker <brobecker@adacore.com> - * version.in: Bump version number to 6.3.90 in preparation for - the 6.4 release. + * event-top.c (gdb_setup_readline): Add missing type in extern + declaration. 2005-11-01 Paul Gilliam <pgilliam@us.ibm.com> @@ -1288,6 +1513,12 @@ 2005-06-27 Michael Snyder <msnyder@redhat.com> + * mn10300-linux-tdep.c: New file. OSABI sniffer at end. + * Makefile.in: Add rule for mn10300-linux-tdep.c. + * config/mn10300/linux.mt: Add mn10300-linux-tdep.c to tdep files. + +2005-06-27 Michael Snyder <msnyder@redhat.com> + * config/mn10300/linux.mt: New file. * configure.tgt: Add rule for am33 / mn10300-linux. * mn10300-tdep.c, mn10300-tdep.h: Bump copyright year. diff --git a/gdb/MAINTAINERS b/gdb/MAINTAINERS index 2fa3e13..9c41797 100644 --- a/gdb/MAINTAINERS +++ b/gdb/MAINTAINERS @@ -120,8 +120,7 @@ the native maintainer when resolving ABI issues. m68hc11 --target=m68hc11-elf ,-Werror , Stephane Carrez stcarrez@nerim.fr - m68k --target=m68k-elf broken - (opcodes/m68k-dis.c:338 longjmp clober) + m68k --target=m68k-elf ,-Werror m88k --target=m88k-openbsd ,-Werror Mark Kettenis kettenis@gnu.org @@ -148,13 +147,11 @@ the native maintainer when resolving ABI issues. sh --target=sh-elf ,-Werror --target=sh64-elf ,-Werror - sparc --target=sparc-elf broken - (bfd/elfxx-sparc:512 bfd_elf64_swap_reloca_out undef) + sparc --target=sparc-elf ,-Werror v850 --target=v850-elf ,-Werror - vax --target=vax-netbsd broken - (opcodes/vax-dis.c:224 longjmp clober) + vax --target=vax-netbsd ,-Werror x86-64 --target=x86_64-linux-gnu ,-Werror @@ -396,6 +393,7 @@ Stephen P. Smith ischis2@cox.net Jackie Smith Cashion jsmith@redhat.com Michael Snyder msnyder@redhat.com Petr Sorfa petrs@caldera.com +Andrew Stubbs andrew.stubbs@st.com Ian Lance Taylor ian@airs.com Gary Thomas gthomas@redhat.com Jason Thorpe thorpej@netbsd.org diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 8d11352..8d8a79e 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -2133,7 +2133,7 @@ infrun.o: infrun.c $(defs_h) $(gdb_string_h) $(symtab_h) $(frame_h) \ $(gdbcore_h) $(gdbcmd_h) $(cli_script_h) $(target_h) $(gdbthread_h) \ $(annotate_h) $(symfile_h) $(top_h) $(inf_loop_h) $(regcache_h) \ $(value_h) $(observer_h) $(language_h) $(solib_h) $(gdb_assert_h) \ - $(mi_common_h) + $(mi_common_h) $(main_h) inftarg.o: inftarg.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) \ $(gdbcore_h) $(command_h) $(gdb_stat_h) $(observer_h) $(gdb_wait_h) \ $(inflow_h) @@ -2689,7 +2689,7 @@ top.o: top.c $(defs_h) $(gdbcmd_h) $(call_cmds_h) $(cli_cmds_h) \ $(annotate_h) $(completer_h) $(top_h) $(version_h) $(serial_h) \ $(doublest_h) $(gdb_assert_h) $(readline_h) $(readline_history_h) \ $(event_top_h) $(gdb_string_h) $(gdb_stat_h) $(ui_out_h) \ - $(cli_out_h) + $(cli_out_h) $(main_h) tracepoint.o: tracepoint.c $(defs_h) $(symtab_h) $(frame_h) $(gdbtypes_h) \ $(expression_h) $(gdbcmd_h) $(value_h) $(target_h) $(language_h) \ $(gdb_string_h) $(inferior_h) $(tracepoint_h) $(remote_h) \ @@ -2807,7 +2807,7 @@ cli-logging.o: $(srcdir)/cli/cli-logging.c $(defs_h) $(gdbcmd_h) $(ui_out_h) \ $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-logging.c cli-script.o: $(srcdir)/cli/cli-script.c $(defs_h) $(value_h) $(language_h) \ $(ui_out_h) $(gdb_string_h) $(exceptions_h) $(top_h) $(cli_cmds_h) \ - $(cli_decode_h) $(cli_script_h) + $(cli_decode_h) $(cli_script_h) $(gdb_assert_h) $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-script.c cli-setshow.o: $(srcdir)/cli/cli-setshow.c $(defs_h) $(readline_tilde_h) \ $(value_h) $(gdb_string_h) $(ui_out_h) $(cli_decode_h) $(cli_cmds_h) \ @@ -3139,7 +3139,7 @@ tui-winsource.o: $(srcdir)/tui/tui-winsource.c $(defs_h) $(symtab_h) \ $(frame_h) $(breakpoint_h) $(value_h) $(source_h) $(tui_h) \ $(tui_data_h) $(tui_stack_h) $(tui_win_h) $(tui_wingeneral_h) \ $(tui_winsource_h) $(tui_source_h) $(tui_disasm_h) $(gdb_string_h) \ - $(gdb_curses_h) + $(gdb_curses_h) $(gdb_assert_h) $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-winsource.c ### end of the gdb Makefile.in. @@ -1,7 +1,7 @@ What has changed in GDB? (Organized release by release) -*** Changes in GDB 6.4 +*** Changes since GDB 6.3 * New native configurations @@ -12,6 +12,16 @@ OpenBSD/mips64 mips64-*-openbsd* Morpho Technologies ms1 ms1-elf +* New command line options + +--batch-silent As for --batch, but totally silent. +--return-child-result The debugger will exist with the same value + the child (debugged) program exited with. +--eval-command COMMAND, -ex COMMAND + Execute a single GDB CLI command. This may be + specified multiple times and in conjunction + with the --command (-x) option. + * Deprecated commands removed The following commands, that were deprecated in 2000, have been @@ -60,6 +70,12 @@ behavior. GDB now supports the not-quite-ieee VAX F and D floating point formats. +* User-defined command support + +In addition to using $arg0..$arg9 for argument passing, it is now possible +to use $argc to determine now many arguments have been passed. See the +section on user-defined commands in the user manual for more information. + *** Changes in GDB 6.3: * New command line option @@ -1,4 +1,4 @@ - README for gdb-6.4 release + README for gdb-6.3 release Updated 8, November, 2004 by Andrew Cagney This is GDB, the GNU source-level debugger. @@ -20,7 +20,7 @@ Unpacking and Installation -- quick overview In this release, the GDB debugger sources, the generic GNU include files, the BFD ("binary file description") library, the readline library, and other libraries all have directories of their own -underneath the gdb-6.4 directory. The idea is that a variety of GNU +underneath the gdb-6.3 directory. The idea is that a variety of GNU tools can share a common copy of these things. Be aware of variation over time--for example don't try to build gdb with a copy of bfd from a release other than the gdb release (such as a binutils release), @@ -29,8 +29,8 @@ Configuration scripts and makefiles exist to cruise up and down this directory tree and automatically build all the pieces in the right order. - When you unpack the gdb-6.4.tar.gz file, you'll find a directory -called `gdb-6.4', which contains: + When you unpack the gdb-6.3.tar.gz file, you'll find a directory +called `gdb-6.3', which contains: COPYING config-ml.in gettext.m4 ltconfig sim COPYING.LIB config.guess include ltmain.sh src-release @@ -43,7 +43,7 @@ called `gdb-6.4', which contains: You can build GDB right in the source directory: - cd gdb-6.4 + cd gdb-6.3 ./configure make cp gdb/gdb /usr/local/bin/gdb (or wherever you want) @@ -57,25 +57,25 @@ You can build GDB in any empty build directory: mkdir build cd build - <full path to your sources>/gdb-6.4/configure + <full path to your sources>/gdb-6.3/configure make cp gdb/gdb /usr/local/bin/gdb (or wherever you want) (Building GDB with DJGPP tools for MS-DOS/MS-Windows is slightly -different; see the file gdb-6.4/gdb/config/djgpp/README for details.) +different; see the file gdb-6.3/gdb/config/djgpp/README for details.) This will configure and build all the libraries as well as GDB. If `configure' can't determine your system type, specify one as its argument, e.g., `./configure sun4' or `./configure decstation'. - Make sure that your 'configure' line ends in 'gdb-6.4/configure': + Make sure that your 'configure' line ends in 'gdb-6.3/configure': - /berman/migchain/source/gdb-6.4/configure # RIGHT - /berman/migchain/source/gdb-6.4/gdb/configure # WRONG + /berman/migchain/source/gdb-6.3/configure # RIGHT + /berman/migchain/source/gdb-6.3/gdb/configure # WRONG The gdb package contains several subdirectories, such as 'gdb', 'bfd', and 'readline'. If your 'configure' line ends in -'gdb-6.4/gdb/configure', then you are configuring only the gdb +'gdb-6.3/gdb/configure', then you are configuring only the gdb subdirectory, not the whole gdb package. This leads to build errors such as: @@ -106,7 +106,7 @@ documentation and TeX (or `texi2roff') to typeset the printed version. GDB includes an already formatted copy of the on-line Info version of this manual in the `gdb/doc' subdirectory. The main Info file is -`gdb-6.4/gdb/doc/gdb.info', and it refers to subordinate files +`gdb-6.3/gdb/doc/gdb.info', and it refers to subordinate files matching `gdb.info*' in the same directory. If necessary, you can print out these files, or read them with any editor; but they are easier to read using the `info' subsystem in GNU Emacs or the @@ -118,7 +118,7 @@ Info formatting programs, such as `texinfo-format-buffer' or `makeinfo'. If you have `makeinfo' installed, and are in the top level GDB -source directory (`gdb-6.4', in the case of version 6.4), you can make +source directory (`gdb-6.3', in the case of version 6.3), you can make the Info file by typing: cd gdb/doc @@ -127,7 +127,7 @@ the Info file by typing: If you want to typeset and print copies of this manual, you need TeX, a program to print its DVI output files, and `texinfo.tex', the Texinfo definitions file. This file is included in the GDB -distribution, in the directory `gdb-6.4/texinfo'. +distribution, in the directory `gdb-6.3/texinfo'. TeX is a typesetting program; it does not print files directly, but produces output files called DVI files. To print a typeset document, @@ -141,11 +141,11 @@ without any extension or a `.dvi' extension. This file tells TeX how to typeset a document written in Texinfo format. On its own, TeX cannot read, much less typeset a Texinfo file. `texinfo.tex' is distributed with GDB and is located in the -`gdb-6.4/texinfo' directory. +`gdb-6.3/texinfo' directory. If you have TeX and a DVI printer program installed, you can typeset and print this manual. First switch to the the `gdb' subdirectory of -the main source directory (for example, to `gdb-6.4/gdb') and then type: +the main source directory (for example, to `gdb-6.3/gdb') and then type: make doc/gdb.dvi @@ -168,43 +168,43 @@ preparing GDB for installation; you can then use `make' to build the a single directory, whose name is usually composed by appending the version number to `gdb'. - For example, the GDB version 6.4 distribution is in the `gdb-6.4' + For example, the GDB version 6.3 distribution is in the `gdb-6.3' directory. That directory contains: -`gdb-6.4/{COPYING,COPYING.LIB}' +`gdb-6.3/{COPYING,COPYING.LIB}' Standard GNU license files. Please read them. -`gdb-6.4/bfd' +`gdb-6.3/bfd' source for the Binary File Descriptor library -`gdb-6.4/config*' +`gdb-6.3/config*' script for configuring GDB, along with other support files -`gdb-6.4/gdb' +`gdb-6.3/gdb' the source specific to GDB itself -`gdb-6.4/include' +`gdb-6.3/include' GNU include files -`gdb-6.4/libiberty' +`gdb-6.3/libiberty' source for the `-liberty' free software library -`gdb-6.4/opcodes' +`gdb-6.3/opcodes' source for the library of opcode tables and disassemblers -`gdb-6.4/readline' +`gdb-6.3/readline' source for the GNU command-line interface NOTE: The readline library is compiled for use by GDB, but will not be installed on your system when "make install" is issued. -`gdb-6.4/sim' +`gdb-6.3/sim' source for some simulators (ARM, D10V, SPARC, M32R, MIPS, PPC, V850, etc) -`gdb-6.4/texinfo' +`gdb-6.3/texinfo' The `texinfo.tex' file, which you need in order to make a printed manual using TeX. -`gdb-6.4/etc' +`gdb-6.3/etc' Coding standards, useful files for editing GDB, and other miscellanea. @@ -214,14 +214,14 @@ MS-DOS/MS-Windows are in the file gdb/config/djgpp/README. The simplest way to configure and build GDB is to run `configure' from the `gdb-VERSION-NUMBER' source directory, which in this example -is the `gdb-6.4' directory. +is the `gdb-6.3' directory. First switch to the `gdb-VERSION-NUMBER' source directory if you are not already in it; then run `configure'. For example: - cd gdb-6.4 + cd gdb-6.3 ./configure make @@ -237,8 +237,8 @@ you may need to run `sh' on it explicitly: sh configure If you run `configure' from a directory that contains source -directories for multiple libraries or programs, such as the `gdb-6.4' -source directory for version 6.4, `configure' creates configuration +directories for multiple libraries or programs, such as the `gdb-6.3' +source directory for version 6.3, `configure' creates configuration files for every directory level underneath (unless you tell it not to, with the `--norecursion' option). @@ -246,10 +246,10 @@ with the `--norecursion' option). directories in the GDB distribution, if you only want to configure that subdirectory; but be sure to specify a path to it. - For example, with version 6.4, type the following to configure only + For example, with version 6.3, type the following to configure only the `bfd' subdirectory: - cd gdb-6.4/bfd + cd gdb-6.3/bfd ../configure You can install `gdb' anywhere; it has no hardwired paths. However, @@ -278,13 +278,13 @@ directory. If the path to `configure' would be the same as the argument to `--srcdir', you can leave out the `--srcdir' option; it will be assumed.) - For example, with version 6.4, you can build GDB in a separate + For example, with version 6.3, you can build GDB in a separate directory for a Sun 4 like this: - cd gdb-6.4 + cd gdb-6.3 mkdir ../gdb-sun4 cd ../gdb-sun4 - ../gdb-6.4/configure + ../gdb-6.3/configure make When `configure' builds a configuration using a remote source @@ -305,8 +305,8 @@ called `configure' (or one of its subdirectories). The `Makefile' that `configure' generates in each source directory also runs recursively. If you type `make' in a source directory such -as `gdb-6.4' (or in a separate configured directory configured with -`--srcdir=PATH/gdb-6.4'), you will build all the required libraries, +as `gdb-6.3' (or in a separate configured directory configured with +`--srcdir=PATH/gdb-6.3'), you will build all the required libraries, and then build GDB. When you have multiple hosts or targets configured in separate @@ -349,7 +349,7 @@ you can use it to test your guesses on abbreviations--for example: Invalid configuration `i786v': machine `i786v' not recognized `config.sub' is also distributed in the GDB source directory -(`gdb-6.4', for version 6.4). +(`gdb-6.3', for version 6.3). `configure' options @@ -479,7 +479,7 @@ As an alternative, the bug report can be submitted, via e-mail, to the address "bug-gdb@gnu.org". When submitting a bug, please include the GDB version number (e.g., -gdb-6.4), and how you configured it (e.g., "sun4" or "mach386 host, +gdb-6.3), and how you configured it (e.g., "sun4" or "mach386 host, i586-intel-synopsys target"). Since GDB now supports so many different configurations, it is important that you be precise about this. If at all possible, you should include the actual banner that @@ -534,17 +534,17 @@ ftp://sources.redhat.com/pub/dejagnu/ will contain a recent snapshot. Once DejaGNU is installed, you can run the tests in one of the following ways: - (1) cd gdb-6.4 + (1) cd gdb-6.3 make check-gdb or - (2) cd gdb-6.4/gdb + (2) cd gdb-6.3/gdb make check or - (3) cd gdb-6.4/gdb/testsuite + (3) cd gdb-6.3/gdb/testsuite make site.exp (builds the site specific file) runtest -tool gdb GDB=../gdb (or GDB=<somepath> as appropriate) diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c index e6ce06f..98786f6 100644 --- a/gdb/arm-linux-tdep.c +++ b/gdb/arm-linux-tdep.c @@ -45,6 +45,19 @@ static const char arm_linux_arm_le_breakpoint[] = { 0x01, 0x00, 0x9f, 0xef }; static const char arm_linux_arm_be_breakpoint[] = { 0xef, 0x9f, 0x00, 0x01 }; +/* However, the EABI syscall interface (new in Nov. 2005) does not look at + the operand of the swi if old-ABI compatibility is disabled. Therefore, + use an undefined instruction instead. This is supported as of kernel + version 2.5.70 (May 2003), so should be a safe assumption for EABI + binaries. */ + +static const char eabi_linux_arm_le_breakpoint[] = { 0xf0, 0x01, 0xf0, 0xe7 }; + +static const char eabi_linux_arm_be_breakpoint[] = { 0xe7, 0xf0, 0x01, 0xf0 }; + +/* All the kernels which support Thumb support using a specific undefined + instruction for the Thumb breakpoint. */ + static const char arm_linux_thumb_be_breakpoint[] = {0xde, 0x01}; static const char arm_linux_thumb_le_breakpoint[] = {0x01, 0xde}; @@ -329,12 +342,18 @@ arm_linux_init_abi (struct gdbarch_info info, tdep->lowest_pc = 0x8000; if (info.byte_order == BFD_ENDIAN_BIG) { - tdep->arm_breakpoint = arm_linux_arm_be_breakpoint; + if (tdep->arm_abi == ARM_ABI_AAPCS) + tdep->arm_breakpoint = eabi_linux_arm_be_breakpoint; + else + tdep->arm_breakpoint = arm_linux_arm_be_breakpoint; tdep->thumb_breakpoint = arm_linux_thumb_be_breakpoint; } else { - tdep->arm_breakpoint = arm_linux_arm_le_breakpoint; + if (tdep->arm_abi == ARM_ABI_AAPCS) + tdep->arm_breakpoint = eabi_linux_arm_le_breakpoint; + else + tdep->arm_breakpoint = arm_linux_arm_le_breakpoint; tdep->thumb_breakpoint = arm_linux_thumb_le_breakpoint; } tdep->arm_breakpoint_size = sizeof (arm_linux_arm_le_breakpoint); diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c index a4da9c5..1a91d2d 100644 --- a/gdb/cli/cli-script.c +++ b/gdb/cli/cli-script.c @@ -33,6 +33,7 @@ #include "cli/cli-cmds.h" #include "cli/cli-decode.h" #include "cli/cli-script.h" +#include "gdb_assert.h" /* Prototypes for local functions */ @@ -572,7 +573,8 @@ locate_arg (char *p) { while ((p = strchr (p, '$'))) { - if (strncmp (p, "$arg", 4) == 0 && isdigit (p[4])) + if (strncmp (p, "$arg", 4) == 0 + && (isdigit (p[4]) || p[4] == 'c')) return p; p++; } @@ -596,12 +598,20 @@ insert_args (char *line) len += p - line; i = p[4] - '0'; - if (i >= user_args->count) + if (p[4] == 'c') + { + /* $argc. Number will be <=10. */ + len += user_args->count == 10 ? 2 : 1; + } + else if (i >= user_args->count) { error (_("Missing argument %d in user function."), i); return NULL; } - len += user_args->a[i].len; + else + { + len += user_args->a[i].len; + } line = p + 5; } @@ -625,13 +635,27 @@ insert_args (char *line) memcpy (new_line, line, p - line); new_line += p - line; - i = p[4] - '0'; - len = user_args->a[i].len; - if (len) + if (p[4] == 'c') + { + gdb_assert (user_args->count >= 0 && user_args->count <= 10); + if (user_args->count == 10) + { + *(new_line++) = '1'; + *(new_line++) = '0'; + } + else + *(new_line++) = user_args->count + '0'; + } + else { - memcpy (new_line, user_args->a[i].arg, len); - new_line += len; + i = p[4] - '0'; + len = user_args->a[i].len; + if (len) + { + memcpy (new_line, user_args->a[i].arg, len); + new_line += len; + } } line = p + 5; } diff --git a/gdb/config/ms1/ms1.mt b/gdb/config/ms1/ms1.mt deleted file mode 100644 index 18ce1ab..0000000 --- a/gdb/config/ms1/ms1.mt +++ /dev/null @@ -1,2 +0,0 @@ -# Target: Morpho Technologies ms1 processor -TDEPFILES= ms1-tdep.o diff --git a/gdb/config/v850/v850.mt b/gdb/config/v850/v850.mt deleted file mode 100644 index 701a240..0000000 --- a/gdb/config/v850/v850.mt +++ /dev/null @@ -1,4 +0,0 @@ -# Target: NEC V850 processor -TDEPFILES= v850-tdep.o -SIM_OBS = remote-sim.o -SIM = ../sim/v850/libsim.a diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index f62c312..d8a9cef 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,61 @@ +2005-11-16 Jim Blandy <jimb@redhat.com> + + * gdb.texinfo (Packets, Stop Reply Packets) + (General Query Packets): Various formatting cleanups. + - Use @samp for packet contents. + - Drop summaries from packet @item lines; the same information appears + immediately below in the description. + - Delete paragraph breaks after packet @item commands, so that the + description appears directly to the right of the packet prototype + in the printed manual, if it fits. + - Place spaces in packet prototypes between @vars and non-@var + letters, and explain that they're just for formatting. + - Use @dots{} instead of '...'. + - Fix uses of @code where @var was needed. + - Replace "deprecated" markers with English text spelling out the + packet's status and the preferred alternatives. + - Remove "(reserved)" markers on 'A' and 'I' packets; it's unclear + what this ever meant. + - Remove "(draft)" markers on 'i' packets; nobody has commented on + this for a long time. + - Remove "(draft)" markers on 'z' and 'Z' packets; these have been + implemented several times, and have been in use for years. + +2005-11-15 Jim Blandy <jimb@redhat.com> + + * gdb.texinfo (Packets): Add index entries for 'm' packet + disclaimers. + + * gdb.texinfo (Packets): Clarify lack of restrictions on behavior + of stub when processing an 'm' packet. + + * gdb.texinfo (Packets): Mention that packets beginning with + letters are reserved once, at the top, instead of actually listing + them all and saying "reserved". + +2005-11-15 Andrew Stubbs <andrew.stubbs@st.com> + + * gdb.texinfo (User-defined commands): Add $argc. Add missing 'end'. + Change @var{$arg0 to @code{$arg0. + +2005-11-14 Wu Zhou <woodzltc@cn.ibm.com> + + * gdb.texinfo (Fortran): Add some words about Fortran debugging. + +2005-11-12 Jim Blandy <jimb@redhat.com> + + * gdb.texinfo (General Query Packets): Put packets in alphabetical + order. Remove extraneous 'z'. + +2005-11-07 Andrew Stubbs <andrew.stubbs@st.com> + + * gdb.texinfo (Choosing files): Add --eval-command. + +2005-11-04 Andrew Stubbs <andrew.stubbs@st.com> + + * gdb.texinfo (Choosing modes): Add --return-child-result. + + 2005-11-01 Andrew Stubbs <andrew.stubbs@st.com> * gdb.texinfo (Choosing modes): Add --batch-silent. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 75ae4ef..e26341b 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -932,6 +932,20 @@ file named @var{number}. Execute @value{GDBN} commands from file @var{file}. @xref{Command Files,, Command files}. +@item -eval-command @var{command} +@itemx -ex @var{command} +@cindex @code{--eval-command} +@cindex @code{-ex} +Execute a single @value{GDBN} command. + +This option may be used multiple times to call multiple commands. It may +also be interleaved with @samp{-command} as required. + +@smallexample +@value{GDBP} -ex 'target sim' -ex 'load' \ + -x setbreakpoints -ex 'run' a.out +@end smallexample + @item -directory @var{directory} @itemx -d @var{directory} @cindex @code{--directory} @@ -1007,6 +1021,27 @@ messages, for example. Note that targets that give their output via @value{GDBN}, as opposed to writing directly to @code{stdout}, will also be made silent. +@item -return-child-result +@cindex @code{--return-child-result} +The return code from @value{GDBN} will be the return code from the child +process (the process being debugged), with the following exceptions: + +@itemize @bullet +@item +@value{GDBN} exits abnormally. E.g., due to an incorrect argument or an +internal error. In this case the exit code is the same as it would have been +without @samp{-return-child-result}. +@item +The user quits with an explicit value. E.g., @samp{quit 1}. +@item +The child process never runs, or is not allowed to terminate, in which case +the exit code will be -1. +@end itemize + +This option is useful in conjunction with @samp{-batch} or @samp{-batch-silent}, +when @value{GDBN} is being used as a remote program loader or simulator +interface. + @item -nowindows @itemx -nw @cindex @code{--nowindows} @@ -9089,6 +9124,59 @@ function, @code{_NSPrintForDebugger}, defined. @subsection Fortran @cindex Fortran-specific support in @value{GDBN} +@value{GDBN} can be used to debug programs written in Fortran, but it +currently supports only the features of Fortran 77 language. + +@cindex trailing underscore, in Fortran symbols +Some Fortran compilers (@sc{gnu} Fortran 77 and Fortran 95 compilers +among them) append an underscore to the names of variables and +functions. When you debug programs compiled by those compilers, you +will need to refer to variables and functions with a trailing +underscore. + +@menu +* Fortran Operators:: Fortran operators and expressions +* Fortran Defaults:: Default settings for Fortran +* Special Fortran commands:: Special @value{GDBN} commands for Fortran +@end menu + +@node Fortran Operators +@subsubsection Fortran operators and expressions + +@cindex Fortran operators and expressions + +Operators must be defined on values of specific types. For instance, +@code{+} is defined on numbers, but not on characters or other non- +arithmetic types. Operators are often defined on groups of types. + +@table @code +@item ** +The exponentiation operator. It raises the first operand to the power +of the second one. + +@item : +The range operator. Normally used in the form of array(low:high) to +represent a section of array. +@end table + +@node Fortran Defaults +@subsubsection Fortran Defaults + +@cindex Fortran Defaults + +Fortran symbols are usually case-insensitive, so @value{GDBN} by +default uses case-insensitive matches for Fortran symbols. You can +change that with the @samp{set case-insensitive} command, see +@ref{Symbols}, for the details. + +@node Special Fortran commands +@subsubsection Special Fortran commands + +@cindex Special Fortran commands + +@value{GDBN} had some commands to support Fortran specific feature, +such as common block displaying. + @table @code @cindex @code{COMMON} blocks, Fortran @kindex info common @@ -9099,11 +9187,6 @@ all @code{COMMON} blocks visible at current program location are printed. @end table -Fortran symbols are usually case-insensitive, so @value{GDBN} by -default uses case-insensitive matches for Fortran symbols. You can -change that with the @samp{set case-insensitive} command, see -@ref{Symbols}, for the details. - @node Pascal @subsection Pascal @@ -15625,11 +15708,12 @@ A @dfn{user-defined command} is a sequence of @value{GDBN} commands to which you assign a new name as a command. This is done with the @code{define} command. User commands may accept up to 10 arguments separated by whitespace. Arguments are accessed within the user command -via @var{$arg0@dots{}$arg9}. A trivial example: +via @code{$arg0@dots{}$arg9}. A trivial example: @smallexample define adder print $arg0 + $arg1 + $arg2 +end @end smallexample @noindent @@ -15645,6 +15729,20 @@ its three arguments. Note the arguments are text substitutions, so they may reference variables, use complex expressions, or even perform inferior functions calls. +In addition, @code{$argc} may be used to find out how many arguments have +been passed. This expands to a number in the range 0@dots{}10. + +@smallexample +define adder + if $argc == 2 + print $arg0 + $arg1 + end + if $argc == 3 + print $arg0 + $arg1 + $arg2 + end +end +@end smallexample + @table @code @kindex define @@ -22030,11 +22128,26 @@ The following table provides a complete list of all currently defined @xref{File-I/O remote protocol extension}, for details about the File I/O extension of the remote protocol. -@table @r +Each packet's description has a template showing the packet's overall +syntax, followed by an explanation of the packet's meaning. We +include spaces in some of the templates for clarity; these are not +part of the packet's syntax. No @value{GDBN} packet uses spaces to +separate its components. For example, a template like @samp{foo +@var{bar} @var{baz}} describes a packet beginning with the three ASCII +bytes @samp{foo}, followed by a @var{bar}, followed directly by a +@var{baz}. GDB does not transmit a space character between the +@samp{foo} and the @var{bar}, or between the @var{bar} and the +@var{baz}. -@item @code{!} --- extended mode -@cindex @code{!} packet +Note that all packet forms beginning with an upper- or lower-case +letter, other than those described here, are reserved for future use. +Here are the packet descriptions. + +@table @samp + +@item ! +@cindex @samp{!} packet Enable extended mode. In extended mode, the remote server is made persistent. The @samp{R} packet is used to restart the program being debugged. @@ -22045,35 +22158,31 @@ Reply: The remote target both supports and has enabled extended mode. @end table -@item @code{?} --- last signal -@cindex @code{?} packet - +@item ? +@cindex @samp{?} packet Indicate the reason the target halted. The reply is the same as for step and continue. Reply: @xref{Stop Reply Packets}, for the reply specifications. -@item @code{a} --- reserved - -Reserved for future use. - -@item @code{A}@var{arglen}@code{,}@var{argnum}@code{,}@var{arg}@code{,@dots{}} --- set program arguments @strong{(reserved)} -@cindex @code{A} packet - -Initialized @samp{argv[]} array passed into program. @var{arglen} -specifies the number of bytes in the hex encoded byte stream @var{arg}. -See @code{gdbserver} for more details. +@item A @var{arglen},@var{argnum},@var{arg},@dots{} +@cindex @samp{A} packet +Initialized @code{argv[]} array passed into program. @var{arglen} +specifies the number of bytes in the hex encoded byte stream +@var{arg}. See @code{gdbserver} for more details. Reply: @table @samp @item OK -@item E@var{NN} +The arguments were set. +@item E @var{NN} +An error occurred. @end table -@item @code{b}@var{baud} --- set baud @strong{(deprecated)} -@cindex @code{b} packet - +@item b @var{baud} +@cindex @samp{b} packet +(Don't use this packet; its behavior is not well-defined.) Change the serial line speed to @var{baud}. JTC: @emph{When does the transport layer state change? When it's @@ -22086,41 +22195,39 @@ some kind of out-of-band message to a specially-setup stub and have the switch happen "in between" packets, so that from remote protocol's point of view, nothing actually happened.} -@item @code{B}@var{addr},@var{mode} --- set breakpoint @strong{(deprecated)} -@cindex @code{B} packet - +@item B @var{addr},@var{mode} +@cindex @samp{B} packet Set (@var{mode} is @samp{S}) or clear (@var{mode} is @samp{C}) a breakpoint at @var{addr}. -This packet has been replaced by the @samp{Z} and @samp{z} packets +Don't use this packet. Use the @samp{Z} and @samp{z} packets instead (@pxref{insert breakpoint or watchpoint packet}). -@item @code{c}@var{addr} --- continue -@cindex @code{c} packet - -@var{addr} is address to resume. If @var{addr} is omitted, resume at -current address. +@item c @var{addr} +@cindex @samp{c} packet +Continue. @var{addr} is address to resume. If @var{addr} is omitted, +resume at current address. Reply: @xref{Stop Reply Packets}, for the reply specifications. -@item @code{C}@var{sig}@code{;}@var{addr} --- continue with signal -@cindex @code{C} packet - +@item C @var{sig};@var{addr} +@cindex @samp{C} packet Continue with signal @var{sig} (hex signal number). If -@code{;}@var{addr} is omitted, resume at same address. +@samp{;@var{addr}} is omitted, resume at same address. Reply: @xref{Stop Reply Packets}, for the reply specifications. -@item @code{d} --- toggle debug @strong{(deprecated)} -@cindex @code{d} packet - +@item d +@cindex @samp{d} packet Toggle debug flag. -@item @code{D} --- detach -@cindex @code{D} packet +Don't use this packet; instead, define a general set packet +(@pxref{General Query Packets}). +@item D +@cindex @samp{D} packet Detach @value{GDBN} from the remote system. Sent to the remote target before @value{GDBN} disconnects via the @code{detach} command. @@ -22128,33 +22235,19 @@ Reply: @table @samp @item OK for success -@item E@var{NN} +@item E @var{NN} for an error @end table -@item @code{e} --- reserved - -Reserved for future use. - -@item @code{E} --- reserved - -Reserved for future use. - -@item @code{f} --- reserved - -Reserved for future use. +@item F @var{RC},@var{EE},@var{CF};@var{XX} +@cindex @samp{F} packet +A reply from @value{GDBN} to an @samp{F} packet sent by the target. +This is part of the File-I/O protocol extension. @xref{File-I/O +remote protocol extension}, for the specification. -@item @code{F}@var{RC}@code{,}@var{EE}@code{,}@var{CF}@code{;}@var{XX} --- Reply to target's F packet. -@cindex @code{F} packet - -This packet is send by @value{GDBN} as reply to a @code{F} request packet -sent by the target. This is part of the File-I/O protocol extension. -@xref{File-I/O remote protocol extension}, for the specification. - -@item @code{g} --- read registers +@item g @anchor{read registers packet} -@cindex @code{g} packet - +@cindex @samp{g} packet Read general registers. Reply: @@ -22162,46 +22255,40 @@ Reply: @item @var{XX@dots{}} Each byte of register data is described by two hex digits. The bytes with the register are transmitted in target byte order. The size of -each register and their position within the @samp{g} @var{packet} are +each register and their position within the @samp{g} packet are determined by the @value{GDBN} internal macros -@var{DEPRECATED_REGISTER_RAW_SIZE} and @var{REGISTER_NAME} macros. The -specification of several standard @code{g} packets is specified below. -@item E@var{NN} +@code{DEPRECATED_REGISTER_RAW_SIZE} and @code{REGISTER_NAME} macros. The +specification of several standard @samp{g} packets is specified below. +@item E @var{NN} for an error. @end table -@item @code{G}@var{XX@dots{}} --- write regs -@cindex @code{G} packet - -@xref{read registers packet}, for a description of the @var{XX@dots{}} -data. +@item G @var{XX@dots{}} +@cindex @samp{G} packet +Write general registers. @xref{read registers packet}, for a +description of the @var{XX@dots{}} data. Reply: @table @samp @item OK for success -@item E@var{NN} +@item E @var{NN} for an error @end table -@item @code{h} --- reserved - -Reserved for future use. - -@item @code{H}@var{c}@var{t@dots{}} --- set thread -@cindex @code{H} packet - +@item H @var{c} @var{t} +@cindex @samp{H} packet Set thread for subsequent operations (@samp{m}, @samp{M}, @samp{g}, @samp{G}, et.al.). @var{c} depends on the operation to be performed: it should be @samp{c} for step and continue operations, @samp{g} for other -operations. The thread designator @var{t@dots{}} may be -1, meaning all -the threads, a thread number, or zero which means pick any thread. +operations. The thread designator @var{t} may be @samp{-1}, meaning all +the threads, a thread number, or @samp{0} which means pick any thread. Reply: @table @samp @item OK for success -@item E@var{NN} +@item E @var{NN} for an error @end table @@ -22220,98 +22307,68 @@ for an error @c selected, sets the registers of the register block of @c that thread; otherwise sets current registers. -@item @code{i}@var{addr}@code{,}@var{nnn} --- cycle step @strong{(draft)} +@item i @r{[}@var{addr}@r{[},@var{nnn}@r{]]} @anchor{cycle step packet} -@cindex @code{i} packet - -Step the remote target by a single clock cycle. If @code{,}@var{nnn} is +@cindex @samp{i} packet +Step the remote target by a single clock cycle. If @samp{,@var{nnn}} is present, cycle step @var{nnn} cycles. If @var{addr} is present, cycle step starting at that address. -@item @code{I} --- signal then cycle step @strong{(reserved)} -@cindex @code{I} packet +@item I +@cindex @samp{I} packet +Signal, then cycle step. @xref{step with signal packet}. @xref{cycle +step packet}. -@xref{step with signal packet}. @xref{cycle step packet}. - -@item @code{j} --- reserved - -Reserved for future use. - -@item @code{J} --- reserved - -Reserved for future use. - -@item @code{k} --- kill request -@cindex @code{k} packet +@item k +@cindex @samp{k} packet +Kill request. FIXME: @emph{There is no description of how to operate when a specific thread context has been selected (i.e.@: does 'k' kill only that thread?)}. -@item @code{K} --- reserved - -Reserved for future use. - -@item @code{l} --- reserved - -Reserved for future use. - -@item @code{L} --- reserved - -Reserved for future use. - -@item @code{m}@var{addr}@code{,}@var{length} --- read memory -@cindex @code{m} packet - +@item m @var{addr},@var{length} +@cindex @samp{m} packet Read @var{length} bytes of memory starting at address @var{addr}. -Neither @value{GDBN} nor the stub assume that sized memory transfers are -assumed using word aligned accesses. FIXME: @emph{A word aligned memory -transfer mechanism is needed.} +Note that @var{addr} may not be aligned to any particular boundary. + +The stub need not use any particular size or alignment when gathering +data from memory for the response; even if @var{addr} is word-aligned +and @var{length} is a multiple of the word size, the stub is free to +use byte accesses, or not. For this reason, this packet may not be +suitable for accessing memory-mapped I/O devices. +@cindex alignment of remote memory accesses +@cindex size of remote memory accesses +@cindex memory, alignment and size of remote accesses Reply: @table @samp @item @var{XX@dots{}} -@var{XX@dots{}} is mem contents. Can be fewer bytes than requested if able -to read only part of the data. Neither @value{GDBN} nor the stub assume -that sized memory transfers are assumed using word aligned -accesses. FIXME: @emph{A word aligned memory transfer mechanism is -needed.} -@item E@var{NN} +Memory contents; each byte is transmitted as a two-digit hexidecimal +number. The reply may contain fewer bytes than requested if the +server was able to read only part of the region of memory. +@item E @var{NN} @var{NN} is errno @end table -@item @code{M}@var{addr},@var{length}@code{:}@var{XX@dots{}} --- write mem -@cindex @code{M} packet - +@item M @var{addr},@var{length}:@var{XX@dots{}} +@cindex @samp{M} packet Write @var{length} bytes of memory starting at address @var{addr}. -@var{XX@dots{}} is the data. +@var{XX@dots{}} is the data; each byte is transmitted as a two-digit +hexidecimal number. Reply: @table @samp @item OK for success -@item E@var{NN} +@item E @var{NN} for an error (this includes the case where only part of the data was written). @end table -@item @code{n} --- reserved - -Reserved for future use. - -@item @code{N} --- reserved - -Reserved for future use. - -@item @code{o} --- reserved - -Reserved for future use. - -@item @code{O} --- reserved - -@item @code{p}@var{hex number of register} --- read register packet -@cindex @code{p} packet - +@item p @var{n} +@cindex @samp{p} packet +Read the value of register @var{n}; @var{n} is in hex. @xref{read registers packet}, for a description of how the returned register value is encoded. @@ -22319,210 +22376,168 @@ Reply: @table @samp @item @var{XX@dots{}} the register's value -@item E@var{NN} +@item E @var{NN} for an error @item Indicating an unrecognized @var{query}. @end table -@item @code{P}@var{n@dots{}}@code{=}@var{r@dots{}} --- write register +@item P @var{n@dots{}}=@var{r@dots{}} @anchor{write register packet} -@cindex @code{P} packet - -Write register @var{n@dots{}} with value @var{r@dots{}}, which contains two hex +@cindex @samp{P} packet +Write register @var{n@dots{}} with value @var{r@dots{}}. The register +number @var{n} is in hexidecimal, and @var{r@dots{}} contains two hex digits for each byte in the register (target byte order). Reply: @table @samp @item OK for success -@item E@var{NN} +@item E @var{NN} for an error @end table -@item @code{q}@var{query} --- general query +@item q @var{query} @anchor{general query packet} -@cindex @code{q} packet - -Request info about @var{query}. In general @value{GDBN} queries have a -leading upper case letter. Custom vendor queries should use a company -prefix (in lower case) ex: @samp{qfsf.var}. @var{query} may optionally -be followed by a @samp{,} or @samp{;} separated list. Stubs must ensure -that they match the full @var{query} name. +@cindex @samp{q} packet +General query. Request info about @var{query}. In general +@value{GDBN} queries have a leading upper case letter. Custom vendor +queries should use a company prefix (in lower case) ex: +@samp{qfsf.var}. @var{query} may optionally be followed by a @samp{,} +or @samp{;} separated list. Stubs must ensure that they match the +full @var{query} name. Reply: @table @samp @item @var{XX@dots{}} -Hex encoded data from query. The reply can not be empty. -@item E@var{NN} +Hex encoded data from query. The reply must not be empty. +@item E @var{NN} error reply @item Indicating an unrecognized @var{query}. @end table -@item @code{Q}@var{var}@code{=}@var{val} --- general set -@cindex @code{Q} packet - -Set value of @var{var} to @var{val}. - +@item Q @var{var}=@var{val} +@cindex @samp{Q} packet +General set. Set value of @var{var} to @var{val}. @xref{general query packet}, for a discussion of naming conventions. -@item @code{r} --- reset @strong{(deprecated)} -@cindex @code{r} packet - +@item r +@cindex @samp{r} packet Reset the entire system. -@item @code{R}@var{XX} --- remote restart -@cindex @code{R} packet +Don't use this packet; use the @samp{R} packet instead. +@item R @var{XX} +@cindex @samp{R} packet Restart the program being debugged. @var{XX}, while needed, is ignored. This packet is only available in extended mode. -Reply: -@table @samp -@item @emph{no reply} The @samp{R} packet has no reply. -@end table - -@item @code{s}@var{addr} --- step -@cindex @code{s} packet -@var{addr} is address to resume. If @var{addr} is omitted, resume at -same address. +@item s @var{addr} +@cindex @samp{s} packet +Single step. @var{addr} is the address at which to resume. If +@var{addr} is omitted, resume at same address. Reply: @xref{Stop Reply Packets}, for the reply specifications. -@item @code{S}@var{sig}@code{;}@var{addr} --- step with signal +@item S @var{sig};@var{addr} @anchor{step with signal packet} -@cindex @code{S} packet - -Like @samp{C} but step not continue. +@cindex @samp{S} packet +Step with signal. This is analogous to the @samp{C} packet, but +requests a single-step, rather than a normal resumption of execution. Reply: @xref{Stop Reply Packets}, for the reply specifications. -@item @code{t}@var{addr}@code{:}@var{PP}@code{,}@var{MM} --- search -@cindex @code{t} packet - +@item t @var{addr}:@var{PP},@var{MM} +@cindex @samp{t} packet Search backwards starting at address @var{addr} for a match with pattern @var{PP} and mask @var{MM}. @var{PP} and @var{MM} are 4 bytes. @var{addr} must be at least 3 digits. -@item @code{T}@var{XX} --- thread alive -@cindex @code{T} packet - +@item T @var{XX} +@cindex @samp{T} packet Find out if the thread XX is alive. Reply: @table @samp @item OK thread is still alive -@item E@var{NN} +@item E @var{NN} thread is dead @end table -@item @code{u} --- reserved - -Reserved for future use. - -@item @code{U} --- reserved - -Reserved for future use. - -@item @code{v} --- verbose packet prefix - -Packets starting with @code{v} are identified by a multi-letter name, -up to the first @code{;} or @code{?} (or the end of the packet). - -@item @code{vCont}[;@var{action}[@code{:}@var{tid}]]... --- extended resume -@cindex @code{vCont} packet +@item v +Packets starting with @samp{v} are identified by a multi-letter name, +up to the first @samp{;} or @samp{?} (or the end of the packet). -Resume the inferior. Different actions may be specified for each thread. +@item vCont@r{[};@var{action}@r{[}:@var{tid}@r{]]}@dots{} +@cindex @samp{vCont} packet +Resume the inferior, specifying different actions for each thread. If an action is specified with no @var{tid}, then it is applied to any threads that don't have a specific action specified; if no default action is specified then other threads should remain stopped. Specifying multiple default actions is an error; specifying no actions is also an error. Thread IDs are specified in hexadecimal. Currently supported actions are: -@table @code +@table @samp @item c Continue. -@item C@var{sig} +@item C @var{sig} Continue with signal @var{sig}. @var{sig} should be two hex digits. @item s Step. -@item S@var{sig} +@item S @var{sig} Step with signal @var{sig}. @var{sig} should be two hex digits. @end table The optional @var{addr} argument normally associated with these packets is -not supported in @code{vCont}. +not supported in @samp{vCont}. Reply: @xref{Stop Reply Packets}, for the reply specifications. -@item @code{vCont?} --- extended resume query -@cindex @code{vCont?} packet - -Query support for the @code{vCont} packet. +@item vCont? +@cindex @samp{vCont?} packet +Request a list of actions supporetd by the @samp{vCont} packet. Reply: @table @samp -@item @code{vCont}[;@var{action}]... -The @code{vCont} packet is supported. Each @var{action} is a supported -command in the @code{vCont} packet. +@item vCont@r{[};@var{action}@dots{}@r{]} +The @samp{vCont} packet is supported. Each @var{action} is a supported +command in the @samp{vCont} packet. @item -The @code{vCont} packet is not supported. +The @samp{vCont} packet is not supported. @end table -@item @code{V} --- reserved - -Reserved for future use. - -@item @code{w} --- reserved - -Reserved for future use. - -@item @code{W} --- reserved - -Reserved for future use. - -@item @code{x} --- reserved - -Reserved for future use. - -@item @code{X}@var{addr}@code{,}@var{length}@var{:}@var{XX@dots{}} --- write mem (binary) -@cindex @code{X} packet - -@var{addr} is address, @var{length} is number of bytes, @var{XX@dots{}} -is binary data. The characters @code{$}, @code{#}, and @code{0x7d} are -escaped using @code{0x7d}, and then XORed with @code{0x20}. -For example, @code{0x7d} would be transmitted as @code{0x7d 0x5d}. +@item X @var{addr},@var{length}:@var{XX@dots{}} +@cindex @samp{X} packet +Write data to memory, where the data is transmitted in binary. +@var{addr} is address, @var{length} is number of bytes, +@samp{@var{XX}@dots{}} is binary data. The bytes @code{0x23} +(@sc{ascii} @samp{#}), @code{0x24} (@sc{ascii} @samp{$}), and +@code{0x7d} (@sc{ascii} @samp{@}}) are escaped using @code{0x7d} +(@sc{ascii} @samp{@}}), and then XORed with @code{0x20}. For example, +the byte @code{0x7d} would be transmitted as the two bytes @code{0x7d +0x5d}. Reply: @table @samp @item OK for success -@item E@var{NN} +@item E @var{NN} for an error @end table -@item @code{y} --- reserved - -Reserved for future use. - -@item @code{Y} reserved - -Reserved for future use. - -@item @code{z}@var{type}@code{,}@var{addr}@code{,}@var{length} --- remove breakpoint or watchpoint @strong{(draft)} -@itemx @code{Z}@var{type}@code{,}@var{addr}@code{,}@var{length} --- insert breakpoint or watchpoint @strong{(draft)} +@item z @var{type},@var{addr},@var{length} +@itemx Z @var{type},@var{addr},@var{length} @anchor{insert breakpoint or watchpoint packet} -@cindex @code{z} packet -@cindex @code{Z} packets - -Insert (@code{Z}) or remove (@code{z}) a @var{type} breakpoint or +@cindex @samp{z} packet +@cindex @samp{Z} packets +Insert (@samp{Z}) or remove (@samp{z}) a @var{type} breakpoint or watchpoint starting at address @var{address} and covering the next @var{length} bytes. @@ -22532,21 +22547,20 @@ separately. @emph{Implementation notes: A remote target shall return an empty string for an unrecognized breakpoint or watchpoint packet @var{type}. A remote target shall support either both or neither of a given -@code{Z}@var{type}@dots{} and @code{z}@var{type}@dots{} packet pair. To +@samp{Z@var{type}@dots{}} and @samp{z@var{type}@dots{}} packet pair. To avoid potential problems with duplicate packets, the operations should be implemented in an idempotent way.} -@item @code{z}@code{0}@code{,}@var{addr}@code{,}@var{length} --- remove memory breakpoint @strong{(draft)} -@item @code{Z}@code{0}@code{,}@var{addr}@code{,}@var{length} --- insert memory breakpoint @strong{(draft)} -@cindex @code{z0} packet -@cindex @code{Z0} packet - -Insert (@code{Z0}) or remove (@code{z0}) a memory breakpoint at address -@code{addr} of size @code{length}. +@item z0,@var{addr},@var{length} +@itemx Z0,@var{addr},@var{length} +@cindex @samp{z0} packet +@cindex @samp{Z0} packet +Insert (@samp{Z0}) or remove (@samp{z0}) a memory breakpoint at address +@var{addr} of size @var{length}. A memory breakpoint is implemented by replacing the instruction at @var{addr} with a software breakpoint or trap instruction. The -@code{length} is used by targets that indicates the size of the +@var{length} is used by targets that indicates the size of the breakpoint (in bytes) that should be inserted (e.g., the @sc{arm} and @sc{mips} can insert either a 2 or 4 byte breakpoint). @@ -22561,17 +22575,16 @@ Reply: success @item not supported -@item E@var{NN} +@item E @var{NN} for an error @end table -@item @code{z}@code{1}@code{,}@var{addr}@code{,}@var{length} --- remove hardware breakpoint @strong{(draft)} -@item @code{Z}@code{1}@code{,}@var{addr}@code{,}@var{length} --- insert hardware breakpoint @strong{(draft)} -@cindex @code{z1} packet -@cindex @code{Z1} packet - -Insert (@code{Z1}) or remove (@code{z1}) a hardware breakpoint at -address @code{addr} of size @code{length}. +@item z1,@var{addr},@var{length} +@itemx Z1,@var{addr},@var{length} +@cindex @samp{z1} packet +@cindex @samp{Z1} packet +Insert (@samp{Z1}) or remove (@samp{z1}) a hardware breakpoint at +address @var{addr} of size @var{length}. A hardware breakpoint is implemented using a mechanism that is not dependant on being able to modify the target's memory. @@ -22585,16 +22598,15 @@ Reply: success @item not supported -@item E@var{NN} +@item E @var{NN} for an error @end table -@item @code{z}@code{2}@code{,}@var{addr}@code{,}@var{length} --- remove write watchpoint @strong{(draft)} -@item @code{Z}@code{2}@code{,}@var{addr}@code{,}@var{length} --- insert write watchpoint @strong{(draft)} -@cindex @code{z2} packet -@cindex @code{Z2} packet - -Insert (@code{Z2}) or remove (@code{z2}) a write watchpoint. +@item z2,@var{addr},@var{length} +@itemx Z2,@var{addr},@var{length} +@cindex @samp{z2} packet +@cindex @samp{Z2} packet +Insert (@samp{Z2}) or remove (@samp{z2}) a write watchpoint. Reply: @table @samp @@ -22602,16 +22614,15 @@ Reply: success @item not supported -@item E@var{NN} +@item E @var{NN} for an error @end table -@item @code{z}@code{3}@code{,}@var{addr}@code{,}@var{length} --- remove read watchpoint @strong{(draft)} -@item @code{Z}@code{3}@code{,}@var{addr}@code{,}@var{length} --- insert read watchpoint @strong{(draft)} -@cindex @code{z3} packet -@cindex @code{Z3} packet - -Insert (@code{Z3}) or remove (@code{z3}) a read watchpoint. +@item z3,@var{addr},@var{length} +@itemx Z3,@var{addr},@var{length} +@cindex @samp{z3} packet +@cindex @samp{Z3} packet +Insert (@samp{Z3}) or remove (@samp{z3}) a read watchpoint. Reply: @table @samp @@ -22619,16 +22630,15 @@ Reply: success @item not supported -@item E@var{NN} +@item E @var{NN} for an error @end table -@item @code{z}@code{4}@code{,}@var{addr}@code{,}@var{length} --- remove access watchpoint @strong{(draft)} -@item @code{Z}@code{4}@code{,}@var{addr}@code{,}@var{length} --- insert access watchpoint @strong{(draft)} -@cindex @code{z4} packet -@cindex @code{Z4} packet - -Insert (@code{Z4}) or remove (@code{z4}) an access watchpoint. +@item z4,@var{addr},@var{length} +@itemx Z4,@var{addr},@var{length} +@cindex @samp{z4} packet +@cindex @samp{Z4} packet +Insert (@samp{Z4}) or remove (@samp{z4}) an access watchpoint. Reply: @table @samp @@ -22636,7 +22646,7 @@ Reply: success @item not supported -@item E@var{NN} +@item E @var{NN} for an error @end table @@ -22649,60 +22659,75 @@ for an error The @samp{C}, @samp{c}, @samp{S}, @samp{s} and @samp{?} packets can receive any of the below as a reply. In the case of the @samp{C}, @samp{c}, @samp{S} and @samp{s} packets, that reply is only returned -when the target halts. In the below the exact meaning of @samp{signal -number} is poorly defined. In general one of the UNIX signal numbering -conventions is used. - -@table @samp +when the target halts. In the below the exact meaning of @dfn{signal +number} is poorly defined. In general one of the UNIX signal +numbering conventions is used. -@item S@var{AA} -@var{AA} is the signal number +As in the description of request packets, we include spaces in the +reply templates for clarity; these are not part of the reply packet's +syntax. No @value{GDBN} stop reply packet uses spaces to separate its +components. -@item @code{T}@var{AA}@var{n...}@code{:}@var{r...}@code{;}@var{n...}@code{:}@var{r...}@code{;}@var{n...}@code{:}@var{r...}@code{;} -@cindex @code{T} packet reply +@table @samp -@var{AA} = two hex digit signal number; @var{n...} = register number -(hex), @var{r...} = target byte ordered register contents, size defined -by @code{DEPRECATED_REGISTER_RAW_SIZE}; @var{n...} = @samp{thread}, -@var{r...} = thread process ID, this is a hex integer; @var{n...} = -(@samp{watch} | @samp{rwatch} | @samp{awatch}, @var{r...} = data -address, this is a hex integer; @var{n...} = other string not starting -with valid hex digit. @value{GDBN} should ignore this @var{n...}, -@var{r...} pair and go on to the next. This way we can extend the -protocol. +@item S @var{AA} +The program received signal number @var{AA} (a two-digit hexidecimal +number). -@item W@var{AA} +@item T @var{AA} @var{n1}:@var{r1};@var{n2}:@var{r2};@dots{} +@cindex @samp{T} packet reply +The program received signal number @var{AA} (a two-digit hexidecimal +number). Single-step and breakpoint traps are reported this way. The +@samp{@var{n}:@var{r}} pairs give the values of important registers or +other information: +@enumerate +@item +If @var{n} is a hexidecimal number, it is a register number, and the +corresponding @var{r} gives that register's value. @var{r} is a +series of bytes in target byte order, with each byte given by a +two-digit hex number. +@item +If @var{n} is @samp{thread}, then @var{r} is the thread process ID, in +hex. +@item +If @var{n} is @samp{watch}, @samp{rwatch}, or @samp{awatch}, then the +packet indicates a watchpoint hit, and @var{r} is the data address, in +hex. +@item +Otherwise, @value{GDBN} should ignore this @samp{@var{n}:@var{r}} pair +and go on to the next; this allows us to extend the protocol in the +future. +@end enumerate +@item W @var{AA} The process exited, and @var{AA} is the exit status. This is only applicable to certain targets. -@item X@var{AA} - +@item X @var{AA} The process terminated with signal @var{AA}. -@item O@var{XX@dots{}} - -@var{XX@dots{}} is hex encoding of @sc{ascii} data. This can happen at -any time while the program is running and the debugger should continue -to wait for @samp{W}, @samp{T}, etc. - -@item F@var{call-id}@code{,}@var{parameter@dots{}} +@item O @var{XX}@dots{} +@samp{@var{XX}@dots{}} is hex encoding of @sc{ascii} data, to be +written as the program's console output. This can happen at any time +while the program is running and the debugger should continue to wait +for @samp{W}, @samp{T}, etc. +@item F @var{call-id},@var{parameter}@dots{} @var{call-id} is the identifier which says which host system call should be called. This is just the name of the function. Translation into the correct system call is only applicable as it's defined in @value{GDBN}. @xref{File-I/O remote protocol extension}, for a list of implemented system calls. -@var{parameter@dots{}} is a list of parameters as defined for this very -system call. +@samp{@var{parameter}@dots{}} is a list of parameters as defined for +this very system call. -The target replies with this packet when it expects @value{GDBN} to call -a host system call on behalf of the target. @value{GDBN} replies with -an appropriate @code{F} packet and keeps up waiting for the next reply -packet from the target. The latest @samp{C}, @samp{c}, @samp{S} or -@samp{s} action is expected to be continued. -@xref{File-I/O remote protocol extension}, for more details. +The target replies with this packet when it expects @value{GDBN} to +call a host system call on behalf of the target. @value{GDBN} replies +with an appropriate @samp{F} packet and keeps up waiting for the next +reply packet from the target. The latest @samp{C}, @samp{c}, @samp{S} +or @samp{s} action is expected to be continued. @xref{File-I/O remote +protocol extension}, for more details. @end table @@ -22712,72 +22737,107 @@ packet from the target. The latest @samp{C}, @samp{c}, @samp{S} or The following set and query packets have already been defined. -@table @r +Like the descriptions of the other packets, each description here +has a template showing the packet's overall syntax, followed by an +explanation of the packet's meaning. We include spaces in some of the +templates for clarity; these are not part of the packet's syntax. No +@value{GDBN} packet uses spaces to separate its components. + +@table @samp -@item @code{q}@code{C} --- current thread +@item qC @cindex current thread, remote request -@cindex @code{qC} packet +@cindex @samp{qC} packet Return the current thread id. Reply: @table @samp -@item @code{QC}@var{pid} +@item QC @var{pid} Where @var{pid} is an unsigned hexidecimal process id. -@item * +@item @r{(anything else)} Any other reply implies the old pid. @end table -@item @code{q}@code{fThreadInfo} -- all thread ids -@cindex list active threads, remote request -@cindex @code{qfThreadInfo} packet -@code{q}@code{sThreadInfo} +@item qCRC:@var{addr},@var{length} +@cindex CRC of memory block, remote request +@cindex @samp{qCRC} packet +Compute the CRC checksum of a block of memory. +Reply: +@table @samp +@item E @var{NN} +An error (such as memory fault) +@item C @var{crc32} +The specified memory region's checksum is @var{crc32}. +@end table -Obtain a list of active thread ids from the target (OS). Since there +@item qfThreadInfo +@itemx qsThreadInfo +@cindex list active threads, remote request +@cindex @samp{qfThreadInfo} packet +@cindex @samp{qsThreadInfo} packet +Obtain a list of all active thread ids from the target (OS). Since there may be too many active threads to fit into one reply packet, this query works iteratively: it may require more than one query/reply sequence to obtain the entire list of threads. The first query of the sequence will -be the @code{qf}@code{ThreadInfo} query; subsequent queries in the -sequence will be the @code{qs}@code{ThreadInfo} query. +be the @samp{qfThreadInfo} query; subsequent queries in the +sequence will be the @samp{qsThreadInfo} query. -NOTE: replaces the @code{qL} query (see below). +NOTE: This packet replaces the @samp{qL} query (see below). Reply: @table @samp -@item @code{m}@var{id} +@item m @var{id} A single thread id -@item @code{m}@var{id},@var{id}@dots{} +@item m @var{id},@var{id}@dots{} a comma-separated list of thread ids -@item @code{l} -(lower case 'el') denotes end of list. +@item l +(lower case letter @samp{L}) denotes end of list. @end table In response to each query, the target will reply with a list of one or more thread ids, in big-endian unsigned hex, separated by commas. @value{GDBN} will respond to each reply with a request for more thread -ids (using the @code{qs} form of the query), until the target responds -with @code{l} (lower-case el, for @code{'last'}). +ids (using the @samp{qs} form of the query), until the target responds +with @samp{l} (lower-case el, for @dfn{last}). -@item @code{q}@code{ThreadExtraInfo}@code{,}@var{id} --- extra thread info -@cindex thread attributes info, remote request -@cindex @code{qThreadExtraInfo} packet -Where @var{id} is a thread-id in big-endian hex. Obtain a printable -string description of a thread's attributes from the target OS. This -string may contain anything that the target OS thinks is interesting for -@value{GDBN} to tell the user about the thread. The string is displayed -in @value{GDBN}'s @samp{info threads} display. Some examples of -possible thread extra info strings are ``Runnable'', or ``Blocked on -Mutex''. +@item qGetTLSAddr:@var{thread-id},@var{offset},@var{lm} +@cindex get thread-local storage address, remote request +@cindex @samp{qGetTLSAddr} packet +Fetch the address associated with thread local storage specified +by @var{thread-id}, @var{offset}, and @var{lm}. + +@var{thread-id} is the (big endian, hex encoded) thread id associated with the +thread for which to fetch the TLS address. + +@var{offset} is the (big endian, hex encoded) offset associated with the +thread local variable. (This offset is obtained from the debug +information associated with the variable.) + +@var{lm} is the (big endian, hex encoded) OS/ABI specific encoding of the +the load module associated with the thread local storage. For example, +a @sc{gnu}/Linux system will pass the link map address of the shared +object associated with the thread local storage under consideration. +Other operating environments may choose to represent the load module +differently, so the precise meaning of this parameter will vary. Reply: @table @samp -@item @var{XX@dots{}} -Where @var{XX@dots{}} is a hex encoding of @sc{ascii} data, comprising -the printable string containing the extra information about the thread's -attributes. +@item @var{XX}@dots{} +Hex encoded (big endian) bytes representing the address of the thread +local storage requested. + +@item E @var{nn} +An error occurred. @var{nn} are hex digits. + +@item +An empty reply indicates that @samp{qGetTLSAddr} is not supported by the stub. @end table -@item @code{q}@code{L}@var{startflag}@var{threadcount}@var{nextthread} --- query @var{LIST} or @var{threadLIST} @strong{(deprecated)} +Use of this request packet is controlled by the @code{set remote +get-thread-local-storage-address} command (@pxref{Remote +configuration, set remote get-thread-local-storage-address}). +@item qL @var{startflag} @var{threadcount} @var{nextthread} Obtain thread information from RTOS. Where: @var{startflag} (one hex digit) is one to indicate the first query and zero to indicate a subsequent query; @var{threadcount} (two hex digits) is the maximum @@ -22785,34 +22845,22 @@ number of threads the response packet can contain; and @var{nextthread} (eight hex digits), for subsequent queries (@var{startflag} is zero), is returned in the response as @var{argthread}. -NOTE: this query is replaced by the @code{q}@code{fThreadInfo} query -(see above). +Don't use this packet; use the @samp{qfThreadInfo} query instead (see above). Reply: @table @samp -@item @code{q}@code{M}@var{count}@var{done}@var{argthread}@var{thread@dots{}} +@item qM @var{count} @var{done} @var{argthread} @var{thread}@dots{} Where: @var{count} (two hex digits) is the number of threads being returned; @var{done} (one hex digit) is zero to indicate more threads and one indicates no further threads; @var{argthreadid} (eight hex -digits) is @var{nextthread} from the request packet; @var{thread@dots{}} +digits) is @var{nextthread} from the request packet; @var{thread}@dots{} is a sequence of thread IDs from the target. @var{threadid} (eight hex digits). See @code{remote.c:parse_threadlist_response()}. @end table -@item @code{q}@code{CRC:}@var{addr}@code{,}@var{length} --- compute CRC of memory block -@cindex CRC of memory block, remote request -@cindex @code{qCRC} packet -Reply: -@table @samp -@item @code{E}@var{NN} -An error (such as memory fault) -@item @code{C}@var{CRC32} -A 32 bit cyclic redundancy check of the specified memory region. -@end table - -@item @code{q}@code{Offsets} --- query sect offs +@item qOffsets @cindex section offsets, remote request -@cindex @code{qOffsets} packet +@cindex @samp{qOffsets} packet Get section offsets that the target used when re-locating the downloaded image. @emph{Note: while a @code{Bss} offset is included in the response, @value{GDBN} ignores this and instead applies the @code{Data} @@ -22820,203 +22868,179 @@ offset to the @code{Bss} section.} Reply: @table @samp -@item @code{Text=}@var{xxx}@code{;Data=}@var{yyy}@code{;Bss=}@var{zzz} +@item Text=@var{xxx};Data=@var{yyy};Bss=@var{zzz} @end table -@item @code{q}@code{P}@var{mode}@var{threadid} --- thread info request +@item qP @var{mode} @var{threadid} @cindex thread information, remote request -@cindex @code{qP} packet +@cindex @samp{qP} packet Returns information on @var{threadid}. Where: @var{mode} is a hex encoded 32 bit mode; @var{threadid} is a hex encoded 64 bit thread ID. -Reply: -@table @samp -@item * -@end table - -See @code{remote.c:remote_unpack_thread_info_response()}. - -@item @code{q}@code{Rcmd,}@var{command} --- remote command -@cindex execute remote command, remote request -@cindex @code{qRcmd} packet -@var{command} (hex encoded) is passed to the local interpreter for -execution. Invalid commands should be reported using the output string. -Before the final result packet, the target may also respond with a -number of intermediate @code{O}@var{output} console output packets. -@emph{Implementors should note that providing access to a stubs's -interpreter may have security implications}. - -Reply: -@table @samp -@item OK -A command response with no output. -@item @var{OUTPUT} -A command response with the hex encoded output string @var{OUTPUT}. -@item @code{E}@var{NN} -Indicate a badly formed request. -@item @samp{} -When @samp{q}@samp{Rcmd} is not recognized. -@end table -z -@item @code{qSymbol::} --- symbol lookup -@cindex symbol lookup, remote request -@cindex @code{qSymbol} packet -Notify the target that @value{GDBN} is prepared to serve symbol lookup -requests. Accept requests from the target for the values of symbols. - -Reply: -@table @samp -@item @code{OK} -The target does not need to look up any (more) symbols. -@item @code{qSymbol:}@var{sym_name} -The target requests the value of symbol @var{sym_name} (hex encoded). -@value{GDBN} may provide the value by using the -@code{qSymbol:}@var{sym_value}:@var{sym_name} message, described below. -@end table - -@item @code{qSymbol:}@var{sym_value}:@var{sym_name} --- symbol value - -Set the value of @var{sym_name} to @var{sym_value}. - -@var{sym_name} (hex encoded) is the name of a symbol whose value the -target has previously requested. - -@var{sym_value} (hex) is the value for symbol @var{sym_name}. If -@value{GDBN} cannot supply a value for @var{sym_name}, then this field -will be empty. - -Reply: -@table @samp -@item @code{OK} -The target does not need to look up any (more) symbols. -@item @code{qSymbol:}@var{sym_name} -The target requests the value of a new symbol @var{sym_name} (hex -encoded). @value{GDBN} will continue to supply the values of symbols -(if available), until the target ceases to request them. -@end table +Reply: see @code{remote.c:remote_unpack_thread_info_response()}. -@item @code{qPart}:@var{object}:@code{read}:@var{annex}:@var{offset},@var{length} --- read special data +@item qPart:@var{object}:read:@var{annex}:@var{offset},@var{length} @cindex read special object, remote request -@cindex @code{qPart} packet +@cindex @samp{qPart} packet Read uninterpreted bytes from the target's special data area -identified by the keyword @code{object}. -Request @var{length} bytes starting at @var{offset} bytes into the data. -The content and encoding of @var{annex} is specific to the object; -it can supply additional details about what data to access. +identified by the keyword @var{object}. Request @var{length} bytes +starting at @var{offset} bytes into the data. The content and +encoding of @var{annex} is specific to the object; it can supply +additional details about what data to access. -Here are the specific requests of this form defined so far. -All @samp{@code{qPart}:@var{object}:@code{read}:@dots{}} -requests use the same reply formats, listed below. +Here are the specific requests of this form defined so far. All +@samp{qPart:@var{object}:read:@dots{}} requests use the same reply +formats, listed below. -@table @asis -@item @code{qPart}:@code{auxv}:@code{read}::@var{offset},@var{length} +@table @samp +@item qPart:auxv:read::@var{offset},@var{length} Access the target's @dfn{auxiliary vector}. @xref{OS Information, auxiliary vector}, and see @ref{Remote configuration, read-aux-vector-packet}. Note @var{annex} must be empty. @end table Reply: -@table @asis -@item @code{OK} +@table @samp +@item OK The @var{offset} in the request is at the end of the data. There is no more data to be read. -@item @var{XX@dots{}} +@item @var{XX}@dots{} Hex encoded data bytes read. This may be fewer bytes than the @var{length} in the request. -@item @code{E00} +@item E00 The request was malformed, or @var{annex} was invalid. -@item @code{E}@var{nn} +@item E @var{nn} The offset was invalid, or there was an error encountered reading the data. @var{nn} is a hex-encoded @code{errno} value. -@item @code{""} (empty) +@item An empty reply indicates the @var{object} or @var{annex} string was not recognized by the stub. @end table -@item @code{qPart}:@var{object}:@code{write}:@var{annex}:@var{offset}:@var{data@dots{}} +@item qPart:@var{object}:write:@var{annex}:@var{offset}:@var{data}@dots{} @cindex write data into object, remote request Write uninterpreted bytes into the target's special data area -identified by the keyword @code{object}, -starting at @var{offset} bytes into the data. -@var{data@dots{}} is the hex-encoded data to be written. -The content and encoding of @var{annex} is specific to the object; -it can supply additional details about what data to access. +identified by the keyword @var{object}, starting at @var{offset} bytes +into the data. @samp{@var{data}@dots{}} is the hex-encoded data to be +written. The content and encoding of @var{annex} is specific to the +object; it can supply additional details about what data to access. No requests of this form are presently in use. This specification serves as a placeholder to document the common format that new specific request specifications ought to use. Reply: -@table @asis +@table @samp @item @var{nn} @var{nn} (hex encoded) is the number of bytes written. This may be fewer bytes than supplied in the request. -@item @code{E00} +@item E00 The request was malformed, or @var{annex} was invalid. -@item @code{E}@var{nn} +@item E @var{nn} The offset was invalid, or there was an error encountered writing the data. @var{nn} is a hex-encoded @code{errno} value. -@item @code{""} (empty) +@item An empty reply indicates the @var{object} or @var{annex} string was not recognized by the stub, or that the object does not support writing. @end table -@item @code{qPart}:@var{object}:@var{operation}:@dots{} +@item qPart:@var{object}:@var{operation}:@dots{} Requests of this form may be added in the future. When a stub does not recognize the @var{object} keyword, or its support for -@var{object} does not recognize the @var{operation} keyword, -the stub must respond with an empty packet. - -@item @code{qGetTLSAddr}:@var{thread-id},@var{offset},@var{lm} --- get thread local storage address -@cindex get thread-local storage address, remote request -@cindex @code{qGetTLSAddr} packet -Fetch the address associated with thread local storage specified -by @var{thread-id}, @var{offset}, and @var{lm}. +@var{object} does not recognize the @var{operation} keyword, the stub +must respond with an empty packet. -@var{thread-id} is the (big endian, hex encoded) thread id associated with the -thread for which to fetch the TLS address. +@item qRcmd,@var{command} +@cindex execute remote command, remote request +@cindex @samp{qRcmd} packet +@var{command} (hex encoded) is passed to the local interpreter for +execution. Invalid commands should be reported using the output +string. Before the final result packet, the target may also respond +with a number of intermediate @samp{O@var{output}} console output +packets. @emph{Implementors should note that providing access to a +stubs's interpreter may have security implications}. -@var{offset} is the (big endian, hex encoded) offset associated with the -thread local variable. (This offset is obtained from the debug -information associated with the variable.) +Reply: +@table @samp +@item OK +A command response with no output. +@item @var{OUTPUT} +A command response with the hex encoded output string @var{OUTPUT}. +@item E @var{NN} +Indicate a badly formed request. +@item +An empty reply indicates that @samp{qRcmd} is not recognized. +@end table -@var{lm} is the (big endian, hex encoded) OS/ABI specific encoding of the -the load module associated with the thread local storage. For example, -a @sc{gnu}/Linux system will pass the link map address of the shared -object associated with the thread local storage under consideration. -Other operating environments may choose to represent the load module -differently, so the precise meaning of this parameter will vary. +@item qSymbol:: +@cindex symbol lookup, remote request +@cindex @samp{qSymbol} packet +Notify the target that @value{GDBN} is prepared to serve symbol lookup +requests. Accept requests from the target for the values of symbols. Reply: -@table @asis -@item @var{XX@dots{}} -Hex encoded (big endian) bytes representing the address of the thread -local storage requested. +@table @samp +@item OK +The target does not need to look up any (more) symbols. +@item qSymbol:@var{sym_name} +The target requests the value of symbol @var{sym_name} (hex encoded). +@value{GDBN} may provide the value by using the +@samp{qSymbol:@var{sym_value}:@var{sym_name}} message, described +below. +@end table -@item @code{E}@var{nn} (where @var{nn} are hex digits) -An error occurred. +@item qSymbol:@var{sym_value}:@var{sym_name} +Set the value of @var{sym_name} to @var{sym_value}. + +@var{sym_name} (hex encoded) is the name of a symbol whose value the +target has previously requested. + +@var{sym_value} (hex) is the value for symbol @var{sym_name}. If +@value{GDBN} cannot supply a value for @var{sym_name}, then this field +will be empty. -@item @code{""} (empty) -An empty reply indicates that @code{qGetTLSAddr} is not supported by the stub. +Reply: +@table @samp +@item OK +The target does not need to look up any (more) symbols. +@item qSymbol:@var{sym_name} +The target requests the value of a new symbol @var{sym_name} (hex +encoded). @value{GDBN} will continue to supply the values of symbols +(if available), until the target ceases to request them. @end table -Use of this request packet is controlled by the @code{set remote -get-thread-local-storage-address} command (@pxref{Remote -configuration, set remote get-thread-local-storage-address}). +@item qThreadExtraInfo,@var{id} +@cindex thread attributes info, remote request +@cindex @samp{qThreadExtraInfo} packet +Obtain a printable string description of a thread's attributes from +the target OS. @var{id} is a thread-id in big-endian hex. This +string may contain anything that the target OS thinks is interesting +for @value{GDBN} to tell the user about the thread. The string is +displayed in @value{GDBN}'s @code{info threads} display. Some +examples of possible thread extra info strings are @samp{Runnable}, or +@samp{Blocked on Mutex}. + +Reply: +@table @samp +@item @var{XX}@dots{} +Where @samp{@var{XX}@dots{}} is a hex encoding of @sc{ascii} data, +comprising the printable string containing the extra information about +the thread's attributes. +@end table @end table @node Register Packet Format @section Register Packet Format -The following @samp{g}/@samp{G} packets have previously been defined. +The following @code{g}/@code{G} packets have previously been defined. In the below, some thirty-two bit registers are transferred as sixty-four bits. Those registers should be zero/sign extended (which?) to fill the space allocated. Register bytes are transfered in target diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c index 6c33448..8a3e99f 100644 --- a/gdb/dwarf2loc.c +++ b/gdb/dwarf2loc.c @@ -164,9 +164,11 @@ dwarf_expr_frame_base (void *baton, gdb_byte **start, size_t * length) if (SYMBOL_OPS (framefunc) == &dwarf2_loclist_funcs) { struct dwarf2_loclist_baton *symbaton; + struct frame_info *frame = debaton->frame; + symbaton = SYMBOL_LOCATION_BATON (framefunc); *start = find_location_expression (symbaton, length, - get_frame_pc (debaton->frame)); + get_frame_address_in_block (frame)); } else { @@ -302,11 +304,28 @@ dwarf2_evaluate_loc_desc (struct symbol *var, struct frame_info *frame, dwarf_expr_eval (ctx, data, size); if (ctx->num_pieces > 0) { - /* We haven't implemented splicing together pieces from - arbitrary sources yet. */ - error (_("The value of variable '%s' is distributed across several\n" - "locations, and GDB cannot access its value.\n"), - SYMBOL_NATURAL_NAME (var)); + int i; + long offset = 0; + bfd_byte *contents; + + retval = allocate_value (SYMBOL_TYPE (var)); + contents = value_contents_raw (retval); + for (i = 0; i < ctx->num_pieces; i++) + { + struct dwarf_expr_piece *p = &ctx->pieces[i]; + if (p->in_reg) + { + bfd_byte regval[MAX_REGISTER_SIZE]; + int gdb_regnum = DWARF2_REG_TO_REGNUM (p->value); + get_frame_register (frame, gdb_regnum, regval); + memcpy (contents + offset, regval, p->size); + } + else /* In memory? */ + { + read_memory (p->value, contents + offset, p->size); + } + offset += p->size; + } } else if (ctx->in_reg) { @@ -580,7 +599,8 @@ loclist_read_variable (struct symbol *symbol, struct frame_info *frame) size_t size; data = find_location_expression (dlbaton, &size, - frame ? get_frame_pc (frame) : 0); + frame ? get_frame_address_in_block (frame) + : 0); if (data == NULL) { val = allocate_value (SYMBOL_TYPE (symbol)); diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 4b0b6bd..0a59a8c 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -3855,6 +3855,28 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu) TYPE_VPTR_FIELDNO (type) = TYPE_VPTR_FIELDNO (t); } } + else if (cu->producer + && strncmp (cu->producer, + "IBM(R) XL C/C++ Advanced Edition", 32) == 0) + { + /* The IBM XLC compiler does not provide direct indication + of the containing type, but the vtable pointer is + always named __vfp. */ + + int i; + + for (i = TYPE_NFIELDS (type) - 1; + i >= TYPE_N_BASECLASSES (type); + --i) + { + if (strcmp (TYPE_FIELD_NAME (type, i), "__vfp") == 0) + { + TYPE_VPTR_FIELDNO (type) = i; + TYPE_VPTR_BASETYPE (type) = type; + break; + } + } + } } do_cleanups (back_to); @@ -8795,32 +8817,51 @@ dwarf_alloc_die (void) static char * file_full_name (int file, struct line_header *lh, const char *comp_dir) { - struct file_entry *fe = &lh->file_names[file - 1]; + /* Is the file number a valid index into the line header's file name + table? Remember that file numbers start with one, not zero. */ + if (1 <= file && file <= lh->num_file_names) + { + struct file_entry *fe = &lh->file_names[file - 1]; - if (IS_ABSOLUTE_PATH (fe->name)) - return xstrdup (fe->name); + if (IS_ABSOLUTE_PATH (fe->name)) + return xstrdup (fe->name); + else + { + const char *dir; + int dir_len; + char *full_name; + + if (fe->dir_index) + dir = lh->include_dirs[fe->dir_index - 1]; + else + dir = comp_dir; + + if (dir) + { + dir_len = strlen (dir); + full_name = xmalloc (dir_len + 1 + strlen (fe->name) + 1); + strcpy (full_name, dir); + full_name[dir_len] = '/'; + strcpy (full_name + dir_len + 1, fe->name); + return full_name; + } + else + return xstrdup (fe->name); + } + } else { - const char *dir; - int dir_len; - char *full_name; + /* The compiler produced a bogus file number. We can at least + record the macro definitions made in the file, even if we + won't be able to find the file by name. */ + char fake_name[80]; + sprintf (fake_name, "<bad macro file number %d>", file); - if (fe->dir_index) - dir = lh->include_dirs[fe->dir_index - 1]; - else - dir = comp_dir; + complaint (&symfile_complaints, + _("bad file number in macro information (%d)"), + file); - if (dir) - { - dir_len = strlen (dir); - full_name = xmalloc (dir_len + 1 + strlen (fe->name) + 1); - strcpy (full_name, dir); - full_name[dir_len] = '/'; - strcpy (full_name + dir_len + 1, fe->name); - return full_name; - } - else - return xstrdup (fe->name); + return xstrdup (fake_name); } } diff --git a/gdb/elfread.c b/gdb/elfread.c index 70a825f..f8e08ea 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -124,13 +124,14 @@ record_minimal_symbol (char *name, CORE_ADDR address, SYNOPSIS - void elf_symtab_read (struct objfile *objfile, int dynamic) + void elf_symtab_read (struct objfile *objfile, int dynamic, + long number_of_symbols, asymbol **symbol_table) DESCRIPTION - Given an objfile and a flag that specifies whether or not the objfile - is for an executable or not (may be shared library for example), add - all the global function and data symbols to the minimal symbol table. + Given an objfile, a symbol table, and a flag indicating whether the + symbol table contains dynamic symbols, add all the global function + and data symbols to the minimal symbol table. In stabs-in-ELF, as implemented by Sun, there are some local symbols defined in the ELF symbol table, which can be used to locate @@ -141,14 +142,12 @@ record_minimal_symbol (char *name, CORE_ADDR address, */ static void -elf_symtab_read (struct objfile *objfile, int dynamic) +elf_symtab_read (struct objfile *objfile, int dynamic, + long number_of_symbols, asymbol **symbol_table) { long storage_needed; asymbol *sym; - asymbol **symbol_table; - long number_of_symbols; long i; - struct cleanup *back_to; CORE_ADDR symaddr; CORE_ADDR offset; enum minimal_symbol_type ms_type; @@ -165,292 +164,262 @@ elf_symtab_read (struct objfile *objfile, int dynamic) struct dbx_symfile_info *dbx = objfile->deprecated_sym_stab_info; int stripped = (bfd_get_symcount (objfile->obfd) == 0); - if (dynamic) + for (i = 0; i < number_of_symbols; i++) { - storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd); + sym = symbol_table[i]; + if (sym->name == NULL || *sym->name == '\0') + { + /* Skip names that don't exist (shouldn't happen), or names + that are null strings (may happen). */ + continue; + } - /* Nothing to be done if there is no dynamic symtab. */ - if (storage_needed < 0) - return; - } - else - { - storage_needed = bfd_get_symtab_upper_bound (objfile->obfd); - if (storage_needed < 0) - error (_("Can't read symbols from %s: %s"), bfd_get_filename (objfile->obfd), - bfd_errmsg (bfd_get_error ())); - } - if (storage_needed > 0) - { - symbol_table = (asymbol **) xmalloc (storage_needed); - back_to = make_cleanup (xfree, symbol_table); - if (dynamic) - number_of_symbols = bfd_canonicalize_dynamic_symtab (objfile->obfd, - symbol_table); - else - number_of_symbols = bfd_canonicalize_symtab (objfile->obfd, symbol_table); - if (number_of_symbols < 0) - error (_("Can't read symbols from %s: %s"), bfd_get_filename (objfile->obfd), - bfd_errmsg (bfd_get_error ())); + offset = ANOFFSET (objfile->section_offsets, sym->section->index); + if (dynamic + && sym->section == &bfd_und_section + && (sym->flags & BSF_FUNCTION)) + { + struct minimal_symbol *msym; + + /* Symbol is a reference to a function defined in + a shared library. + If its value is non zero then it is usually the address + of the corresponding entry in the procedure linkage table, + plus the desired section offset. + If its value is zero then the dynamic linker has to resolve + the symbol. We are unable to find any meaningful address + for this symbol in the executable file, so we skip it. */ + symaddr = sym->value; + if (symaddr == 0) + continue; + symaddr += offset; + msym = record_minimal_symbol + ((char *) sym->name, symaddr, + mst_solib_trampoline, sym->section, objfile); +#ifdef SOFUN_ADDRESS_MAYBE_MISSING + if (msym != NULL) + msym->filename = filesymname; +#endif + continue; + } - for (i = 0; i < number_of_symbols; i++) + /* If it is a nonstripped executable, do not enter dynamic + symbols, as the dynamic symbol table is usually a subset + of the main symbol table. */ + if (dynamic && !stripped) + continue; + if (sym->flags & BSF_FILE) { - sym = symbol_table[i]; - if (sym->name == NULL || *sym->name == '\0') + /* STT_FILE debugging symbol that helps stabs-in-elf debugging. + Chain any old one onto the objfile; remember new sym. */ + if (sectinfo != NULL) { - /* Skip names that don't exist (shouldn't happen), or names - that are null strings (may happen). */ - continue; + sectinfo->next = dbx->stab_section_info; + dbx->stab_section_info = sectinfo; + sectinfo = NULL; } - - offset = ANOFFSET (objfile->section_offsets, sym->section->index); - if (dynamic - && sym->section == &bfd_und_section - && (sym->flags & BSF_FUNCTION)) - { - struct minimal_symbol *msym; - - /* Symbol is a reference to a function defined in - a shared library. - If its value is non zero then it is usually the address - of the corresponding entry in the procedure linkage table, - plus the desired section offset. - If its value is zero then the dynamic linker has to resolve - the symbol. We are unable to find any meaningful address - for this symbol in the executable file, so we skip it. */ - symaddr = sym->value; - if (symaddr == 0) - continue; - symaddr += offset; - msym = record_minimal_symbol - ((char *) sym->name, symaddr, - mst_solib_trampoline, sym->section, objfile); + filesym = sym; #ifdef SOFUN_ADDRESS_MAYBE_MISSING - if (msym != NULL) - msym->filename = filesymname; + filesymname = + obsavestring ((char *) filesym->name, strlen (filesym->name), + &objfile->objfile_obstack); #endif - continue; + } + else if (sym->flags & BSF_SECTION_SYM) + continue; + else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK)) + { + struct minimal_symbol *msym; + + /* Select global/local/weak symbols. Note that bfd puts abs + symbols in their own section, so all symbols we are + interested in will have a section. */ + /* Bfd symbols are section relative. */ + symaddr = sym->value + sym->section->vma; + /* Relocate all non-absolute symbols by the section offset. */ + if (sym->section != &bfd_abs_section) + { + symaddr += offset; } - - /* If it is a nonstripped executable, do not enter dynamic - symbols, as the dynamic symbol table is usually a subset - of the main symbol table. */ - if (dynamic && !stripped) - continue; - if (sym->flags & BSF_FILE) + /* For non-absolute symbols, use the type of the section + they are relative to, to intuit text/data. Bfd provides + no way of figuring this out for absolute symbols. */ + if (sym->section == &bfd_abs_section) { - /* STT_FILE debugging symbol that helps stabs-in-elf debugging. - Chain any old one onto the objfile; remember new sym. */ - if (sectinfo != NULL) + /* This is a hack to get the minimal symbol type + right for Irix 5, which has absolute addresses + with special section indices for dynamic symbols. */ + unsigned short shndx = + ((elf_symbol_type *) sym)->internal_elf_sym.st_shndx; + + switch (shndx) { - sectinfo->next = dbx->stab_section_info; - dbx->stab_section_info = sectinfo; - sectinfo = NULL; + case SHN_MIPS_TEXT: + ms_type = mst_text; + break; + case SHN_MIPS_DATA: + ms_type = mst_data; + break; + case SHN_MIPS_ACOMMON: + ms_type = mst_bss; + break; + default: + ms_type = mst_abs; + } + + /* If it is an Irix dynamic symbol, skip section name + symbols, relocate all others by section offset. */ + if (ms_type != mst_abs) + { + if (sym->name[0] == '.') + continue; + symaddr += offset; } - filesym = sym; -#ifdef SOFUN_ADDRESS_MAYBE_MISSING - filesymname = - obsavestring ((char *) filesym->name, strlen (filesym->name), - &objfile->objfile_obstack); -#endif } - else if (sym->flags & BSF_SECTION_SYM) - continue; - else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK)) + else if (sym->section->flags & SEC_CODE) { - struct minimal_symbol *msym; - - /* Select global/local/weak symbols. Note that bfd puts abs - symbols in their own section, so all symbols we are - interested in will have a section. */ - /* Bfd symbols are section relative. */ - symaddr = sym->value + sym->section->vma; - /* Relocate all non-absolute symbols by the section offset. */ - if (sym->section != &bfd_abs_section) + if (sym->flags & BSF_GLOBAL) { - symaddr += offset; + ms_type = mst_text; } - /* For non-absolute symbols, use the type of the section - they are relative to, to intuit text/data. Bfd provides - no way of figuring this out for absolute symbols. */ - if (sym->section == &bfd_abs_section) + else if ((sym->name[0] == '.' && sym->name[1] == 'L') + || ((sym->flags & BSF_LOCAL) + && sym->name[0] == '$' + && sym->name[1] == 'L')) + /* Looks like a compiler-generated label. Skip + it. The assembler should be skipping these (to + keep executables small), but apparently with + gcc on the (deleted) delta m88k SVR4, it loses. + So to have us check too should be harmless (but + I encourage people to fix this in the assembler + instead of adding checks here). */ + continue; + else { - /* This is a hack to get the minimal symbol type - right for Irix 5, which has absolute addresses - with special section indices for dynamic symbols. */ - unsigned short shndx = - ((elf_symbol_type *) sym)->internal_elf_sym.st_shndx; - - switch (shndx) - { - case SHN_MIPS_TEXT: - ms_type = mst_text; - break; - case SHN_MIPS_DATA: - ms_type = mst_data; - break; - case SHN_MIPS_ACOMMON: - ms_type = mst_bss; - break; - default: - ms_type = mst_abs; - } - - /* If it is an Irix dynamic symbol, skip section name - symbols, relocate all others by section offset. */ - if (ms_type != mst_abs) - { - if (sym->name[0] == '.') - continue; - symaddr += offset; - } + ms_type = mst_file_text; } - else if (sym->section->flags & SEC_CODE) + } + else if (sym->section->flags & SEC_ALLOC) + { + if (sym->flags & (BSF_GLOBAL | BSF_WEAK)) { - if (sym->flags & BSF_GLOBAL) + if (sym->section->flags & SEC_LOAD) { - ms_type = mst_text; + ms_type = mst_data; } - else if ((sym->name[0] == '.' && sym->name[1] == 'L') - || ((sym->flags & BSF_LOCAL) - && sym->name[0] == '$' - && sym->name[1] == 'L')) - /* Looks like a compiler-generated label. Skip - it. The assembler should be skipping these (to - keep executables small), but apparently with - gcc on the (deleted) delta m88k SVR4, it loses. - So to have us check too should be harmless (but - I encourage people to fix this in the assembler - instead of adding checks here). */ - continue; else { - ms_type = mst_file_text; + ms_type = mst_bss; } } - else if (sym->section->flags & SEC_ALLOC) + else if (sym->flags & BSF_LOCAL) { - if (sym->flags & (BSF_GLOBAL | BSF_WEAK)) - { - if (sym->section->flags & SEC_LOAD) - { - ms_type = mst_data; - } - else - { - ms_type = mst_bss; - } - } - else if (sym->flags & BSF_LOCAL) + /* Named Local variable in a Data section. + Check its name for stabs-in-elf. */ + int special_local_sect; + if (strcmp ("Bbss.bss", sym->name) == 0) + special_local_sect = SECT_OFF_BSS (objfile); + else if (strcmp ("Ddata.data", sym->name) == 0) + special_local_sect = SECT_OFF_DATA (objfile); + else if (strcmp ("Drodata.rodata", sym->name) == 0) + special_local_sect = SECT_OFF_RODATA (objfile); + else + special_local_sect = -1; + if (special_local_sect >= 0) { - /* Named Local variable in a Data section. - Check its name for stabs-in-elf. */ - int special_local_sect; - if (strcmp ("Bbss.bss", sym->name) == 0) - special_local_sect = SECT_OFF_BSS (objfile); - else if (strcmp ("Ddata.data", sym->name) == 0) - special_local_sect = SECT_OFF_DATA (objfile); - else if (strcmp ("Drodata.rodata", sym->name) == 0) - special_local_sect = SECT_OFF_RODATA (objfile); - else - special_local_sect = -1; - if (special_local_sect >= 0) + /* Found a special local symbol. Allocate a + sectinfo, if needed, and fill it in. */ + if (sectinfo == NULL) { - /* Found a special local symbol. Allocate a - sectinfo, if needed, and fill it in. */ - if (sectinfo == NULL) + int max_index; + size_t size; + + max_index + = max (SECT_OFF_BSS (objfile), + max (SECT_OFF_DATA (objfile), + SECT_OFF_RODATA (objfile))); + + /* max_index is the largest index we'll + use into this array, so we must + allocate max_index+1 elements for it. + However, 'struct stab_section_info' + already includes one element, so we + need to allocate max_index aadditional + elements. */ + size = (sizeof (struct stab_section_info) + + (sizeof (CORE_ADDR) + * max_index)); + sectinfo = (struct stab_section_info *) + xmalloc (size); + memset (sectinfo, 0, size); + sectinfo->num_sections = max_index; + if (filesym == NULL) { - int max_index; - size_t size; - - max_index - = max (SECT_OFF_BSS (objfile), - max (SECT_OFF_DATA (objfile), - SECT_OFF_RODATA (objfile))); - - /* max_index is the largest index we'll - use into this array, so we must - allocate max_index+1 elements for it. - However, 'struct stab_section_info' - already includes one element, so we - need to allocate max_index aadditional - elements. */ - size = (sizeof (struct stab_section_info) - + (sizeof (CORE_ADDR) - * max_index)); - sectinfo = (struct stab_section_info *) - xmalloc (size); - memset (sectinfo, 0, size); - sectinfo->num_sections = max_index; - if (filesym == NULL) - { - complaint (&symfile_complaints, - _("elf/stab section information %s without a preceding file symbol"), - sym->name); - } - else - { - sectinfo->filename = - (char *) filesym->name; - } + complaint (&symfile_complaints, + _("elf/stab section information %s without a preceding file symbol"), + sym->name); + } + else + { + sectinfo->filename = + (char *) filesym->name; } - if (sectinfo->sections[special_local_sect] != 0) - complaint (&symfile_complaints, - _("duplicated elf/stab section information for %s"), - sectinfo->filename); - /* BFD symbols are section relative. */ - symaddr = sym->value + sym->section->vma; - /* Relocate non-absolute symbols by the - section offset. */ - if (sym->section != &bfd_abs_section) - symaddr += offset; - sectinfo->sections[special_local_sect] = symaddr; - /* The special local symbols don't go in the - minimal symbol table, so ignore this one. */ - continue; - } - /* Not a special stabs-in-elf symbol, do regular - symbol processing. */ - if (sym->section->flags & SEC_LOAD) - { - ms_type = mst_file_data; - } - else - { - ms_type = mst_file_bss; } + if (sectinfo->sections[special_local_sect] != 0) + complaint (&symfile_complaints, + _("duplicated elf/stab section information for %s"), + sectinfo->filename); + /* BFD symbols are section relative. */ + symaddr = sym->value + sym->section->vma; + /* Relocate non-absolute symbols by the + section offset. */ + if (sym->section != &bfd_abs_section) + symaddr += offset; + sectinfo->sections[special_local_sect] = symaddr; + /* The special local symbols don't go in the + minimal symbol table, so ignore this one. */ + continue; + } + /* Not a special stabs-in-elf symbol, do regular + symbol processing. */ + if (sym->section->flags & SEC_LOAD) + { + ms_type = mst_file_data; } else { - ms_type = mst_unknown; + ms_type = mst_file_bss; } } else { - /* FIXME: Solaris2 shared libraries include lots of - odd "absolute" and "undefined" symbols, that play - hob with actions like finding what function the PC - is in. Ignore them if they aren't text, data, or bss. */ - /* ms_type = mst_unknown; */ - continue; /* Skip this symbol. */ + ms_type = mst_unknown; } - msym = record_minimal_symbol - ((char *) sym->name, symaddr, - ms_type, sym->section, objfile); - if (msym) - { - /* Pass symbol size field in via BFD. FIXME!!! */ - unsigned long size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size; - MSYMBOL_SIZE(msym) = size; - } + } + else + { + /* FIXME: Solaris2 shared libraries include lots of + odd "absolute" and "undefined" symbols, that play + hob with actions like finding what function the PC + is in. Ignore them if they aren't text, data, or bss. */ + /* ms_type = mst_unknown; */ + continue; /* Skip this symbol. */ + } + msym = record_minimal_symbol + ((char *) sym->name, symaddr, + ms_type, sym->section, objfile); + if (msym) + { + /* Pass symbol size field in via BFD. FIXME!!! */ + unsigned long size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size; + MSYMBOL_SIZE(msym) = size; + } #ifdef SOFUN_ADDRESS_MAYBE_MISSING - if (msym != NULL) - msym->filename = filesymname; + if (msym != NULL) + msym->filename = filesymname; #endif - ELF_MAKE_MSYMBOL_SPECIAL (sym, msym); - } + ELF_MAKE_MSYMBOL_SPECIAL (sym, msym); } - do_cleanups (back_to); } } @@ -493,6 +462,9 @@ elf_symfile_read (struct objfile *objfile, int mainline) struct elfinfo ei; struct cleanup *back_to; CORE_ADDR offset; + long symcount = 0, dynsymcount = 0, synthcount, storage_needed; + asymbol **symbol_table = NULL, **dyn_symbol_table = NULL; + asymbol *synthsyms; init_minimal_symbol_collection (); back_to = make_cleanup_discard_minimal_symbols (); @@ -509,11 +481,65 @@ elf_symfile_read (struct objfile *objfile, int mainline) chain of info into the dbx_symfile_info in objfile->deprecated_sym_stab_info, which can later be used by elfstab_offset_sections. */ - elf_symtab_read (objfile, 0); + storage_needed = bfd_get_symtab_upper_bound (objfile->obfd); + if (storage_needed < 0) + error (_("Can't read symbols from %s: %s"), bfd_get_filename (objfile->obfd), + bfd_errmsg (bfd_get_error ())); + + if (storage_needed > 0) + { + symbol_table = (asymbol **) xmalloc (storage_needed); + make_cleanup (xfree, symbol_table); + symcount = bfd_canonicalize_symtab (objfile->obfd, symbol_table); + + if (symcount < 0) + error (_("Can't read symbols from %s: %s"), bfd_get_filename (objfile->obfd), + bfd_errmsg (bfd_get_error ())); + + elf_symtab_read (objfile, 0, symcount, symbol_table); + } /* Add the dynamic symbols. */ - elf_symtab_read (objfile, 1); + storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd); + + if (storage_needed > 0) + { + dyn_symbol_table = (asymbol **) xmalloc (storage_needed); + make_cleanup (xfree, dyn_symbol_table); + dynsymcount = bfd_canonicalize_dynamic_symtab (objfile->obfd, + dyn_symbol_table); + + if (dynsymcount < 0) + error (_("Can't read symbols from %s: %s"), bfd_get_filename (objfile->obfd), + bfd_errmsg (bfd_get_error ())); + + elf_symtab_read (objfile, 1, dynsymcount, dyn_symbol_table); + } + + /* Add synthetic symbols - for instance, names for any PLT entries. */ + + synthcount = bfd_get_synthetic_symtab (abfd, symcount, symbol_table, + dynsymcount, dyn_symbol_table, + &synthsyms); + if (synthcount > 0) + { + asymbol **synth_symbol_table; + long i; + + make_cleanup (xfree, synthsyms); + synth_symbol_table = xmalloc (sizeof (asymbol *) * synthcount); + for (i = 0; i < synthcount; i++) + { + synth_symbol_table[i] = synthsyms + i; + /* Synthetic symbols are not, strictly speaking, either local + or global. But we can treat them as global symbols, since + they are effectively dynamic symbols. */ + synth_symbol_table[i]->flags |= BSF_GLOBAL; + } + make_cleanup (xfree, synth_symbol_table); + elf_symtab_read (objfile, 0, synthcount, synth_symbol_table); + } /* Install any minimal symbols that have been collected as the current minimal symbols for this objfile. The debug readers below this point diff --git a/gdb/event-top.c b/gdb/event-top.c index bc1fe8e..438ef20 100644 --- a/gdb/event-top.c +++ b/gdb/event-top.c @@ -1110,7 +1110,7 @@ gdb_setup_readline (void) that the sync setup is ALL done in gdb_init, and we would only mess it up here. The sync stuff should really go away over time. */ - extern batch_silent; + extern int batch_silent; if (!batch_silent) gdb_stdout = stdio_fileopen (stdout); diff --git a/gdb/frv-linux-tdep.c b/gdb/frv-linux-tdep.c index 2ec44d1..b9447ed 100644 --- a/gdb/frv-linux-tdep.c +++ b/gdb/frv-linux-tdep.c @@ -300,7 +300,7 @@ frv_linux_sigtramp_frame_prev_register (struct frame_info *next_frame, void **this_cache, int regnum, int *optimizedp, enum lval_type *lvalp, CORE_ADDR *addrp, - int *realnump, void *valuep) + int *realnump, gdb_byte *valuep) { /* Make sure we've initialized the cache. */ struct trad_frame_cache *cache = diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c index e597037..483de85 100644 --- a/gdb/frv-tdep.c +++ b/gdb/frv-tdep.c @@ -309,7 +309,7 @@ frv_register_type (struct gdbarch *gdbarch, int reg) static void frv_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, - int reg, void *buffer) + int reg, gdb_byte *buffer) { if (reg == iacc0_regnum) { @@ -335,7 +335,7 @@ frv_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, static void frv_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, - int reg, const void *buffer) + int reg, const gdb_byte *buffer) { if (reg == iacc0_regnum) { @@ -1031,7 +1031,7 @@ frv_frame_unwind_cache (struct frame_info *next_frame, static void frv_extract_return_value (struct type *type, struct regcache *regcache, - void *valbuf) + gdb_byte *valbuf) { int len = TYPE_LENGTH (type); @@ -1247,7 +1247,7 @@ frv_push_dummy_call (struct gdbarch *gdbarch, struct value *function, static void frv_store_return_value (struct type *type, struct regcache *regcache, - const void *valbuf) + const gdb_byte *valbuf) { int len = TYPE_LENGTH (type); @@ -1377,7 +1377,7 @@ frv_frame_prev_register (struct frame_info *next_frame, void **this_prologue_cache, int regnum, int *optimizedp, enum lval_type *lvalp, CORE_ADDR *addrp, - int *realnump, void *bufferp) + int *realnump, gdb_byte *bufferp) { struct frv_unwind_cache *info = frv_frame_unwind_cache (next_frame, this_prologue_cache); diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index bdf99ae..ec1e152 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,16 @@ +2005-11-13 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-arm-low.c (arm_eabi_breakpoint): New variable. + (arm_breakpoint_at): Recognize both breakpoints. + (the_low_target): Use the correct breakpoint instruction. + +2005-11-02 Daniel Jacobowitz <dan@codesourcery.com> + + * configure.srv (x86_64-*-linux*): Turn on thread_db support. + * linux-x86-64-low.c (x86_64_breakpoint, x86_64_breakpoint_len) + (x86_64_get_pc, x86_64_set_pc, x86_64_breakpoint_at): New. + (the_low_target): Update. + 2005-10-25 Andreas Schwab <schwab@suse.de> * server.c (main): Allocate mem_buf with PBUFSIZ bytes. diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv index f0e4dd3..e2d52c0 100644 --- a/gdb/gdbserver/configure.srv +++ b/gdb/gdbserver/configure.srv @@ -87,6 +87,7 @@ case "${target}" in x86_64-*-linux*) srv_regobj=reg-x86-64.o srv_tgtobj="linux-low.o linux-x86-64-low.o i387-fp.o" srv_linux_regsets=yes + srv_linux_thread_db=yes ;; xscale*-*-linux*) srv_regobj=reg-arm.o srv_tgtobj="linux-low.o linux-arm-low.o" diff --git a/gdb/gdbserver/linux-arm-low.c b/gdb/gdbserver/linux-arm-low.c index 7c23b17..643da08 100644 --- a/gdb/gdbserver/linux-arm-low.c +++ b/gdb/gdbserver/linux-arm-low.c @@ -70,6 +70,12 @@ arm_set_pc (CORE_ADDR pc) static const unsigned long arm_breakpoint = 0xef9f0001; #define arm_breakpoint_len 4 +/* For new EABI binaries. We recognize it regardless of which ABI + is used for gdbserver, so single threaded debugging should work + OK, but for multi-threaded debugging we only insert the current + ABI's breakpoint instruction. For now at least. */ +static const unsigned long arm_eabi_breakpoint = 0xe7f001f0; + static int arm_breakpoint_at (CORE_ADDR where) { @@ -79,8 +85,12 @@ arm_breakpoint_at (CORE_ADDR where) if (insn == arm_breakpoint) return 1; + if (insn == arm_eabi_breakpoint) + return 1; + /* If necessary, recognize more trap instructions here. GDB only uses the - one. */ + two. */ + return 0; } @@ -102,7 +112,11 @@ struct linux_target_ops the_low_target = { arm_cannot_store_register, arm_get_pc, arm_set_pc, +#ifndef __ARM_EABI__ (const unsigned char *) &arm_breakpoint, +#else + (const unsigned char *) &arm_eabi_breakpoint, +#endif arm_breakpoint_len, arm_reinsert_addr, 0, diff --git a/gdb/gdbserver/linux-x86-64-low.c b/gdb/gdbserver/linux-x86-64-low.c index fa7440d..fdf5ee1 100644 --- a/gdb/gdbserver/linux-x86-64-low.c +++ b/gdb/gdbserver/linux-x86-64-low.c @@ -1,6 +1,6 @@ /* GNU/Linux/x86-64 specific low level interface, for the remote server for GDB. - Copyright 2002, 2004 + Copyright 2002, 2004, 2005 Free Software Foundation, Inc. This file is part of GDB. @@ -129,9 +129,53 @@ struct regset_info target_regsets[] = { { 0, 0, -1, -1, NULL, NULL } }; +static const unsigned char x86_64_breakpoint[] = { 0xCC }; +#define x86_64_breakpoint_len 1 + +extern int debug_threads; + +static CORE_ADDR +x86_64_get_pc () +{ + unsigned long pc; + + collect_register_by_name ("rip", &pc); + + if (debug_threads) + fprintf (stderr, "stop pc (before any decrement) is %08lx\n", pc); + return pc; +} + +static void +x86_64_set_pc (CORE_ADDR newpc) +{ + if (debug_threads) + fprintf (stderr, "set pc to %08lx\n", (long) newpc); + supply_register_by_name ("rip", &newpc); +} + +static int +x86_64_breakpoint_at (CORE_ADDR pc) +{ + unsigned char c; + + read_inferior_memory (pc, &c, 1); + if (c == 0xCC) + return 1; + + return 0; +} + struct linux_target_ops the_low_target = { -1, NULL, NULL, NULL, + x86_64_get_pc, + x86_64_set_pc, + x86_64_breakpoint, + x86_64_breakpoint_len, + NULL, + 1, + x86_64_breakpoint_at, }; diff --git a/gdb/hppa-linux-nat.c b/gdb/hppa-linux-nat.c index 94a5cc8..dfc75b8 100644 --- a/gdb/hppa-linux-nat.c +++ b/gdb/hppa-linux-nat.c @@ -388,8 +388,8 @@ _initialize_hppa_linux_nat (void) t = linux_target (); /* Add our register access methods. */ - t->to_fetch_registers = arm_linux_fetch_inferior_registers; - t->to_store_registers = arm_linux_store_inferior_registers; + t->to_fetch_registers = hppa_linux_fetch_inferior_registers; + t->to_store_registers = hppa_linux_store_inferior_registers; /* Register the target. */ add_target (t); diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c index ac43d26..0d63aeb 100644 --- a/gdb/ia64-tdep.c +++ b/gdb/ia64-tdep.c @@ -324,7 +324,7 @@ ia64_dwarf_reg_to_regnum (int reg) } static int -floatformat_valid (const struct floatformat *fmt, const char *from) +floatformat_valid (const struct floatformat *fmt, const void *from) { return 1; } diff --git a/gdb/infrun.c b/gdb/infrun.c index 4c2a78d..fab0a96 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -46,6 +46,7 @@ #include "observer.h" #include "language.h" #include "solib.h" +#include "main.h" #include "gdb_assert.h" #include "mi/mi-common.h" @@ -2931,6 +2932,8 @@ print_stop_reason (enum inferior_stop_reason stop_reason, int stop_info) async_reason_lookup (EXEC_ASYNC_EXITED_NORMALLY)); ui_out_text (uiout, "\nProgram exited normally.\n"); } + /* Support the --return-child-result option. */ + return_child_result_value = stop_info; break; case SIGNAL_RECEIVED: /* Signal received. The signal table tells us to print about diff --git a/gdb/inftarg.c b/gdb/inftarg.c index 5d7750d..e6abcfa 100644 --- a/gdb/inftarg.c +++ b/gdb/inftarg.c @@ -102,7 +102,6 @@ child_wait (ptid_t ptid, struct target_waitstatus *ourstatus) int status; char *execd_pathname = NULL; int exit_status; - int related_pid; int syscall_id; enum target_waitkind kind; int pid; diff --git a/gdb/interps.h b/gdb/interps.h index 858c1e4..4d0250e 100644 --- a/gdb/interps.h +++ b/gdb/interps.h @@ -76,5 +76,6 @@ extern void clear_interpreter_hooks (void); #define INTERP_MI3 "mi3" #define INTERP_MI "mi" #define INTERP_TUI "tui" +#define INTERP_INSIGHT "insight" #endif diff --git a/gdb/m32r-linux-tdep.c b/gdb/m32r-linux-tdep.c index a4f407f..3d4aed4 100644 --- a/gdb/m32r-linux-tdep.c +++ b/gdb/m32r-linux-tdep.c @@ -77,7 +77,7 @@ to the ones used by the kernel. Therefore, these trampolines are supported too. */ -static const unsigned char linux_sigtramp_code[] = { +static const gdb_byte linux_sigtramp_code[] = { 0x67, 0x77, 0x10, 0xf2, }; @@ -87,7 +87,7 @@ static const unsigned char linux_sigtramp_code[] = { static CORE_ADDR m32r_linux_sigtramp_start (CORE_ADDR pc, struct frame_info *next_frame) { - unsigned char buf[4]; + gdb_byte buf[4]; /* We only recognize a signal trampoline if PC is at the start of one of the instructions. We optimize for finding the PC at the @@ -125,7 +125,7 @@ m32r_linux_sigtramp_start (CORE_ADDR pc, struct frame_info *next_frame) The effect is to call the system call rt_sigreturn. */ -static const unsigned char linux_rt_sigtramp_code[] = { +static const gdb_byte linux_rt_sigtramp_code[] = { 0x97, 0xf0, 0x00, 0xad, 0x10, 0xf2, 0xf0, 0x00, }; @@ -135,7 +135,7 @@ static const unsigned char linux_rt_sigtramp_code[] = { static CORE_ADDR m32r_linux_rt_sigtramp_start (CORE_ADDR pc, struct frame_info *next_frame) { - unsigned char buf[4]; + gdb_byte buf[4]; /* We only recognize a signal trampoline if PC is at the start of one of the instructions. We optimize for finding the PC at the @@ -282,7 +282,7 @@ m32r_linux_sigtramp_frame_prev_register (struct frame_info *next_frame, int regnum, int *optimizedp, enum lval_type *lvalp, CORE_ADDR *addrp, - int *realnump, void *valuep) + int *realnump, gdb_byte *valuep) { struct m32r_frame_cache *cache = m32r_linux_sigtramp_frame_cache (next_frame, this_cache); diff --git a/gdb/m32r-tdep.c b/gdb/m32r-tdep.c index 26deea0..b978dfe 100644 --- a/gdb/m32r-tdep.c +++ b/gdb/m32r-tdep.c @@ -84,8 +84,8 @@ static int m32r_memory_insert_breakpoint (CORE_ADDR addr, bfd_byte *contents_cache) { int val; - char buf[4]; - char bp_entry[] = { 0x10, 0xf1 }; /* dpt */ + gdb_byte buf[4]; + gdb_byte bp_entry[] = { 0x10, 0xf1 }; /* dpt */ /* Save the memory contents. */ val = target_read_memory (addr & 0xfffffffc, contents_cache, 4); @@ -137,7 +137,7 @@ static int m32r_memory_remove_breakpoint (CORE_ADDR addr, bfd_byte *contents_cache) { int val; - char buf[4]; + gdb_byte buf[4]; buf[0] = contents_cache[0]; buf[1] = contents_cache[1]; @@ -161,12 +161,12 @@ m32r_memory_remove_breakpoint (CORE_ADDR addr, bfd_byte *contents_cache) return val; } -static const unsigned char * +static const gdb_byte * m32r_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr) { - static char be_bp_entry[] = { 0x10, 0xf1, 0x70, 0x00 }; /* dpt -> nop */ - static char le_bp_entry[] = { 0x00, 0x70, 0xf1, 0x10 }; /* dpt -> nop */ - unsigned char *bp; + static gdb_byte be_bp_entry[] = { 0x10, 0xf1, 0x70, 0x00 }; /* dpt -> nop */ + static gdb_byte le_bp_entry[] = { 0x00, 0x70, 0xf1, 0x10 }; /* dpt -> nop */ + gdb_byte *bp; /* Determine appropriate breakpoint. */ if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG) @@ -250,7 +250,7 @@ m32r_store_return_value (struct type *type, struct regcache *regcache, if (len > 4) { - regval = extract_unsigned_integer ((char *) valbuf + 4, len - 4); + regval = extract_unsigned_integer ((gdb_byte *) valbuf + 4, len - 4); regcache_cooked_write_unsigned (regcache, RET1_REGNUM + 1, regval); } } @@ -345,7 +345,7 @@ decode_prologue (CORE_ADDR start_pc, CORE_ADDR scan_limit, if ((insn >> 8) == 0x4f) /* addi sp, xx */ /* add 8 bit sign-extended offset */ { - int stack_adjust = (char) (insn & 0xff); + int stack_adjust = (gdb_byte) (insn & 0xff); /* there are probably two of these stack adjustments: 1) A negative one in the prologue, and @@ -574,7 +574,7 @@ m32r_frame_unwind_cache (struct frame_info *next_frame, else if ((op & 0xff00) == 0x4f00) { /* addi sp, xx */ - int n = (char) (op & 0xff); + int n = (gdb_byte) (op & 0xff); info->sp_offset += n; } else if (op == 0x1d8f) @@ -679,8 +679,8 @@ m32r_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct type *type; enum type_code typecode; CORE_ADDR regval; - char *val; - char valbuf[MAX_REGISTER_SIZE]; + gdb_byte *val; + gdb_byte valbuf[MAX_REGISTER_SIZE]; int len; int odd_sized_struct; @@ -726,11 +726,11 @@ m32r_push_dummy_call (struct gdbarch *gdbarch, struct value *function, { /* value gets right-justified in the register or stack word */ memcpy (valbuf + (register_size (gdbarch, argreg) - len), - (char *) value_contents (args[argnum]), len); + (gdb_byte *) value_contents (args[argnum]), len); val = valbuf; } else - val = (char *) value_contents (args[argnum]); + val = (gdb_byte *) value_contents (args[argnum]); while (len > 0) { @@ -791,8 +791,8 @@ m32r_extract_return_value (struct type *type, struct regcache *regcache, enum return_value_convention m32r_return_value (struct gdbarch *gdbarch, struct type *valtype, - struct regcache *regcache, void *readbuf, - const void *writebuf) + struct regcache *regcache, gdb_byte *readbuf, + const gdb_byte *writebuf) { if (TYPE_LENGTH (valtype) > 8) return RETURN_VALUE_STRUCT_CONVENTION; @@ -852,7 +852,7 @@ m32r_frame_prev_register (struct frame_info *next_frame, void **this_prologue_cache, int regnum, int *optimizedp, enum lval_type *lvalp, CORE_ADDR *addrp, - int *realnump, void *bufferp) + int *realnump, gdb_byte *bufferp) { struct m32r_unwind_cache *info = m32r_frame_unwind_cache (next_frame, this_prologue_cache); diff --git a/gdb/m68hc11-tdep.c b/gdb/m68hc11-tdep.c index ed4cac0..053e991 100644 --- a/gdb/m68hc11-tdep.c +++ b/gdb/m68hc11-tdep.c @@ -291,7 +291,7 @@ m68hc11_which_soft_register (CORE_ADDR addr) static void m68hc11_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, - int regno, void *buf) + int regno, gdb_byte *buf) { /* The PC is a pseudo reg only for 68HC12 with the memory bank addressing mode. */ @@ -332,7 +332,7 @@ m68hc11_pseudo_register_read (struct gdbarch *gdbarch, static void m68hc11_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, - int regno, const void *buf) + int regno, const gdb_byte *buf) { /* The PC is a pseudo reg only for 68HC12 with the memory bank addressing mode. */ @@ -706,7 +706,8 @@ m68hc11_scan_prologue (CORE_ADDR pc, CORE_ADDR current_pc, break; save_addr -= 2; - info->saved_regs[saved_reg].addr = save_addr; + if (info->saved_regs) + info->saved_regs[saved_reg].addr = save_addr; } else { @@ -905,7 +906,7 @@ m68hc11_frame_prev_register (struct frame_info *next_frame, void **this_prologue_cache, int regnum, int *optimizedp, enum lval_type *lvalp, CORE_ADDR *addrp, - int *realnump, void *bufferp) + int *realnump, gdb_byte *bufferp) { struct m68hc11_unwind_cache *info = m68hc11_frame_unwind_cache (next_frame, this_prologue_cache); @@ -1156,12 +1157,6 @@ m68hc11_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file, } static CORE_ADDR -m68hc11_stack_align (CORE_ADDR addr) -{ - return ((addr + 1) & -2); -} - -static CORE_ADDR m68hc11_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, @@ -1177,11 +1172,7 @@ m68hc11_push_dummy_call (struct gdbarch *gdbarch, struct value *function, first_stack_argnum = 0; if (struct_return) { - /* The struct is allocated on the stack and gdb used the stack - pointer for the address of that struct. We must apply the - stack offset on the address. */ - regcache_cooked_write_unsigned (regcache, HARD_D_REGNUM, - struct_addr + STACK_CORRECTION); + regcache_cooked_write_unsigned (regcache, HARD_D_REGNUM, struct_addr); } else if (nargs > 0) { @@ -1324,8 +1315,8 @@ m68hc11_extract_return_value (struct type *type, struct regcache *regcache, enum return_value_convention m68hc11_return_value (struct gdbarch *gdbarch, struct type *valtype, - struct regcache *regcache, void *readbuf, - const void *writebuf) + struct regcache *regcache, gdb_byte *readbuf, + const gdb_byte *writebuf) { if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT || TYPE_CODE (valtype) == TYPE_CODE_UNION @@ -1526,7 +1517,6 @@ m68hc11_gdbarch_init (struct gdbarch_info info, set_gdbarch_skip_prologue (gdbarch, m68hc11_skip_prologue); set_gdbarch_inner_than (gdbarch, core_addr_lessthan); set_gdbarch_breakpoint_from_pc (gdbarch, m68hc11_breakpoint_from_pc); - set_gdbarch_deprecated_stack_align (gdbarch, m68hc11_stack_align); set_gdbarch_print_insn (gdbarch, gdb_print_insn_m68hc11); m68hc11_add_reggroups (gdbarch); @@ -76,6 +76,12 @@ struct ui_file *gdb_stdtargerr; /* Support for the --batch-silent option. */ int batch_silent = 0; +/* Support for --return-child-result option. + Set the default to -1 to return error in the case + that the program does not run or does not complete. */ +int return_child_result = 0; +int return_child_result_value = -1; + /* Whether to enable writing into executable and core files */ extern int write_files; @@ -132,7 +138,13 @@ captured_main (void *data) static int print_version; /* Pointers to all arguments of --command option. */ - char **cmdarg; + struct cmdarg { + enum { + CMDARG_FILE, + CMDARG_COMMAND + } type; + char *string; + } *cmdarg; /* Allocated size of cmdarg. */ int cmdsize; /* Number of elements of cmdarg used. */ @@ -172,7 +184,7 @@ captured_main (void *data) #endif cmdsize = 1; - cmdarg = (char **) xmalloc (cmdsize * sizeof (*cmdarg)); + cmdarg = (struct cmdarg *) xmalloc (cmdsize * sizeof (*cmdarg)); ncmd = 0; dirsize = 1; dirarg = (char **) xmalloc (dirsize * sizeof (*dirarg)); @@ -279,8 +291,10 @@ captured_main (void *data) {"pid", required_argument, 0, 'p'}, {"p", required_argument, 0, 'p'}, {"command", required_argument, 0, 'x'}, + {"eval-command", required_argument, 0, 'X'}, {"version", no_argument, &print_version, 1}, {"x", required_argument, 0, 'x'}, + {"ex", required_argument, 0, 'X'}, #ifdef GDBTK {"tclcommand", required_argument, 0, 'z'}, {"enable-external-editor", no_argument, 0, 'y'}, @@ -303,6 +317,7 @@ captured_main (void *data) {"write", no_argument, &write_files, 1}, {"args", no_argument, &set_args, 1}, {"l", required_argument, 0, 'l'}, + {"return-child-result", no_argument, &return_child_result, 1}, {0, no_argument, 0, 0} }; @@ -343,11 +358,16 @@ captured_main (void *data) case OPT_TUI: /* --tui is equivalent to -i=tui. */ xfree (interpreter_p); - interpreter_p = xstrdup ("tui"); + interpreter_p = xstrdup (INTERP_TUI); break; case OPT_WINDOWS: /* FIXME: cagney/2003-03-01: Not sure if this option is actually useful, and if it is, what it should do. */ +#ifdef GDBTK + /* --windows is equivalent to -i=insight. */ + xfree (interpreter_p); + interpreter_p = xstrdup (INTERP_INSIGHT); +#endif use_windows = 1; break; case OPT_NOWINDOWS: @@ -375,12 +395,23 @@ captured_main (void *data) corearg = optarg; break; case 'x': - cmdarg[ncmd++] = optarg; + cmdarg[ncmd].type = CMDARG_FILE; + cmdarg[ncmd++].string = optarg; if (ncmd >= cmdsize) { cmdsize *= 2; - cmdarg = (char **) xrealloc ((char *) cmdarg, - cmdsize * sizeof (*cmdarg)); + cmdarg = xrealloc ((char *) cmdarg, + cmdsize * sizeof (*cmdarg)); + } + break; + case 'X': + cmdarg[ncmd].type = CMDARG_COMMAND; + cmdarg[ncmd++].string = optarg; + if (ncmd >= cmdsize) + { + cmdsize *= 2; + cmdarg = xrealloc ((char *) cmdarg, + cmdsize * sizeof (*cmdarg)); } break; case 'B': @@ -721,7 +752,12 @@ extern int gdbtk_test (char *); do_cleanups (ALL_CLEANUPS); } #endif - catch_command_errors (source_command, cmdarg[i], !batch, RETURN_MASK_ALL); + if (cmdarg[i].type == CMDARG_FILE) + catch_command_errors (source_command, cmdarg[i].string, + !batch, RETURN_MASK_ALL); + else /* cmdarg[i].type == CMDARG_COMMAND */ + catch_command_errors (execute_command, cmdarg[i].string, + !batch, RETURN_MASK_ALL); } xfree (cmdarg); @@ -730,15 +766,8 @@ extern int gdbtk_test (char *); if (batch) { - if (attach_flag) - /* Either there was a problem executing the command in the - batch file aborted early, or the batch file forgot to do an - explicit detach. Explicitly detach the inferior ensuring - that there are no zombies. */ - target_detach (NULL, 0); - /* We have hit the end of the batch file. */ - exit (0); + quit_force (NULL, 0); } /* Do any host- or target-specific hacks. This is used for i960 targets @@ -838,8 +867,14 @@ Options:\n\n\ -b BAUDRATE Set serial port baud rate used for remote debugging.\n\ --batch Exit after processing options.\n\ --batch-silent As for --batch, but suppress all gdb stdout output.\n\ + --return-child-result\n\ + GDB exit code will be the child's exit code.\n\ --cd=DIR Change current directory to DIR.\n\ - --command=FILE Execute GDB commands from FILE.\n\ + --command=FILE, -x Execute GDB commands from FILE.\n\ + --eval-command=COMMAND, -ex\n\ + Execute a single GDB command.\n\ + May be used multiple times and in conjunction\n\ + with --command.\n\ --core=COREFILE Analyze the core dump COREFILE.\n\ --pid=PID Attach to running process PID.\n\ "), stream); @@ -32,4 +32,8 @@ struct captured_main_args extern int gdb_main (struct captured_main_args *); +/* From main.c. */ +extern int return_child_result; +extern int return_child_result_value; + #endif diff --git a/gdb/monitor.c b/gdb/monitor.c index c805eb4..fe856c0 100644 --- a/gdb/monitor.c +++ b/gdb/monitor.c @@ -80,13 +80,13 @@ static ptid_t monitor_wait (ptid_t ptid, struct target_waitstatus *status); static void monitor_fetch_registers (int regno); static void monitor_store_registers (int regno); static void monitor_prepare_to_store (void); -static int monitor_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, +static int monitor_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write, struct mem_attrib *attrib, struct target_ops *target); static void monitor_files_info (struct target_ops *ops); -static int monitor_insert_breakpoint (CORE_ADDR addr, char *shadow); -static int monitor_remove_breakpoint (CORE_ADDR addr, char *shadow); +static int monitor_insert_breakpoint (CORE_ADDR addr, gdb_byte *shadow); +static int monitor_remove_breakpoint (CORE_ADDR addr, gdb_byte *shadow); static void monitor_kill (void); static void monitor_load (char *file, int from_tty); static void monitor_mourn_inferior (void); @@ -1982,7 +1982,7 @@ monitor_read_memory (CORE_ADDR memaddr, char *myaddr, int len) unused. */ static int -monitor_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write, +monitor_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write, struct mem_attrib *attrib, struct target_ops *target) { int res; @@ -2038,7 +2038,7 @@ monitor_mourn_inferior (void) /* Tell the monitor to add a breakpoint. */ static int -monitor_insert_breakpoint (CORE_ADDR addr, char *shadow) +monitor_insert_breakpoint (CORE_ADDR addr, gdb_byte *shadow) { int i; const unsigned char *bp; @@ -2072,7 +2072,7 @@ monitor_insert_breakpoint (CORE_ADDR addr, char *shadow) /* Tell the monitor to remove a breakpoint. */ static int -monitor_remove_breakpoint (CORE_ADDR addr, char *shadow) +monitor_remove_breakpoint (CORE_ADDR addr, gdb_byte *shadow) { int i; diff --git a/gdb/ppc-sysv-tdep.c b/gdb/ppc-sysv-tdep.c index 4285077..ea3b1c7 100644 --- a/gdb/ppc-sysv-tdep.c +++ b/gdb/ppc-sysv-tdep.c @@ -906,11 +906,11 @@ ppc64_sysv_abi_return_value (struct gdbarch *gdbarch, struct type *valtype, } return RETURN_VALUE_REGISTER_CONVENTION; } + /* Integers in r3. */ if ((TYPE_CODE (valtype) == TYPE_CODE_INT || TYPE_CODE (valtype) == TYPE_CODE_ENUM) && TYPE_LENGTH (valtype) <= 8) { - /* Integers in r3. */ if (writebuf != NULL) { /* Be careful to sign extend the value. */ @@ -938,24 +938,37 @@ ppc64_sysv_abi_return_value (struct gdbarch *gdbarch, struct type *valtype, regcache_cooked_read (regcache, tdep->ppc_gp0_regnum + 3, readbuf); return RETURN_VALUE_REGISTER_CONVENTION; } - if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY - && TYPE_LENGTH (valtype) <= 8 - && TYPE_CODE (TYPE_TARGET_TYPE (valtype)) == TYPE_CODE_INT - && TYPE_LENGTH (TYPE_TARGET_TYPE (valtype)) == 1) + /* Array type has more than one use. */ + if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY) { /* Small character arrays are returned, right justified, in r3. */ - int offset = (register_size (gdbarch, tdep->ppc_gp0_regnum + 3) - - TYPE_LENGTH (valtype)); - if (writebuf != NULL) - regcache_cooked_write_part (regcache, tdep->ppc_gp0_regnum + 3, - offset, TYPE_LENGTH (valtype), writebuf); - if (readbuf != NULL) - regcache_cooked_read_part (regcache, tdep->ppc_gp0_regnum + 3, - offset, TYPE_LENGTH (valtype), readbuf); - return RETURN_VALUE_REGISTER_CONVENTION; + if (TYPE_LENGTH (valtype) <= 8 + && TYPE_CODE (TYPE_TARGET_TYPE (valtype)) == TYPE_CODE_INT + && TYPE_LENGTH (TYPE_TARGET_TYPE (valtype)) == 1) + { + int offset = (register_size (gdbarch, tdep->ppc_gp0_regnum + 3) + - TYPE_LENGTH (valtype)); + if (writebuf != NULL) + regcache_cooked_write_part (regcache, tdep->ppc_gp0_regnum + 3, + offset, TYPE_LENGTH (valtype), writebuf); + if (readbuf != NULL) + regcache_cooked_read_part (regcache, tdep->ppc_gp0_regnum + 3, + offset, TYPE_LENGTH (valtype), readbuf); + return RETURN_VALUE_REGISTER_CONVENTION; + } + /* A VMX vector is returned in v2. */ + if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY + && TYPE_VECTOR (valtype) && tdep->ppc_vr0_regnum >= 0) + { + if (readbuf) + regcache_cooked_read (regcache, tdep->ppc_vr0_regnum + 2, readbuf); + if (writebuf) + regcache_cooked_write (regcache, tdep->ppc_vr0_regnum + 2, writebuf); + return RETURN_VALUE_REGISTER_CONVENTION; + } } /* Big floating point values get stored in adjacent floating - point registers. */ + point registers, starting with F1. */ if (TYPE_CODE (valtype) == TYPE_CODE_FLT && (TYPE_LENGTH (valtype) == 16 || TYPE_LENGTH (valtype) == 32)) { diff --git a/gdb/remote-e7000.c b/gdb/remote-e7000.c index 76a245c..aa430e6 100644 --- a/gdb/remote-e7000.c +++ b/gdb/remote-e7000.c @@ -1478,7 +1478,7 @@ fast_but_for_the_pause_e7000_read_inferior_memory (CORE_ADDR memaddr, Returns the number of bytes transferred. */ static int -e7000_xfer_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len, +e7000_xfer_inferior_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write, struct mem_attrib *attrib, struct target_ops *target) { diff --git a/gdb/remote-m32r-sdi.c b/gdb/remote-m32r-sdi.c index 9471c11..41644d0 100644 --- a/gdb/remote-m32r-sdi.c +++ b/gdb/remote-m32r-sdi.c @@ -1,6 +1,6 @@ /* Remote debugging interface for M32R/SDI. - Copyright 2003, 2004 Free Software Foundation, Inc. + Copyright 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Renesas Technology Co. Written by Kei Sakamoto <sakamoto.kei@renesas.com>. @@ -534,7 +534,7 @@ m32r_resume (ptid_t ptid, int step, enum target_signal sig) /* Write DBT instruction. */ buf[0] = SDI_WRITE_MEMORY; - store_long_parameter (buf + 1, bp_addr); + store_long_parameter (buf + 1, (bp_addr & 0xfffffffc)); store_long_parameter (buf + 5, 4); if ((bp_addr & 2) == 0 && bp_addr != (pc_addr & 0xfffffffc)) { @@ -810,7 +810,7 @@ m32r_wait (ptid_t ptid, struct target_waitstatus *status) { if (!mmu_on) bp_addr &= 0x7fffffff; - buf[0] = SDI_READ_MEMORY; + buf[0] = SDI_WRITE_MEMORY; store_long_parameter (buf + 1, bp_addr & 0xfffffffc); store_long_parameter (buf + 5, 4); buf[9] = bp_data[i][0]; @@ -1032,7 +1032,7 @@ m32r_files_info (struct target_ops *target) /* Read/Write memory. */ static int -m32r_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, +m32r_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write, struct mem_attrib *attrib, struct target_ops *target) { diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c index 15e89e9..30fcf2f 100644 --- a/gdb/sh-tdep.c +++ b/gdb/sh-tdep.c @@ -1285,7 +1285,7 @@ sh_store_return_value_fpu (struct type *type, struct regcache *regcache, static enum return_value_convention sh_return_value_nofpu (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, - void *readbuf, const void *writebuf) + gdb_byte *readbuf, const gdb_byte *writebuf) { if (sh_use_struct_convention (0, type)) return RETURN_VALUE_STRUCT_CONVENTION; @@ -1299,7 +1299,7 @@ sh_return_value_nofpu (struct gdbarch *gdbarch, struct type *type, static enum return_value_convention sh_return_value_fpu (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, - void *readbuf, const void *writebuf) + gdb_byte *readbuf, const gdb_byte *writebuf) { if (sh_use_struct_convention (0, type)) return RETURN_VALUE_STRUCT_CONVENTION; @@ -1890,7 +1890,7 @@ dr_reg_base_num (int dr_regnum) static void sh_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, - int reg_nr, void *buffer) + int reg_nr, gdb_byte *buffer) { int base_regnum, portion; char temp_buffer[MAX_REGISTER_SIZE]; @@ -1929,7 +1929,7 @@ sh_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, static void sh_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, - int reg_nr, const void *buffer) + int reg_nr, const gdb_byte *buffer) { int base_regnum, portion; char temp_buffer[MAX_REGISTER_SIZE]; @@ -2282,7 +2282,7 @@ static void sh_frame_prev_register (struct frame_info *next_frame, void **this_cache, int regnum, int *optimizedp, enum lval_type *lvalp, CORE_ADDR *addrp, - int *realnump, void *valuep) + int *realnump, gdb_byte *valuep) { struct sh_frame_cache *cache = sh_frame_cache (next_frame, this_cache); diff --git a/gdb/sh64-tdep.c b/gdb/sh64-tdep.c index 7f5aa90..1de8764 100644 --- a/gdb/sh64-tdep.c +++ b/gdb/sh64-tdep.c @@ -1228,9 +1228,9 @@ sh64_extract_return_value (struct type *type, struct regcache *regcache, { /* return value stored in DR0_REGNUM */ DOUBLEST val; - char buf[8]; + gdb_byte buf[8]; - regcache_cooked_read (regcache, DR0_REGNUM, &buf); + regcache_cooked_read (regcache, DR0_REGNUM, buf); if (TARGET_BYTE_ORDER == BFD_ENDIAN_LITTLE) floatformat_to_doublest (&floatformat_ieee_double_littlebyte_bigword, @@ -1313,7 +1313,7 @@ sh64_store_return_value (struct type *type, struct regcache *regcache, static enum return_value_convention sh64_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, - void *readbuf, const void *writebuf) + gdb_byte *readbuf, const gdb_byte *writebuf) { if (sh64_use_struct_convention (type)) return RETURN_VALUE_STRUCT_CONVENTION; @@ -1575,7 +1575,7 @@ sh64_register_convert_to_raw (struct type *type, int regnum, static void sh64_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, - int reg_nr, void *buffer) + int reg_nr, gdb_byte *buffer) { int base_regnum; int portion; @@ -1744,7 +1744,7 @@ sh64_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, static void sh64_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, - int reg_nr, const void *buffer) + int reg_nr, const gdb_byte *buffer) { int base_regnum, portion; int offset; @@ -2290,7 +2290,7 @@ static void sh64_frame_prev_register (struct frame_info *next_frame, void **this_cache, int regnum, int *optimizedp, enum lval_type *lvalp, CORE_ADDR *addrp, - int *realnump, void *valuep) + int *realnump, gdb_byte *valuep) { struct sh64_frame_cache *cache = sh64_frame_cache (next_frame, this_cache); diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c index 48be77d..09b4c62 100644 --- a/gdb/solib-frv.c +++ b/gdb/solib-frv.c @@ -44,9 +44,9 @@ enum { FRV_PTR_SIZE = 4 }; /* External versions; the size and alignment of the fields should be the same as those on the target. When loaded, the placement of the bits in each field will be the same as on the target. */ -typedef unsigned char ext_Elf32_Half[2]; -typedef unsigned char ext_Elf32_Addr[4]; -typedef unsigned char ext_Elf32_Word[4]; +typedef gdb_byte ext_Elf32_Half[2]; +typedef gdb_byte ext_Elf32_Addr[4]; +typedef gdb_byte ext_Elf32_Word[4]; struct ext_elf32_fdpic_loadseg { @@ -105,7 +105,7 @@ fetch_loadmap (CORE_ADDR ldmaddr) int version, seg, nsegs; /* Fetch initial portion of the loadmap. */ - if (target_read_memory (ldmaddr, (char *) &ext_ldmbuf_partial, + if (target_read_memory (ldmaddr, (gdb_byte *) &ext_ldmbuf_partial, sizeof ext_ldmbuf_partial)) { /* Problem reading the target's memory. */ @@ -113,7 +113,7 @@ fetch_loadmap (CORE_ADDR ldmaddr) } /* Extract the version. */ - version = extract_unsigned_integer (&ext_ldmbuf_partial.version, + version = extract_unsigned_integer (ext_ldmbuf_partial.version, sizeof ext_ldmbuf_partial.version); if (version != 0) { @@ -122,7 +122,7 @@ fetch_loadmap (CORE_ADDR ldmaddr) } /* Extract the number of segments. */ - nsegs = extract_unsigned_integer (&ext_ldmbuf_partial.nsegs, + nsegs = extract_unsigned_integer (ext_ldmbuf_partial.nsegs, sizeof ext_ldmbuf_partial.nsegs); /* Allocate space for the complete (external) loadmap. */ @@ -135,7 +135,7 @@ fetch_loadmap (CORE_ADDR ldmaddr) /* Read the rest of the loadmap from the target. */ if (target_read_memory (ldmaddr + sizeof ext_ldmbuf_partial, - (char *) ext_ldmbuf + sizeof ext_ldmbuf_partial, + (gdb_byte *) ext_ldmbuf + sizeof ext_ldmbuf_partial, ext_ldmbuf_size - sizeof ext_ldmbuf_partial)) { /* Couldn't read rest of the loadmap. */ @@ -155,13 +155,13 @@ fetch_loadmap (CORE_ADDR ldmaddr) for (seg = 0; seg < nsegs; seg++) { int_ldmbuf->segs[seg].addr - = extract_unsigned_integer (&ext_ldmbuf->segs[seg].addr, + = extract_unsigned_integer (ext_ldmbuf->segs[seg].addr, sizeof (ext_ldmbuf->segs[seg].addr)); int_ldmbuf->segs[seg].p_vaddr - = extract_unsigned_integer (&ext_ldmbuf->segs[seg].p_vaddr, + = extract_unsigned_integer (ext_ldmbuf->segs[seg].p_vaddr, sizeof (ext_ldmbuf->segs[seg].p_vaddr)); int_ldmbuf->segs[seg].p_memsz - = extract_unsigned_integer (&ext_ldmbuf->segs[seg].p_memsz, + = extract_unsigned_integer (ext_ldmbuf->segs[seg].p_memsz, sizeof (ext_ldmbuf->segs[seg].p_memsz)); } @@ -171,7 +171,7 @@ fetch_loadmap (CORE_ADDR ldmaddr) /* External link_map and elf32_fdpic_loadaddr struct definitions. */ -typedef unsigned char ext_ptr[4]; +typedef gdb_byte ext_ptr[4]; struct ext_elf32_fdpic_loadaddr { @@ -359,7 +359,7 @@ lm_base (void) { struct minimal_symbol *got_sym; CORE_ADDR addr; - char buf[FRV_PTR_SIZE]; + gdb_byte buf[FRV_PTR_SIZE]; /* If we already have a cached value, return it. */ if (lm_base_cache) @@ -438,14 +438,14 @@ frv_current_sos (void) "current_sos: reading link_map entry at %s\n", hex_string_custom (lm_addr, 8)); - if (target_read_memory (lm_addr, (char *) &lm_buf, sizeof (lm_buf)) != 0) + if (target_read_memory (lm_addr, (gdb_byte *) &lm_buf, sizeof (lm_buf)) != 0) { warning (_("frv_current_sos: Unable to read link map entry. Shared object chain may be incomplete.")); break; } got_addr - = extract_unsigned_integer (&lm_buf.l_addr.got_value, + = extract_unsigned_integer (lm_buf.l_addr.got_value, sizeof (lm_buf.l_addr.got_value)); /* If the got_addr is the same as mgotr, then we're looking at the entry for the main executable. By convention, we don't include @@ -459,7 +459,7 @@ frv_current_sos (void) CORE_ADDR addr; /* Fetch the load map address. */ - addr = extract_unsigned_integer (&lm_buf.l_addr.map, + addr = extract_unsigned_integer (lm_buf.l_addr.map, sizeof lm_buf.l_addr.map); loadmap = fetch_loadmap (addr); if (loadmap == NULL) @@ -474,7 +474,7 @@ frv_current_sos (void) sop->lm_info->got_value = got_addr; sop->lm_info->lm_addr = lm_addr; /* Fetch the name. */ - addr = extract_unsigned_integer (&lm_buf.l_name, + addr = extract_unsigned_integer (lm_buf.l_name, sizeof (lm_buf.l_name)); target_read_string (addr, &name_buf, SO_NAME_MAX_PATH_SIZE - 1, &errcode); @@ -502,7 +502,7 @@ frv_current_sos (void) main_lm_addr = lm_addr; } - lm_addr = extract_unsigned_integer (&lm_buf.l_next, sizeof (lm_buf.l_next)); + lm_addr = extract_unsigned_integer (lm_buf.l_next, sizeof (lm_buf.l_next)); } enable_break2 (); @@ -621,13 +621,13 @@ enable_break2 (void) if (interp_sect) { unsigned int interp_sect_size; - char *buf; + gdb_byte *buf; bfd *tmp_bfd = NULL; int tmp_fd = -1; char *tmp_pathname = NULL; int status; CORE_ADDR addr, interp_loadmap_addr; - char addr_buf[FRV_PTR_SIZE]; + gdb_byte addr_buf[FRV_PTR_SIZE]; struct int_elf32_fdpic_loadmap *ldm; /* Read the contents of the .interp section into a local buffer; @@ -1185,7 +1185,7 @@ find_canonical_descriptor_in_load_object if ((name == 0 || strcmp (name, (*rel->sym_ptr_ptr)->name) == 0) && rel->howto->type == R_FRV_FUNCDESC) { - char buf[FRV_PTR_SIZE]; + gdb_byte buf [FRV_PTR_SIZE]; /* Compute address of address of candidate descriptor. */ addr = rel->address + displacement_from_map (lm->map, rel->address); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c4aad69..bf009b4 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,28 @@ +2005-11-11 Stephane Carrez <stcarrez@nerim.fr> + + * gdb.asm/m68hc11.inc: Setup the data section. + * gdb.asm/asm-source.exp (m6811-*-*): Don't use the target board linker + script for this test. + (m6812-*-*): Likewise. + +2005-11-09 Randolph Chung <tausq@debian.org> + + * gdb.base/structs2.exp: Update xfail to only trigger for gcc-3.x. + +2005-11-09 Wu Zhou <woodzltc@cn.ibm.com> + + * gdb.base/break.exp: Fix a comment typo. + +2005-11-03 Jim Blandy <jimb@redhat.com> + + Checked in by Elena Zannoni <ezannoni@redhat.com> + + * gdb.dwarf2/mac-fileno.exp, gdb.dwarf2/mac-fileno.S: New tests. + +2005-11-02 Corinna Vinschen <vinschen@redhat.com> + + * gdb.arch/gdb1558.c: Include stdio.h. + 2005-10-31 Mark Kettenis <kettenis@gnu.org> * gdb.asm/asm-source.exp: Use -e instead of --entry. diff --git a/gdb/testsuite/gdb.ada/array_return/p.adb b/gdb/testsuite/gdb.ada/array_return/p.adb deleted file mode 100644 index c465d28..0000000 --- a/gdb/testsuite/gdb.ada/array_return/p.adb +++ /dev/null @@ -1,10 +0,0 @@ -with Pck; use Pck; - -procedure P is - Small : Data_Small; - Large : Data_Large; -begin - Small := Create_Small; - Large := Create_Large; - Small (1) := Large (1); -end P; diff --git a/gdb/testsuite/gdb.ada/array_return/pck.adb b/gdb/testsuite/gdb.ada/array_return/pck.adb deleted file mode 100644 index 30282d1..0000000 --- a/gdb/testsuite/gdb.ada/array_return/pck.adb +++ /dev/null @@ -1,13 +0,0 @@ -package body Pck is - - function Create_Small return Data_Small is - begin - return (others => 1); - end Create_Small; - - function Create_Large return Data_Large is - begin - return (others => 2); - end Create_Large; - -end Pck; diff --git a/gdb/testsuite/gdb.ada/array_return/pck.ads b/gdb/testsuite/gdb.ada/array_return/pck.ads deleted file mode 100644 index 2561ac7..0000000 --- a/gdb/testsuite/gdb.ada/array_return/pck.ads +++ /dev/null @@ -1,10 +0,0 @@ -package Pck is - - type Data_Small is array (1 .. 2) of Integer; - type Data_Large is array (1 .. 4) of Integer; - - function Create_Small return Data_Small; - function Create_Large return Data_Large; - -end Pck; - diff --git a/gdb/testsuite/gdb.ada/arrayidx/p.adb b/gdb/testsuite/gdb.ada/arrayidx/p.adb deleted file mode 100644 index 398e34d..0000000 --- a/gdb/testsuite/gdb.ada/arrayidx/p.adb +++ /dev/null @@ -1,56 +0,0 @@ --- Copyright 2005 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., 51 Franklin Street, Fifth Floor, Boston, --- MA 02110-1301, USA - -procedure P is - type Index is (One, Two, Three); - - type Table is array (Integer range 1 .. 3) of Integer; - type ETable is array (Index) of Integer; - type RTable is array (Index range Two .. Three) of Integer; - type UTable is array (Positive range <>) of Integer; - - type PTable is array (Index) of Boolean; - pragma Pack (PTable); - - function Get_UTable (I : Integer) return UTable is - begin - return Utable'(1 => I, 2 => 2, 3 => 3); - end Get_UTable; - - One_Two_Three : Table := (1, 2, 3); - E_One_Two_Three : ETable := (1, 2, 3); - R_Two_Three : RTable := (2, 3); - U_One_Two_Three : UTable := Get_UTable (1); - P_One_Two_Three : PTable := (False, True, True); - - Few_Reps : UTable := (1, 2, 3, 3, 3, 3, 3, 4, 5); - Many_Reps : UTable := (1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5); - - Empty : array (1 .. 0) of Integer := (others => 0); - -begin - One_Two_Three (1) := 4; -- START - E_One_Two_Three (One) := 4; - R_Two_Three (Two) := 4; - U_One_Two_Three (U_One_Two_Three'First) := 4; - P_One_Two_Three (One) := True; - - Few_Reps (Few_Reps'First) := 2; - Many_Reps (Many_Reps'First) := 2; - - Empty := (others => 1); -end P; diff --git a/gdb/testsuite/gdb.arch/gdb1558.c b/gdb/testsuite/gdb.arch/gdb1558.c index d1051cf..fc13be1 100644 --- a/gdb/testsuite/gdb.arch/gdb1558.c +++ b/gdb/testsuite/gdb.arch/gdb1558.c @@ -1,4 +1,4 @@ -/* Copyright 2004 Free Software Foundation, Inc. +/* Copyright 2004, 2005 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 @@ -19,6 +19,8 @@ This file is part of the gdb testsuite. */ +#include <stdio.h> + sub1 () { printf ("In sub1\n"); diff --git a/gdb/testsuite/gdb.asm/asm-source.exp b/gdb/testsuite/gdb.asm/asm-source.exp index 5abe8ee..ced0af7 100644 --- a/gdb/testsuite/gdb.asm/asm-source.exp +++ b/gdb/testsuite/gdb.asm/asm-source.exp @@ -80,11 +80,25 @@ switch -glob -- [istarget] { } "m6811-*-*" { set asm-arch m68hc11 - set asm-flags "-mshort-double -m68hc11 -gdwarf-2 --no-warn -I${srcdir}/${subdir} -I${objdir}/${subdir}" + set asm-flags "-mshort-double -m68hc11 --no-warn -I${srcdir}/${subdir} -I${objdir}/${subdir}" + set debug-flags "-gdwarf-2" + # This asm test is specific and uses the linker directly. + # We must not use the target board linker script defined for other + # tests. Remove it and restore it later on. + set board [target_info name] + set old_ldscript [board_info $board ldscript] + unset_board_info "ldscript" } "m6812-*-*" { set asm-arch m68hc11 - set asm-flags "-mshort-double -m68hc12 -gdwarf-2 --no-warn -I${srcdir}/${subdir} -I${objdir}/${subdir}" + set asm-flags "-mshort-double -m68hc12 --no-warn -I${srcdir}/${subdir} -I${objdir}/${subdir}" + set debug-flags "-gdwarf-2" + # This asm test is specific and uses the linker directly. + # We must not use the target board linker script defined for other + # tests. Remove it and restore it later on. + set board [target_info name] + set old_ldscript [board_info $board ldscript] + set_board_info ldscript "" } "mips*-*" { set asm-arch mips @@ -226,6 +240,11 @@ if {[target_link "asmsrc1.o asmsrc2.o" "${binfile}" ${link-flags}] != "" } then gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." } +# Restore the target board linker script for HC11/HC12. +if { [istarget "m6811-*-*"] || [istarget "m6812-*-*"] } { + set_board_info ldscript $old_ldscript +} + remote_exec build "mv asmsrc1.o asmsrc2.o ${objdir}/${subdir}" diff --git a/gdb/testsuite/gdb.asm/m68hc11.inc b/gdb/testsuite/gdb.asm/m68hc11.inc index 820908b..e8f5018 100644 --- a/gdb/testsuite/gdb.asm/m68hc11.inc +++ b/gdb/testsuite/gdb.asm/m68hc11.inc @@ -37,6 +37,22 @@ _.frame: .word 0 .previous lds #0x2000 + ; the linker script maps the data section in ROM (LMA) for its initial + ; content and in RAM (VMA) for its runtime value. We have to do + ; what the default crt0 does: copy the ROM part in RAM. + ; (otherwise any 'globalvar' appears uninitialized) + ldx #__data_image + ldy #__data_section_start + bra Start_map +Loop: + ldaa 0,x + staa 0,y + inx + iny +Start_map: + cpx #__data_image_end + blo Loop +Done: clr _.frame clr _.frame+1 .endm @@ -46,5 +62,5 @@ _.frame: .word 0 .macro gdbasm_datavar name value .data \name: - .long \value + .word \value .endm diff --git a/gdb/testsuite/gdb.base/break.exp b/gdb/testsuite/gdb.base/break.exp index c425d14..bcbdd1e 100644 --- a/gdb/testsuite/gdb.base/break.exp +++ b/gdb/testsuite/gdb.base/break.exp @@ -67,7 +67,7 @@ if [target_info exists gdb_stub] { # Test deleting all breakpoints when there are none installed, # GDB should not prompt for confirmation. -# Note that gdb-init.exp provides a "delete_breakpoints" proc +# Note that lib/gdb.exp provides a "delete_breakpoints" proc # for general use elsewhere. send_gdb "delete breakpoints\n" diff --git a/gdb/testsuite/gdb.base/structs2.exp b/gdb/testsuite/gdb.base/structs2.exp index e7f6553..7f96a22 100644 --- a/gdb/testsuite/gdb.base/structs2.exp +++ b/gdb/testsuite/gdb.base/structs2.exp @@ -70,14 +70,14 @@ gdb_test "break param_reg" \ "Breakpoint .* at .*" \ "structs2 breakpoint set" -if [test_compiler_info gcc-*-*] { +if [test_compiler_info gcc-3-*] { setup_xfail hppa*-* gcc/15860 } gdb_test "continue" \ ".*pr_char=120.*pr_uchar=130.*pr_short=32000.*pr_ushort=33000.*bkpt = 1.*" \ "structs2 continue1" -if [test_compiler_info gcc-*-*] { +if [test_compiler_info gcc-3-*] { setup_xfail hppa*-* gcc/15860 } gdb_test "continue" \ diff --git a/gdb/thread.c b/gdb/thread.c index 1f88acb..19e9a2c 100644 --- a/gdb/thread.c +++ b/gdb/thread.c @@ -691,7 +691,7 @@ The new thread ID must be currently known."), add_prefix_cmd ("apply", class_run, thread_apply_command, _("Apply a command to a list of threads."), - &thread_apply_list, "apply ", 1, &thread_cmd_list); + &thread_apply_list, "thread apply ", 1, &thread_cmd_list); add_cmd ("all", class_run, thread_apply_all_command, _("Apply a command to all threads."), &thread_apply_list); @@ -46,6 +46,7 @@ #include "serial.h" #include "doublest.h" #include "gdb_assert.h" +#include "main.h" /* readline include files */ #include "readline/readline.h" @@ -1186,6 +1187,8 @@ quit_force (char *args, int from_tty) exit_code = (int) value_as_long (val); } + else if (return_child_result) + exit_code = return_child_result_value; qt.args = args; qt.from_tty = from_tty; diff --git a/gdb/tui/tui-command.c b/gdb/tui/tui-command.c index 7f3fc75..cf8f263 100644 --- a/gdb/tui/tui-command.c +++ b/gdb/tui/tui-command.c @@ -1,6 +1,6 @@ /* Specific command window processing. - Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -48,13 +48,14 @@ unsigned int tui_dispatch_ctrl_char (unsigned int ch) { struct tui_win_info *win_info = tui_win_with_focus (); - WINDOW *w = TUI_CMD_WIN->generic.handle; - /* - ** If the command window has the logical focus, or no-one does - ** assume it is the command window; in this case, pass the - ** character on through and do nothing here. - */ + /* Handle the CTRL-L refresh for each window. */ + if (ch == '\f') + tui_refresh_all_win (); + + /* If the command window has the logical focus, or no-one does + assume it is the command window; in this case, pass the + character on through and do nothing here. */ if (win_info == NULL || win_info == TUI_CMD_WIN) return ch; else @@ -76,6 +77,7 @@ tui_dispatch_ctrl_char (unsigned int ch) { unsigned int page_ch = 0; unsigned int tmp_char; + WINDOW *w = TUI_CMD_WIN->generic.handle; tmp_char = 0; while (!key_is_end_sequence (tmp_char)) @@ -123,8 +125,7 @@ tui_dispatch_ctrl_char (unsigned int ch) tui_scroll_right (win_info, 1); break; case '\f': - tui_refresh_all_win (); - break; + break; default: c = ch_copy; break; diff --git a/gdb/tui/tui-interp.c b/gdb/tui/tui-interp.c index 17dda51..aeb2047 100644 --- a/gdb/tui/tui-interp.c +++ b/gdb/tui/tui-interp.c @@ -199,13 +199,13 @@ _initialize_tui_interp (void) /* Create a default uiout builder for the TUI. */ tui_out = tui_out_new (gdb_stdout); - interp_add (interp_new ("tui", NULL, tui_out, &procs)); - if (interpreter_p && strcmp (interpreter_p, "tui") == 0) + interp_add (interp_new (INTERP_TUI, NULL, tui_out, &procs)); + if (interpreter_p && strcmp (interpreter_p, INTERP_TUI) == 0) tui_start_enabled = 1; if (interpreter_p && strcmp (interpreter_p, INTERP_CONSOLE) == 0) { xfree (interpreter_p); - interpreter_p = xstrdup ("tui"); + interpreter_p = xstrdup (INTERP_TUI); } } diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c index 739c53c..a056045 100644 --- a/gdb/tui/tui-win.c +++ b/gdb/tui/tui-win.c @@ -450,15 +450,13 @@ void tui_update_gdb_sizes (void) { char cmd[50]; - int screenheight, screenwidth; - rl_get_screen_size (&screenheight, &screenwidth); /* Set to TUI command window dimension or use readline values. */ sprintf (cmd, "set width %d", - tui_active ? TUI_CMD_WIN->generic.width : screenwidth); + tui_active ? TUI_CMD_WIN->generic.width : tui_term_width()); execute_command (cmd, 0); sprintf (cmd, "set height %d", - tui_active ? TUI_CMD_WIN->generic.height : screenheight); + tui_active ? TUI_CMD_WIN->generic.height : tui_term_height()); execute_command (cmd, 0); } diff --git a/gdb/version.in b/gdb/version.in index c1f6569..d0034bd 100644 --- a/gdb/version.in +++ b/gdb/version.in @@ -1 +1 @@ -6.3.90-20051104-cvs +6.3.50.20051117-cvs diff --git a/include/ChangeLog b/include/ChangeLog index e2c90f8..3b2f3ef 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,16 @@ +2005-11-07 Nathan Sidwell <nathan@codesourcery.com> + + Add ms2. + * elf/ms1.h (EF_MS1_CPU_MS2): New. + +2005-11-06 John David Anglin <dave.anglin@nrc-crnc.gc.ca> + + * elf/hppa.h (R_PARISC_DIR64WR, R_PARISC_DIR64DR): Remove relocs. + +2005-11-03 Alan Modra <amodra@bigpond.net.au> + + * bfdlink.h (struct bfd_link_order): Tweak comment. + 2005-10-31 Mark Kettenis <kettenis@gnu.org> * floatformat.h (enum floatformat_byteorders): Add diff --git a/include/bfdlink.h b/include/bfdlink.h index 66a5b42..3c978e8 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -554,7 +554,7 @@ enum bfd_link_order_type }; /* This is the link_order structure itself. These form a chain - attached to the section whose contents they are describing. */ + attached to the output section whose contents they are describing. */ struct bfd_link_order { diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog index 485a78e..af4947c 100644 --- a/include/elf/ChangeLog +++ b/include/elf/ChangeLog @@ -1,3 +1,9 @@ +2005-11-11 Nick Clifton <nickc@redhat.com> + + PR 1150 + * mips.h (STO_OPTIONAL): Define. + (ELF_MIPS_IS_OPTIONAL): Define. + 2005-09-30 Catherine Moore <clm@cm00re.com> * bfin.h: New file. diff --git a/include/elf/hppa.h b/include/elf/hppa.h index 57efac6..38a464e 100644 --- a/include/elf/hppa.h +++ b/include/elf/hppa.h @@ -309,12 +309,6 @@ RELOC_NUMBER (R_PARISC_PCREL16DF, 79) RELOC_NUMBER (R_PARISC_DIR64, 80) /* 64-bit doubleword symbol + addend */ -RELOC_NUMBER (R_PARISC_DIR64WR, 81) -/* 64-bit doubleword RR(symbol, addend) */ - -RELOC_NUMBER (R_PARISC_DIR64DR, 82) -/* 64-bit doubleword RR(symbol, addend) */ - RELOC_NUMBER (R_PARISC_DIR14WR, 83) /* load/store mod. comp. (2) RR(symbol, addend) */ diff --git a/include/elf/mips.h b/include/elf/mips.h index 540815b..6afc12f 100644 --- a/include/elf/mips.h +++ b/include/elf/mips.h @@ -718,6 +718,13 @@ extern void bfd_mips_elf32_swap_reginfo_out /* This value is used for a mips16 .text symbol. */ #define STO_MIPS16 0xf0 + +/* This bit is used on Irix to indicate a symbol whose definition + is optional - if, at final link time, it cannot be found, no + error message should be produced. */ +#define STO_OPTIONAL (1 << 2) +/* A macro to examine the STO_OPTIONAL bit. */ +#define ELF_MIPS_IS_OPTIONAL(other) ((other) & STO_OPTIONAL) /* The 64-bit MIPS ELF ABI uses an unusual reloc format. Each relocation entry specifies up to three actual relocations, all at diff --git a/include/elf/ms1.h b/include/elf/ms1.h index 747dc89..1cb7ad6 100644 --- a/include/elf/ms1.h +++ b/include/elf/ms1.h @@ -35,6 +35,7 @@ END_RELOC_NUMBERS(R_MS1_max) #define EF_MS1_CPU_MRISC 0x00000001 /* default */ #define EF_MS1_CPU_MRISC2 0x00000002 /* MRISC2 */ +#define EF_MS1_CPU_MS2 0x00000003 /* MS2 */ #define EF_MS1_CPU_MASK 0x00000003 /* specific cpu bits */ #define EF_MS1_ALL_FLAGS (EF_MS1_CPU_MASK) diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog index a282a62..c9a4a12 100644 --- a/include/opcode/ChangeLog +++ b/include/opcode/ChangeLog @@ -1,3 +1,9 @@ +2005-11-14 David Ung <davidu@mips.com> + + * mips.h: Assign 'm'/'M' codes to MIPS16e save/restore + instructions. Define MIPS16_ALL_ARGS and MIPS16_ALL_STATICS for + save/restore encoding of the args field. + 2005-10-28 Dave Brolley <brolley@redhat.com> Contribute the following changes: diff --git a/include/opcode/mips.h b/include/opcode/mips.h index e46ba2c..4bec5ed 100644 --- a/include/opcode/mips.h +++ b/include/opcode/mips.h @@ -928,7 +928,14 @@ extern int bfd_mips_num_opcodes; "A" 8 bit PC relative address * 4 (MIPS16OP_*_IMM8) "B" 5 bit PC relative address * 8 (MIPS16OP_*_IMM5) "E" 5 bit PC relative address * 4 (MIPS16OP_*_IMM5) - */ + "m" 7 bit register list for save instruction (18 bit extended) + "M" 7 bit register list for restore instruction (18 bit extended) + */ + +/* Save/restore encoding for the args field when all 4 registers are + either saved as arguments or saved/restored as statics. */ +#define MIPS16_ALL_ARGS 0xe +#define MIPS16_ALL_STATICS 0xb /* For the mips16, we use the same opcode table format and a few of the same flags. However, most of the flags are different. */ diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index eeae1e3..6fdeba3 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,10 @@ +2005-11-06 Richard Guenther <rguenther@suse.de> + + * splay-tree.c (rotate_left): New function. + (rotate_right): Likewise. + (splay_tree_splay_helper): Remove. + (splay_tree_splay): Re-implement. + 2005-10-31 Mark Kettenis <kettenis@gnu.org> * floatformat.c (floatformat_vax_aingle, floatformat_vax_double): diff --git a/libiberty/splay-tree.c b/libiberty/splay-tree.c index 311b49e..060f900 100644 --- a/libiberty/splay-tree.c +++ b/libiberty/splay-tree.c @@ -38,12 +38,11 @@ Boston, MA 02110-1301, USA. */ #include "splay-tree.h" static void splay_tree_delete_helper (splay_tree, splay_tree_node); +static inline void rotate_left (splay_tree_node *, + splay_tree_node, splay_tree_node); +static inline void rotate_right (splay_tree_node *, + splay_tree_node, splay_tree_node); static void splay_tree_splay (splay_tree, splay_tree_key); -static splay_tree_node splay_tree_splay_helper (splay_tree, - splay_tree_key, - splay_tree_node*, - splay_tree_node*, - splay_tree_node*); static int splay_tree_foreach_helper (splay_tree, splay_tree_node, splay_tree_foreach_fn, void*); @@ -107,116 +106,33 @@ splay_tree_delete_helper (splay_tree sp, splay_tree_node node) #undef VDEL } -/* Help splay SP around KEY. PARENT and GRANDPARENT are the parent - and grandparent, respectively, of NODE. */ +/* Rotate the edge joining the left child N with its parent P. PP is the + grandparents pointer to P. */ -static splay_tree_node -splay_tree_splay_helper (splay_tree sp, splay_tree_key key, - splay_tree_node *node, splay_tree_node *parent, - splay_tree_node *grandparent) +static inline void +rotate_left (splay_tree_node *pp, splay_tree_node p, splay_tree_node n) { - splay_tree_node *next; - splay_tree_node n; - int comparison; - - n = *node; - - if (!n) - return *parent; - - comparison = (*sp->comp) (key, n->key); - - if (comparison == 0) - /* We've found the target. */ - next = 0; - else if (comparison < 0) - /* The target is to the left. */ - next = &n->left; - else - /* The target is to the right. */ - next = &n->right; - - if (next) - { - /* Continue down the tree. */ - n = splay_tree_splay_helper (sp, key, next, node, parent); - - /* The recursive call will change the place to which NODE - points. */ - if (*node != n) - return n; - } - - if (!parent) - /* NODE is the root. We are done. */ - return n; - - /* First, handle the case where there is no grandparent (i.e., - *PARENT is the root of the tree.) */ - if (!grandparent) - { - if (n == (*parent)->left) - { - *node = n->right; - n->right = *parent; - } - else - { - *node = n->left; - n->left = *parent; - } - *parent = n; - return n; - } + splay_tree_node tmp; + tmp = n->right; + n->right = p; + p->left = tmp; + *pp = n; +} - /* Next handle the cases where both N and *PARENT are left children, - or where both are right children. */ - if (n == (*parent)->left && *parent == (*grandparent)->left) - { - splay_tree_node p = *parent; - - (*grandparent)->left = p->right; - p->right = *grandparent; - p->left = n->right; - n->right = p; - *grandparent = n; - return n; - } - else if (n == (*parent)->right && *parent == (*grandparent)->right) - { - splay_tree_node p = *parent; - - (*grandparent)->right = p->left; - p->left = *grandparent; - p->right = n->left; - n->left = p; - *grandparent = n; - return n; - } +/* Rotate the edge joining the right child N with its parent P. PP is the + grandparents pointer to P. */ - /* Finally, deal with the case where N is a left child, but *PARENT - is a right child, or vice versa. */ - if (n == (*parent)->left) - { - (*parent)->left = n->right; - n->right = *parent; - (*grandparent)->right = n->left; - n->left = *grandparent; - *grandparent = n; - return n; - } - else - { - (*parent)->right = n->left; - n->left = *parent; - (*grandparent)->left = n->right; - n->right = *grandparent; - *grandparent = n; - return n; - } +static inline void +rotate_right (splay_tree_node *pp, splay_tree_node p, splay_tree_node n) +{ + splay_tree_node tmp; + tmp = n->left; + n->left = p; + p->right = tmp; + *pp = n; } -/* Splay SP around KEY. */ +/* Bottom up splay of key. */ static void splay_tree_splay (splay_tree sp, splay_tree_key key) @@ -224,8 +140,61 @@ splay_tree_splay (splay_tree sp, splay_tree_key key) if (sp->root == 0) return; - splay_tree_splay_helper (sp, key, &sp->root, - /*grandparent=*/0, /*parent=*/0); + do { + int cmp1, cmp2; + splay_tree_node n, c; + + n = sp->root; + cmp1 = (*sp->comp) (key, n->key); + + /* Found. */ + if (cmp1 == 0) + return; + + /* Left or right? If no child, then we're done. */ + if (cmp1 < 0) + c = n->left; + else + c = n->right; + if (!c) + return; + + /* Next one left or right? If found or no child, we're done + after one rotation. */ + cmp2 = (*sp->comp) (key, c->key); + if (cmp2 == 0 + || (cmp2 < 0 && !c->left) + || (cmp2 > 0 && !c->right)) + { + if (cmp1 < 0) + rotate_left (&sp->root, n, c); + else + rotate_right (&sp->root, n, c); + return; + } + + /* Now we have the four cases of double-rotation. */ + if (cmp1 < 0 && cmp2 < 0) + { + rotate_left (&n->left, c, c->left); + rotate_left (&sp->root, n, n->left); + } + else if (cmp1 > 0 && cmp2 > 0) + { + rotate_right (&n->right, c, c->right); + rotate_right (&sp->root, n, n->right); + } + else if (cmp1 < 0 && cmp2 > 0) + { + rotate_right (&n->left, c, c->right); + rotate_left (&sp->root, n, n->left); + } + else if (cmp1 > 0 && cmp2 < 0) + { + rotate_left (&n->right, c, c->left); + rotate_right (&sp->root, n, n->right); + } + } while (1); } /* Call FN, passing it the DATA, for every node below NODE, all of diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 5bf7914..83dee04 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,51 @@ +2005-11-16 Alan Modra <amodra@bigpond.net.au> + + * ppc-opc.c (powerpc_opcodes): Add frin,friz,frip,frim. Correct + frsqrtes. + +2005-11-14 David Ung <davidu@mips.com> + + * mips16-opc.c: Add MIPS16e save/restore opcodes. + * mips-dis.c (print_mips16_insn_arg): Handle printing of 'm'/'M' + codes for save/restore. + +2005-11-10 Andreas Schwab <schwab@suse.de> + + * m68k-dis.c (print_insn_m68k): Only match FPU insns with + coprocessor ID 1. + +2005-11-08 H.J. Lu <hongjiu.lu@intel.com> + + * m32c-desc.c: Regenerated. + +2005-11-08 Nathan Sidwell <nathan@codesourcery.com> + + Add ms2. + * ms1-asm.c, ms1-desc.c, ms1-desc.h, ms1-dis.c, ms1-ibld.c, + ms1-opc.c, ms1-opc.h: Regenerated. + +2005-11-07 Steve Ellcey <sje@cup.hp.com> + + * configure: Regenerate after modifying bfd/warning.m4. + +2005-11-07 Alan Modra <amodra@bigpond.net.au> + + * i386-dis.c (ckprefix): Handle rex on fwait. Don't print + ignored rex prefixes here. + (print_insn): Instead, handle them similarly to fwait followed + by non-fp insns. + +2005-11-02 H.J. Lu <hongjiu.lu@intel.com> + + * iq2000-desc.c: Regenerated. + * iq2000-desc.h: Likewise. + * iq2000-dis.c: Likewise. + * iq2000-opc.c: Likewise. + +2005-11-02 Paul Brook <paul@codesourcery.com> + + * arm-dis.c (print_insn_thumb32): Word align blx target address. + 2005-10-31 Alan Modra <amodra@bigpond.net.au> * arm-dis.c (print_insn): Warning fix. @@ -98,7 +146,7 @@ * configure.in: Add target architecture bfd_arch_z80. * configure: Regenerated. - * disassemble.c (disassembler)<ARCH_z80>: Add case + * disassemble.c (disassembler)<ARCH_z80>: Add case bfd_arch_z80. * z80-dis.c: New file. @@ -259,7 +307,7 @@ 2005-08-23 David Ung <davidu@mips.com> * mips16-opc.c (mips16_opcodes): Add the MIPS16e jalrc/jrc - instructions to the table. + instructions to the table. 2005-08-18 Alan Modra <amodra@bigpond.net.au> @@ -394,7 +442,7 @@ * cgen-ops.h, cgen-types.h: New files. * Makefile.am (HFILES): List them. * Makefile.in: Regenerated. - + 2005-07-07 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * arc-dis.c, arm-dis.c, cris-dis.c, crx-dis.c, d10v-dis.c, @@ -485,7 +533,7 @@ * vax-dis.c: Likewise. * w65-dis.c: Likewise. * z8kgen.c: Likewise. - + * fr30-*: Regenerate. * frv-*: Regenerate. * ip2k-*: Regenerate. @@ -502,13 +550,13 @@ 2005-06-16 David Ung <davidu@mips.com> - * mips16-opc.c (mips16_opcodes): Add the following MIPS16e - instructions to the table; seb/seh/sew/zeb/zeh/zew. + * mips16-opc.c (mips16_opcodes): Add the following MIPS16e + instructions to the table; seb/seh/sew/zeb/zeh/zew. 2005-06-15 Dave Brolley <brolley@redhat.com> Contribute Morpho ms1 on behalf of Red Hat - * ms1-asm.c, ms1-desc.c, ms1-dis.c, ms1-ibld.c, ms1-opc.c, + * ms1-asm.c, ms1-desc.c, ms1-dis.c, ms1-ibld.c, ms1-opc.c, ms1-opc.h: New files, Morpho ms1 target. 2004-05-14 Stan Cox <scox@redhat.com> diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c index a19c077..fb3cb77 100644 --- a/opcodes/arm-dis.c +++ b/opcodes/arm-dis.c @@ -2607,8 +2607,13 @@ print_insn_thumb32 (bfd_vma pc, struct disassemble_info *info, long given) offset |= (given & 0x03ff0000u) >> 4; offset |= (given & 0x000007ffu) << 1; offset -= (1 << 24); + offset += pc + 4; - info->print_address_func (pc + 4 + offset, info); + /* BLX target addresses are always word aligned. */ + if ((given & 0x00001000u) == 0) + offset &= ~2u; + + info->print_address_func (offset, info); } break; diff --git a/opcodes/configure b/opcodes/configure index 34c9ced..52e2b67 100755 --- a/opcodes/configure +++ b/opcodes/configure @@ -4243,7 +4243,7 @@ echo "$as_me: error: bad value ${enableval} for opcodes commonbfdlib option" >&2 esac fi; -WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" +GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" # Check whether --enable-werror or --disable-werror was given. if test "${enable_werror+set}" = set; then @@ -4264,20 +4264,26 @@ fi NO_WERROR= if test "${ERROR_ON_WARNING}" = yes ; then - WARN_CFLAGS="$WARN_CFLAGS -Werror" + GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Werror" NO_WERROR="-Wno-error" fi +if test "${GCC}" = yes ; then + WARN_CFLAGS="${GCC_WARN_CFLAGS}" +fi + # Check whether --enable-build-warnings or --disable-build-warnings was given. if test "${enable_build_warnings+set}" = set; then enableval="$enable_build_warnings" case "${enableval}" in - yes) ;; - no) WARN_CFLAGS="-w";; + yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; + no) if test "${GCC}" = yes ; then + WARN_CFLAGS="-w" + fi;; ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` - WARN_CFLAGS="${WARN_CFLAGS} ${t}";; + WARN_CFLAGS="${GCC_WARN_CFLAGS} ${t}";; *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` - WARN_CFLAGS="${t} ${WARN_CFLAGS}";; + WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; esac fi; diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index a3b205a..47455e3 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -1814,7 +1814,7 @@ ckprefix (void) /* fwait is really an instruction. If there are prefixes before the fwait, they belong to the fwait, *not* to the following instruction. */ - if (prefixes) + if (prefixes || rex) { prefixes |= PREFIX_FWAIT; codep++; @@ -1828,8 +1828,8 @@ ckprefix (void) /* Rex is ignored when followed by another prefix. */ if (rex) { - oappend (prefix_name (rex, 0)); - oappend (" "); + rex_used = rex; + return; } rex = newrex; codep++; @@ -2117,13 +2117,14 @@ print_insn (bfd_vma pc, disassemble_info *info) FETCH_DATA (info, codep + 1); two_source_ops = (*codep == 0x62) || (*codep == 0xc8); - if ((prefixes & PREFIX_FWAIT) - && ((*codep < 0xd8) || (*codep > 0xdf))) + if (((prefixes & PREFIX_FWAIT) + && ((*codep < 0xd8) || (*codep > 0xdf))) + || (rex && rex_used)) { const char *name; - /* fwait not followed by floating point instruction. Print the - first prefix, which is probably fwait itself. */ + /* fwait not followed by floating point instruction, or rex followed + by other prefixes. Print the first prefix. */ name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag); if (name == NULL) name = INTERNAL_DISASSEMBLER_ERROR; diff --git a/opcodes/iq2000-desc.c b/opcodes/iq2000-desc.c index 39bda64..5f47e4c 100644 --- a/opcodes/iq2000-desc.c +++ b/opcodes/iq2000-desc.c @@ -136,70 +136,70 @@ static const CGEN_MACH iq2000_cgen_mach_table[] = { static CGEN_KEYWORD_ENTRY iq2000_cgen_opval_gr_names_entries[] = { - { "r0", 0, {0, {0}}, 0, 0 }, - { "%0", 0, {0, {0}}, 0, 0 }, - { "r1", 1, {0, {0}}, 0, 0 }, - { "%1", 1, {0, {0}}, 0, 0 }, - { "r2", 2, {0, {0}}, 0, 0 }, - { "%2", 2, {0, {0}}, 0, 0 }, - { "r3", 3, {0, {0}}, 0, 0 }, - { "%3", 3, {0, {0}}, 0, 0 }, - { "r4", 4, {0, {0}}, 0, 0 }, - { "%4", 4, {0, {0}}, 0, 0 }, - { "r5", 5, {0, {0}}, 0, 0 }, - { "%5", 5, {0, {0}}, 0, 0 }, - { "r6", 6, {0, {0}}, 0, 0 }, - { "%6", 6, {0, {0}}, 0, 0 }, - { "r7", 7, {0, {0}}, 0, 0 }, - { "%7", 7, {0, {0}}, 0, 0 }, - { "r8", 8, {0, {0}}, 0, 0 }, - { "%8", 8, {0, {0}}, 0, 0 }, - { "r9", 9, {0, {0}}, 0, 0 }, - { "%9", 9, {0, {0}}, 0, 0 }, - { "r10", 10, {0, {0}}, 0, 0 }, - { "%10", 10, {0, {0}}, 0, 0 }, - { "r11", 11, {0, {0}}, 0, 0 }, - { "%11", 11, {0, {0}}, 0, 0 }, - { "r12", 12, {0, {0}}, 0, 0 }, - { "%12", 12, {0, {0}}, 0, 0 }, - { "r13", 13, {0, {0}}, 0, 0 }, - { "%13", 13, {0, {0}}, 0, 0 }, - { "r14", 14, {0, {0}}, 0, 0 }, - { "%14", 14, {0, {0}}, 0, 0 }, - { "r15", 15, {0, {0}}, 0, 0 }, - { "%15", 15, {0, {0}}, 0, 0 }, - { "r16", 16, {0, {0}}, 0, 0 }, - { "%16", 16, {0, {0}}, 0, 0 }, - { "r17", 17, {0, {0}}, 0, 0 }, - { "%17", 17, {0, {0}}, 0, 0 }, - { "r18", 18, {0, {0}}, 0, 0 }, - { "%18", 18, {0, {0}}, 0, 0 }, - { "r19", 19, {0, {0}}, 0, 0 }, - { "%19", 19, {0, {0}}, 0, 0 }, - { "r20", 20, {0, {0}}, 0, 0 }, - { "%20", 20, {0, {0}}, 0, 0 }, - { "r21", 21, {0, {0}}, 0, 0 }, - { "%21", 21, {0, {0}}, 0, 0 }, - { "r22", 22, {0, {0}}, 0, 0 }, - { "%22", 22, {0, {0}}, 0, 0 }, - { "r23", 23, {0, {0}}, 0, 0 }, - { "%23", 23, {0, {0}}, 0, 0 }, - { "r24", 24, {0, {0}}, 0, 0 }, - { "%24", 24, {0, {0}}, 0, 0 }, - { "r25", 25, {0, {0}}, 0, 0 }, - { "%25", 25, {0, {0}}, 0, 0 }, - { "r26", 26, {0, {0}}, 0, 0 }, - { "%26", 26, {0, {0}}, 0, 0 }, - { "r27", 27, {0, {0}}, 0, 0 }, - { "%27", 27, {0, {0}}, 0, 0 }, - { "r28", 28, {0, {0}}, 0, 0 }, - { "%28", 28, {0, {0}}, 0, 0 }, - { "r29", 29, {0, {0}}, 0, 0 }, - { "%29", 29, {0, {0}}, 0, 0 }, - { "r30", 30, {0, {0}}, 0, 0 }, - { "%30", 30, {0, {0}}, 0, 0 }, - { "r31", 31, {0, {0}}, 0, 0 }, - { "%31", 31, {0, {0}}, 0, 0 } + { "r0", 0, {0, {{{0, 0}}}}, 0, 0 }, + { "%0", 0, {0, {{{0, 0}}}}, 0, 0 }, + { "r1", 1, {0, {{{0, 0}}}}, 0, 0 }, + { "%1", 1, {0, {{{0, 0}}}}, 0, 0 }, + { "r2", 2, {0, {{{0, 0}}}}, 0, 0 }, + { "%2", 2, {0, {{{0, 0}}}}, 0, 0 }, + { "r3", 3, {0, {{{0, 0}}}}, 0, 0 }, + { "%3", 3, {0, {{{0, 0}}}}, 0, 0 }, + { "r4", 4, {0, {{{0, 0}}}}, 0, 0 }, + { "%4", 4, {0, {{{0, 0}}}}, 0, 0 }, + { "r5", 5, {0, {{{0, 0}}}}, 0, 0 }, + { "%5", 5, {0, {{{0, 0}}}}, 0, 0 }, + { "r6", 6, {0, {{{0, 0}}}}, 0, 0 }, + { "%6", 6, {0, {{{0, 0}}}}, 0, 0 }, + { "r7", 7, {0, {{{0, 0}}}}, 0, 0 }, + { "%7", 7, {0, {{{0, 0}}}}, 0, 0 }, + { "r8", 8, {0, {{{0, 0}}}}, 0, 0 }, + { "%8", 8, {0, {{{0, 0}}}}, 0, 0 }, + { "r9", 9, {0, {{{0, 0}}}}, 0, 0 }, + { "%9", 9, {0, {{{0, 0}}}}, 0, 0 }, + { "r10", 10, {0, {{{0, 0}}}}, 0, 0 }, + { "%10", 10, {0, {{{0, 0}}}}, 0, 0 }, + { "r11", 11, {0, {{{0, 0}}}}, 0, 0 }, + { "%11", 11, {0, {{{0, 0}}}}, 0, 0 }, + { "r12", 12, {0, {{{0, 0}}}}, 0, 0 }, + { "%12", 12, {0, {{{0, 0}}}}, 0, 0 }, + { "r13", 13, {0, {{{0, 0}}}}, 0, 0 }, + { "%13", 13, {0, {{{0, 0}}}}, 0, 0 }, + { "r14", 14, {0, {{{0, 0}}}}, 0, 0 }, + { "%14", 14, {0, {{{0, 0}}}}, 0, 0 }, + { "r15", 15, {0, {{{0, 0}}}}, 0, 0 }, + { "%15", 15, {0, {{{0, 0}}}}, 0, 0 }, + { "r16", 16, {0, {{{0, 0}}}}, 0, 0 }, + { "%16", 16, {0, {{{0, 0}}}}, 0, 0 }, + { "r17", 17, {0, {{{0, 0}}}}, 0, 0 }, + { "%17", 17, {0, {{{0, 0}}}}, 0, 0 }, + { "r18", 18, {0, {{{0, 0}}}}, 0, 0 }, + { "%18", 18, {0, {{{0, 0}}}}, 0, 0 }, + { "r19", 19, {0, {{{0, 0}}}}, 0, 0 }, + { "%19", 19, {0, {{{0, 0}}}}, 0, 0 }, + { "r20", 20, {0, {{{0, 0}}}}, 0, 0 }, + { "%20", 20, {0, {{{0, 0}}}}, 0, 0 }, + { "r21", 21, {0, {{{0, 0}}}}, 0, 0 }, + { "%21", 21, {0, {{{0, 0}}}}, 0, 0 }, + { "r22", 22, {0, {{{0, 0}}}}, 0, 0 }, + { "%22", 22, {0, {{{0, 0}}}}, 0, 0 }, + { "r23", 23, {0, {{{0, 0}}}}, 0, 0 }, + { "%23", 23, {0, {{{0, 0}}}}, 0, 0 }, + { "r24", 24, {0, {{{0, 0}}}}, 0, 0 }, + { "%24", 24, {0, {{{0, 0}}}}, 0, 0 }, + { "r25", 25, {0, {{{0, 0}}}}, 0, 0 }, + { "%25", 25, {0, {{{0, 0}}}}, 0, 0 }, + { "r26", 26, {0, {{{0, 0}}}}, 0, 0 }, + { "%26", 26, {0, {{{0, 0}}}}, 0, 0 }, + { "r27", 27, {0, {{{0, 0}}}}, 0, 0 }, + { "%27", 27, {0, {{{0, 0}}}}, 0, 0 }, + { "r28", 28, {0, {{{0, 0}}}}, 0, 0 }, + { "%28", 28, {0, {{{0, 0}}}}, 0, 0 }, + { "r29", 29, {0, {{{0, 0}}}}, 0, 0 }, + { "%29", 29, {0, {{{0, 0}}}}, 0, 0 }, + { "r30", 30, {0, {{{0, 0}}}}, 0, 0 }, + { "%30", 30, {0, {{{0, 0}}}}, 0, 0 }, + { "r31", 31, {0, {{{0, 0}}}}, 0, 0 }, + { "%31", 31, {0, {{{0, 0}}}}, 0, 0 } }; CGEN_KEYWORD iq2000_cgen_opval_gr_names = @@ -220,14 +220,14 @@ CGEN_KEYWORD iq2000_cgen_opval_gr_names = const CGEN_HW_ENTRY iq2000_cgen_hw_table[] = { - { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, - { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, - { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, - { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, - { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, - { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { (1<<MACH_BASE) } } }, - { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, (PTR) & iq2000_cgen_opval_gr_names, { 0, { (1<<MACH_BASE) } } }, - { 0, 0, CGEN_ASM_NONE, 0, {0, {0}} } + { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } } } } }, + { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, (PTR) & iq2000_cgen_opval_gr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } } }; #undef A @@ -243,44 +243,44 @@ const CGEN_HW_ENTRY iq2000_cgen_hw_table[] = const CGEN_IFLD iq2000_cgen_ifld_table[] = { - { IQ2000_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_OPCODE, "f-opcode", 0, 32, 31, 6, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_RS, "f-rs", 0, 32, 25, 5, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_RT, "f-rt", 0, 32, 20, 5, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_RD, "f-rd", 0, 32, 15, 5, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_SHAMT, "f-shamt", 0, 32, 10, 5, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_CP_OP, "f-cp-op", 0, 32, 10, 3, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_CP_OP_10, "f-cp-op-10", 0, 32, 10, 5, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_CP_GRP, "f-cp-grp", 0, 32, 7, 2, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_FUNC, "f-func", 0, 32, 5, 6, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_IMM, "f-imm", 0, 32, 15, 16, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_RD_RS, "f-rd-rs", 0, 0, 0, 0,{ 0|A(VIRTUAL), { (1<<MACH_BASE) } } }, - { IQ2000_F_RD_RT, "f-rd-rt", 0, 0, 0, 0,{ 0|A(VIRTUAL), { (1<<MACH_BASE) } } }, - { IQ2000_F_RT_RS, "f-rt-rs", 0, 0, 0, 0,{ 0|A(VIRTUAL), { (1<<MACH_BASE) } } }, - { IQ2000_F_JTARG, "f-jtarg", 0, 32, 15, 16, { 0|A(ABS_ADDR), { (1<<MACH_BASE) } } }, - { IQ2000_F_JTARGQ10, "f-jtargq10", 0, 32, 20, 21, { 0|A(ABS_ADDR), { (1<<MACH_BASE) } } }, - { IQ2000_F_OFFSET, "f-offset", 0, 32, 15, 16, { 0|A(PCREL_ADDR), { (1<<MACH_BASE) } } }, - { IQ2000_F_COUNT, "f-count", 0, 32, 15, 7, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_BYTECOUNT, "f-bytecount", 0, 32, 7, 8, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_INDEX, "f-index", 0, 32, 8, 9, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_MASK, "f-mask", 0, 32, 9, 4, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_MASKQ10, "f-maskq10", 0, 32, 10, 5, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_MASKL, "f-maskl", 0, 32, 4, 5, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_EXCODE, "f-excode", 0, 32, 25, 20, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_RSRVD, "f-rsrvd", 0, 32, 25, 10, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_10_11, "f-10-11", 0, 32, 10, 11, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_24_19, "f-24-19", 0, 32, 24, 19, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_5, "f-5", 0, 32, 5, 1, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_10, "f-10", 0, 32, 10, 1, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_25, "f-25", 0, 32, 25, 1, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_CAM_Z, "f-cam-z", 0, 32, 5, 3, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_CAM_Y, "f-cam-y", 0, 32, 2, 3, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_CM_3FUNC, "f-cm-3func", 0, 32, 5, 3, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_CM_4FUNC, "f-cm-4func", 0, 32, 5, 4, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_CM_3Z, "f-cm-3z", 0, 32, 1, 2, { 0, { (1<<MACH_BASE) } } }, - { IQ2000_F_CM_4Z, "f-cm-4z", 0, 32, 2, 3, { 0, { (1<<MACH_BASE) } } }, - { 0, 0, 0, 0, 0, 0, {0, {0}} } + { IQ2000_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_OPCODE, "f-opcode", 0, 32, 31, 6, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_RS, "f-rs", 0, 32, 25, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_RT, "f-rt", 0, 32, 20, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_RD, "f-rd", 0, 32, 15, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_SHAMT, "f-shamt", 0, 32, 10, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_CP_OP, "f-cp-op", 0, 32, 10, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_CP_OP_10, "f-cp-op-10", 0, 32, 10, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_CP_GRP, "f-cp-grp", 0, 32, 7, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_FUNC, "f-func", 0, 32, 5, 6, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_IMM, "f-imm", 0, 32, 15, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_RD_RS, "f-rd-rs", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_RD_RT, "f-rd-rt", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_RT_RS, "f-rt-rs", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_JTARG, "f-jtarg", 0, 32, 15, 16, { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_JTARGQ10, "f-jtargq10", 0, 32, 20, 21, { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_OFFSET, "f-offset", 0, 32, 15, 16, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_COUNT, "f-count", 0, 32, 15, 7, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_BYTECOUNT, "f-bytecount", 0, 32, 7, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_INDEX, "f-index", 0, 32, 8, 9, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_MASK, "f-mask", 0, 32, 9, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_MASKQ10, "f-maskq10", 0, 32, 10, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_MASKL, "f-maskl", 0, 32, 4, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_EXCODE, "f-excode", 0, 32, 25, 20, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_RSRVD, "f-rsrvd", 0, 32, 25, 10, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_10_11, "f-10-11", 0, 32, 10, 11, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_24_19, "f-24-19", 0, 32, 24, 19, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_5, "f-5", 0, 32, 5, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_10, "f-10", 0, 32, 10, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_25, "f-25", 0, 32, 25, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_CAM_Z, "f-cam-z", 0, 32, 5, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_CAM_Y, "f-cam-y", 0, 32, 2, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_CM_3FUNC, "f-cm-3func", 0, 32, 5, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_CM_4FUNC, "f-cm-4func", 0, 32, 5, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_CM_3Z, "f-cm-3z", 0, 32, 1, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { IQ2000_F_CM_4Z, "f-cm-4z", 0, 32, 2, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } } }; #undef A @@ -333,135 +333,135 @@ const CGEN_OPERAND iq2000_cgen_operand_table[] = /* pc: program counter */ { "pc", IQ2000_OPERAND_PC, HW_H_PC, 0, 0, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_NIL] } }, - { 0|A(SEM_ONLY), { (1<<MACH_BASE) } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } }, /* rs: register Rs */ { "rs", IQ2000_OPERAND_RS, HW_H_GR, 25, 5, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* rt: register Rt */ { "rt", IQ2000_OPERAND_RT, HW_H_GR, 20, 5, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* rd: register Rd */ { "rd", IQ2000_OPERAND_RD, HW_H_GR, 15, 5, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* rd-rs: register Rd from Rs */ { "rd-rs", IQ2000_OPERAND_RD_RS, HW_H_GR, 15, 10, { 2, { (const PTR) &IQ2000_F_RD_RS_MULTI_IFIELD[0] } }, - { 0|A(VIRTUAL), { (1<<MACH_BASE) } } }, + { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } }, /* rd-rt: register Rd from Rt */ { "rd-rt", IQ2000_OPERAND_RD_RT, HW_H_GR, 15, 10, { 2, { (const PTR) &IQ2000_F_RD_RT_MULTI_IFIELD[0] } }, - { 0|A(VIRTUAL), { (1<<MACH_BASE) } } }, + { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } }, /* rt-rs: register Rt from Rs */ { "rt-rs", IQ2000_OPERAND_RT_RS, HW_H_GR, 20, 10, { 2, { (const PTR) &IQ2000_F_RT_RS_MULTI_IFIELD[0] } }, - { 0|A(VIRTUAL), { (1<<MACH_BASE) } } }, + { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } } }, /* shamt: shift amount */ { "shamt", IQ2000_OPERAND_SHAMT, HW_H_UINT, 10, 5, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_SHAMT] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* imm: immediate */ { "imm", IQ2000_OPERAND_IMM, HW_H_UINT, 15, 16, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* offset: pc-relative offset */ { "offset", IQ2000_OPERAND_OFFSET, HW_H_IADDR, 15, 16, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_OFFSET] } }, - { 0|A(PCREL_ADDR), { (1<<MACH_BASE) } } }, + { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } }, /* baseoff: base register offset */ { "baseoff", IQ2000_OPERAND_BASEOFF, HW_H_IADDR, 15, 16, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* jmptarg: jump target */ { "jmptarg", IQ2000_OPERAND_JMPTARG, HW_H_IADDR, 15, 16, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_JTARG] } }, - { 0|A(ABS_ADDR), { (1<<MACH_BASE) } } }, + { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } }, /* mask: mask */ { "mask", IQ2000_OPERAND_MASK, HW_H_UINT, 9, 4, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASK] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* maskq10: iq10 mask */ { "maskq10", IQ2000_OPERAND_MASKQ10, HW_H_UINT, 10, 5, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASKQ10] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* maskl: mask left */ { "maskl", IQ2000_OPERAND_MASKL, HW_H_UINT, 4, 5, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASKL] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* count: count */ { "count", IQ2000_OPERAND_COUNT, HW_H_UINT, 15, 7, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_COUNT] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* _index: index */ { "_index", IQ2000_OPERAND__INDEX, HW_H_UINT, 8, 9, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_INDEX] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* execode: execcode */ { "execode", IQ2000_OPERAND_EXECODE, HW_H_UINT, 25, 20, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_EXCODE] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* bytecount: byte count */ { "bytecount", IQ2000_OPERAND_BYTECOUNT, HW_H_UINT, 7, 8, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_BYTECOUNT] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* cam-y: cam global opn y */ { "cam-y", IQ2000_OPERAND_CAM_Y, HW_H_UINT, 2, 3, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CAM_Y] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* cam-z: cam global mask z */ { "cam-z", IQ2000_OPERAND_CAM_Z, HW_H_UINT, 5, 3, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CAM_Z] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* cm-3func: CM 3 bit fn field */ { "cm-3func", IQ2000_OPERAND_CM_3FUNC, HW_H_UINT, 5, 3, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_3FUNC] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* cm-4func: CM 4 bit fn field */ { "cm-4func", IQ2000_OPERAND_CM_4FUNC, HW_H_UINT, 5, 4, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_4FUNC] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* cm-3z: CM 3 bit Z field */ { "cm-3z", IQ2000_OPERAND_CM_3Z, HW_H_UINT, 1, 2, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_3Z] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* cm-4z: CM 4 bit Z field */ { "cm-4z", IQ2000_OPERAND_CM_4Z, HW_H_UINT, 2, 3, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_4Z] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* base: base register */ { "base", IQ2000_OPERAND_BASE, HW_H_GR, 25, 5, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* maskr: mask right */ { "maskr", IQ2000_OPERAND_MASKR, HW_H_UINT, 25, 5, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* bitnum: bit number */ { "bitnum", IQ2000_OPERAND_BITNUM, HW_H_UINT, 20, 5, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* hi16: high 16 bit immediate */ { "hi16", IQ2000_OPERAND_HI16, HW_H_UINT, 15, 16, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* lo16: 16 bit signed immediate, for low */ { "lo16", IQ2000_OPERAND_LO16, HW_H_UINT, 15, 16, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* mlo16: negated 16 bit signed immediate */ { "mlo16", IQ2000_OPERAND_MLO16, HW_H_UINT, 15, 16, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } }, - { 0, { (1<<MACH_BASE) } } }, + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* jmptargq10: iq10 21-bit jump offset */ { "jmptargq10", IQ2000_OPERAND_JMPTARGQ10, HW_H_IADDR, 20, 21, { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_JTARGQ10] } }, - { 0|A(ABS_ADDR), { (1<<MACH_BASE) } } }, + { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } }, /* sentinel */ { 0, 0, 0, 0, 0, { 0, { (const PTR) 0 } }, - { 0, { 0 } } } + { 0, { { { (1<<MACH_BASE), 0 } } } } } }; #undef A @@ -481,1381 +481,1381 @@ static const CGEN_IBASE iq2000_cgen_insn_table[MAX_INSNS] = /* Special null first entry. A `num' value of zero is thus invalid. Also, the special `invalid' insn resides here. */ - { 0, 0, 0, 0, {0, {0}} }, + { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* add ${rd-rs},$rt */ { -1, "add2", "add", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* add $rd,$rs,$rt */ { IQ2000_INSN_ADD, "add", "add", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* addi ${rt-rs},$lo16 */ { -1, "addi2", "addi", 32, - { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* addi $rt,$rs,$lo16 */ { IQ2000_INSN_ADDI, "addi", "addi", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } } }, /* addiu ${rt-rs},$lo16 */ { -1, "addiu2", "addiu", 32, - { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* addiu $rt,$rs,$lo16 */ { IQ2000_INSN_ADDIU, "addiu", "addiu", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } } }, /* addu ${rd-rs},$rt */ { -1, "addu2", "addu", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* addu $rd,$rs,$rt */ { IQ2000_INSN_ADDU, "addu", "addu", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* ado16 ${rd-rs},$rt */ { -1, "ado162", "ado16", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* ado16 $rd,$rs,$rt */ { IQ2000_INSN_ADO16, "ado16", "ado16", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* and ${rd-rs},$rt */ { -1, "and2", "and", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* and $rd,$rs,$rt */ { IQ2000_INSN_AND, "and", "and", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* andi ${rt-rs},$lo16 */ { -1, "andi2", "andi", 32, - { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* andi $rt,$rs,$lo16 */ { IQ2000_INSN_ANDI, "andi", "andi", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } } }, /* andoi ${rt-rs},$lo16 */ { -1, "andoi2", "andoi", 32, - { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* andoi $rt,$rs,$lo16 */ { IQ2000_INSN_ANDOI, "andoi", "andoi", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } } }, /* nor ${rd-rs},$rt */ { -1, "nor2", "nor", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* nor $rd,$rs,$rt */ { IQ2000_INSN_NOR, "nor", "nor", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* or ${rd-rs},$rt */ { -1, "or2", "or", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* or $rd,$rs,$rt */ { IQ2000_INSN_OR, "or", "or", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* ori ${rt-rs},$lo16 */ { -1, "ori2", "ori", 32, - { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* ori $rt,$rs,$lo16 */ { IQ2000_INSN_ORI, "ori", "ori", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } } }, /* ram $rd,$rt,$shamt,$maskl,$maskr */ { IQ2000_INSN_RAM, "ram", "ram", 32, - { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* sll $rd,$rt,$shamt */ { IQ2000_INSN_SLL, "sll", "sll", 32, - { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* sllv ${rd-rt},$rs */ { -1, "sllv2", "sllv", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* sllv $rd,$rt,$rs */ { IQ2000_INSN_SLLV, "sllv", "sllv", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* slmv ${rd-rt},$rs,$shamt */ { -1, "slmv2", "slmv", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* slmv $rd,$rt,$rs,$shamt */ { IQ2000_INSN_SLMV, "slmv", "slmv", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* slt ${rd-rs},$rt */ { -1, "slt2", "slt", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* slt $rd,$rs,$rt */ { IQ2000_INSN_SLT, "slt", "slt", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* slti ${rt-rs},$imm */ { -1, "slti2", "slti", 32, - { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* slti $rt,$rs,$imm */ { IQ2000_INSN_SLTI, "slti", "slti", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } } }, /* sltiu ${rt-rs},$imm */ { -1, "sltiu2", "sltiu", 32, - { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* sltiu $rt,$rs,$imm */ { IQ2000_INSN_SLTIU, "sltiu", "sltiu", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } } }, /* sltu ${rd-rs},$rt */ { -1, "sltu2", "sltu", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* sltu $rd,$rs,$rt */ { IQ2000_INSN_SLTU, "sltu", "sltu", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* sra ${rd-rt},$shamt */ { -1, "sra2", "sra", 32, - { 0|A(USES_RT)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* sra $rd,$rt,$shamt */ { IQ2000_INSN_SRA, "sra", "sra", 32, - { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* srav ${rd-rt},$rs */ { -1, "srav2", "srav", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* srav $rd,$rt,$rs */ { IQ2000_INSN_SRAV, "srav", "srav", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* srl $rd,$rt,$shamt */ { IQ2000_INSN_SRL, "srl", "srl", 32, - { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* srlv ${rd-rt},$rs */ { -1, "srlv2", "srlv", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* srlv $rd,$rt,$rs */ { IQ2000_INSN_SRLV, "srlv", "srlv", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* srmv ${rd-rt},$rs,$shamt */ { -1, "srmv2", "srmv", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* srmv $rd,$rt,$rs,$shamt */ { IQ2000_INSN_SRMV, "srmv", "srmv", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* sub ${rd-rs},$rt */ { -1, "sub2", "sub", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* sub $rd,$rs,$rt */ { IQ2000_INSN_SUB, "sub", "sub", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* subu ${rd-rs},$rt */ { -1, "subu2", "subu", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* subu $rd,$rs,$rt */ { IQ2000_INSN_SUBU, "subu", "subu", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* xor ${rd-rs},$rt */ { -1, "xor2", "xor", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* xor $rd,$rs,$rt */ { IQ2000_INSN_XOR, "xor", "xor", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } } }, /* xori ${rt-rs},$lo16 */ { -1, "xori2", "xori", 32, - { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* xori $rt,$rs,$lo16 */ { IQ2000_INSN_XORI, "xori", "xori", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } } }, /* bbi $rs($bitnum),$offset */ { IQ2000_INSN_BBI, "bbi", "bbi", 32, - { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bbin $rs($bitnum),$offset */ { IQ2000_INSN_BBIN, "bbin", "bbin", 32, - { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bbv $rs,$rt,$offset */ { IQ2000_INSN_BBV, "bbv", "bbv", 32, - { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bbvn $rs,$rt,$offset */ { IQ2000_INSN_BBVN, "bbvn", "bbvn", 32, - { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* beq $rs,$rt,$offset */ { IQ2000_INSN_BEQ, "beq", "beq", 32, - { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* beql $rs,$rt,$offset */ { IQ2000_INSN_BEQL, "beql", "beql", 32, - { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bgez $rs,$offset */ { IQ2000_INSN_BGEZ, "bgez", "bgez", 32, - { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bgezal $rs,$offset */ { IQ2000_INSN_BGEZAL, "bgezal", "bgezal", 32, - { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bgezall $rs,$offset */ { IQ2000_INSN_BGEZALL, "bgezall", "bgezall", 32, - { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bgezl $rs,$offset */ { IQ2000_INSN_BGEZL, "bgezl", "bgezl", 32, - { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bltz $rs,$offset */ { IQ2000_INSN_BLTZ, "bltz", "bltz", 32, - { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bltzl $rs,$offset */ { IQ2000_INSN_BLTZL, "bltzl", "bltzl", 32, - { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bltzal $rs,$offset */ { IQ2000_INSN_BLTZAL, "bltzal", "bltzal", 32, - { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bltzall $rs,$offset */ { IQ2000_INSN_BLTZALL, "bltzall", "bltzall", 32, - { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bmb0 $rs,$rt,$offset */ { IQ2000_INSN_BMB0, "bmb0", "bmb0", 32, - { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bmb1 $rs,$rt,$offset */ { IQ2000_INSN_BMB1, "bmb1", "bmb1", 32, - { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bmb2 $rs,$rt,$offset */ { IQ2000_INSN_BMB2, "bmb2", "bmb2", 32, - { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bmb3 $rs,$rt,$offset */ { IQ2000_INSN_BMB3, "bmb3", "bmb3", 32, - { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bne $rs,$rt,$offset */ { IQ2000_INSN_BNE, "bne", "bne", 32, - { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* bnel $rs,$rt,$offset */ { IQ2000_INSN_BNEL, "bnel", "bnel", 32, - { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* jalr $rd,$rs */ { IQ2000_INSN_JALR, "jalr", "jalr", 32, - { 0|A(USES_RS)|A(USES_RD)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RS)|A(USES_RD)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* jr $rs */ { IQ2000_INSN_JR, "jr", "jr", 32, - { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } } + { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* lb $rt,$lo16($base) */ { IQ2000_INSN_LB, "lb", "lb", 32, - { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } } }, /* lbu $rt,$lo16($base) */ { IQ2000_INSN_LBU, "lbu", "lbu", 32, - { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } } }, /* lh $rt,$lo16($base) */ { IQ2000_INSN_LH, "lh", "lh", 32, - { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } } }, /* lhu $rt,$lo16($base) */ { IQ2000_INSN_LHU, "lhu", "lhu", 32, - { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } } }, /* lui $rt,$hi16 */ { IQ2000_INSN_LUI, "lui", "lui", 32, - { 0|A(USES_RT), { (1<<MACH_BASE) } } + { 0|A(USES_RT), { { { (1<<MACH_BASE), 0 } } } } }, /* lw $rt,$lo16($base) */ { IQ2000_INSN_LW, "lw", "lw", 32, - { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } } }, /* sb $rt,$lo16($base) */ { IQ2000_INSN_SB, "sb", "sb", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } } }, /* sh $rt,$lo16($base) */ { IQ2000_INSN_SH, "sh", "sh", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } } }, /* sw $rt,$lo16($base) */ { IQ2000_INSN_SW, "sw", "sw", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_BASE) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } } }, /* break */ { IQ2000_INSN_BREAK, "break", "break", 32, - { 0, { (1<<MACH_BASE) } } + { 0, { { { (1<<MACH_BASE), 0 } } } } }, /* syscall */ { IQ2000_INSN_SYSCALL, "syscall", "syscall", 32, - { 0|A(YIELD_INSN), { (1<<MACH_BASE) } } + { 0|A(YIELD_INSN), { { { (1<<MACH_BASE), 0 } } } } }, /* andoui $rt,$rs,$hi16 */ { IQ2000_INSN_ANDOUI, "andoui", "andoui", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ2000), 0 } } } } }, /* andoui ${rt-rs},$hi16 */ { -1, "andoui2", "andoui", 32, - { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } } }, /* orui ${rt-rs},$hi16 */ { -1, "orui2", "orui", 32, - { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } } }, /* orui $rt,$rs,$hi16 */ { IQ2000_INSN_ORUI, "orui", "orui", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ2000), 0 } } } } }, /* bgtz $rs,$offset */ { IQ2000_INSN_BGTZ, "bgtz", "bgtz", 32, - { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* bgtzl $rs,$offset */ { IQ2000_INSN_BGTZL, "bgtzl", "bgtzl", 32, - { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* blez $rs,$offset */ { IQ2000_INSN_BLEZ, "blez", "blez", 32, - { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* blezl $rs,$offset */ { IQ2000_INSN_BLEZL, "blezl", "blezl", 32, - { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* mrgb $rd,$rs,$rt,$mask */ { IQ2000_INSN_MRGB, "mrgb", "mrgb", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* mrgb ${rd-rs},$rt,$mask */ { -1, "mrgb2", "mrgb", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } } }, /* bctxt $rs,$offset */ { IQ2000_INSN_BCTXT, "bctxt", "bctxt", 32, - { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* bc0f $offset */ { IQ2000_INSN_BC0F, "bc0f", "bc0f", 32, - { 0|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* bc0fl $offset */ { IQ2000_INSN_BC0FL, "bc0fl", "bc0fl", 32, - { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* bc3f $offset */ { IQ2000_INSN_BC3F, "bc3f", "bc3f", 32, - { 0|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* bc3fl $offset */ { IQ2000_INSN_BC3FL, "bc3fl", "bc3fl", 32, - { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* bc0t $offset */ { IQ2000_INSN_BC0T, "bc0t", "bc0t", 32, - { 0|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* bc0tl $offset */ { IQ2000_INSN_BC0TL, "bc0tl", "bc0tl", 32, - { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* bc3t $offset */ { IQ2000_INSN_BC3T, "bc3t", "bc3t", 32, - { 0|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* bc3tl $offset */ { IQ2000_INSN_BC3TL, "bc3tl", "bc3tl", 32, - { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* cfc0 $rt,$rd */ { IQ2000_INSN_CFC0, "cfc0", "cfc0", 32, - { 0|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } } }, /* cfc1 $rt,$rd */ { IQ2000_INSN_CFC1, "cfc1", "cfc1", 32, - { 0|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } } }, /* cfc2 $rt,$rd */ { IQ2000_INSN_CFC2, "cfc2", "cfc2", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } } }, /* cfc3 $rt,$rd */ { IQ2000_INSN_CFC3, "cfc3", "cfc3", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } } }, /* chkhdr $rd,$rt */ { IQ2000_INSN_CHKHDR, "chkhdr", "chkhdr", 32, - { 0|A(YIELD_INSN)|A(USES_RD)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RD)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } } }, /* ctc0 $rt,$rd */ { IQ2000_INSN_CTC0, "ctc0", "ctc0", 32, - { 0|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* ctc1 $rt,$rd */ { IQ2000_INSN_CTC1, "ctc1", "ctc1", 32, - { 0|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* ctc2 $rt,$rd */ { IQ2000_INSN_CTC2, "ctc2", "ctc2", 32, - { 0|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* ctc3 $rt,$rd */ { IQ2000_INSN_CTC3, "ctc3", "ctc3", 32, - { 0|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* jcr $rs */ { IQ2000_INSN_JCR, "jcr", "jcr", 32, - { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* luc32 $rt,$rd */ { IQ2000_INSN_LUC32, "luc32", "luc32", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* luc32l $rt,$rd */ { IQ2000_INSN_LUC32L, "luc32l", "luc32l", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* luc64 $rt,$rd */ { IQ2000_INSN_LUC64, "luc64", "luc64", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* luc64l $rt,$rd */ { IQ2000_INSN_LUC64L, "luc64l", "luc64l", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* luk $rt,$rd */ { IQ2000_INSN_LUK, "luk", "luk", 32, - { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* lulck $rt */ { IQ2000_INSN_LULCK, "lulck", "lulck", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* lum32 $rt,$rd */ { IQ2000_INSN_LUM32, "lum32", "lum32", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* lum32l $rt,$rd */ { IQ2000_INSN_LUM32L, "lum32l", "lum32l", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* lum64 $rt,$rd */ { IQ2000_INSN_LUM64, "lum64", "lum64", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* lum64l $rt,$rd */ { IQ2000_INSN_LUM64L, "lum64l", "lum64l", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* lur $rt,$rd */ { IQ2000_INSN_LUR, "lur", "lur", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* lurl $rt,$rd */ { IQ2000_INSN_LURL, "lurl", "lurl", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* luulck $rt */ { IQ2000_INSN_LUULCK, "luulck", "luulck", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* mfc0 $rt,$rd */ { IQ2000_INSN_MFC0, "mfc0", "mfc0", 32, - { 0|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } } }, /* mfc1 $rt,$rd */ { IQ2000_INSN_MFC1, "mfc1", "mfc1", 32, - { 0|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } } }, /* mfc2 $rt,$rd */ { IQ2000_INSN_MFC2, "mfc2", "mfc2", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } } }, /* mfc3 $rt,$rd */ { IQ2000_INSN_MFC3, "mfc3", "mfc3", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } } }, /* mtc0 $rt,$rd */ { IQ2000_INSN_MTC0, "mtc0", "mtc0", 32, - { 0|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* mtc1 $rt,$rd */ { IQ2000_INSN_MTC1, "mtc1", "mtc1", 32, - { 0|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* mtc2 $rt,$rd */ { IQ2000_INSN_MTC2, "mtc2", "mtc2", 32, - { 0|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* mtc3 $rt,$rd */ { IQ2000_INSN_MTC3, "mtc3", "mtc3", 32, - { 0|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* pkrl $rd,$rt */ { IQ2000_INSN_PKRL, "pkrl", "pkrl", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* pkrlr1 $rt,$_index,$count */ { IQ2000_INSN_PKRLR1, "pkrlr1", "pkrlr1", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* pkrlr30 $rt,$_index,$count */ { IQ2000_INSN_PKRLR30, "pkrlr30", "pkrlr30", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* rb $rd,$rt */ { IQ2000_INSN_RB, "rb", "rb", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* rbr1 $rt,$_index,$count */ { IQ2000_INSN_RBR1, "rbr1", "rbr1", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* rbr30 $rt,$_index,$count */ { IQ2000_INSN_RBR30, "rbr30", "rbr30", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* rfe */ { IQ2000_INSN_RFE, "rfe", "rfe", 32, - { 0, { (1<<MACH_IQ2000) } } + { 0, { { { (1<<MACH_IQ2000), 0 } } } } }, /* rx $rd,$rt */ { IQ2000_INSN_RX, "rx", "rx", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* rxr1 $rt,$_index,$count */ { IQ2000_INSN_RXR1, "rxr1", "rxr1", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* rxr30 $rt,$_index,$count */ { IQ2000_INSN_RXR30, "rxr30", "rxr30", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* sleep */ { IQ2000_INSN_SLEEP, "sleep", "sleep", 32, - { 0|A(YIELD_INSN), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN), { { { (1<<MACH_IQ2000), 0 } } } } }, /* srrd $rt */ { IQ2000_INSN_SRRD, "srrd", "srrd", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* srrdl $rt */ { IQ2000_INSN_SRRDL, "srrdl", "srrdl", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* srulck $rt */ { IQ2000_INSN_SRULCK, "srulck", "srulck", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* srwr $rt,$rd */ { IQ2000_INSN_SRWR, "srwr", "srwr", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* srwru $rt,$rd */ { IQ2000_INSN_SRWRU, "srwru", "srwru", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* trapqfl */ { IQ2000_INSN_TRAPQFL, "trapqfl", "trapqfl", 32, - { 0|A(YIELD_INSN), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN), { { { (1<<MACH_IQ2000), 0 } } } } }, /* trapqne */ { IQ2000_INSN_TRAPQNE, "trapqne", "trapqne", 32, - { 0|A(YIELD_INSN), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN), { { { (1<<MACH_IQ2000), 0 } } } } }, /* traprel $rt */ { IQ2000_INSN_TRAPREL, "traprel", "traprel", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* wb $rd,$rt */ { IQ2000_INSN_WB, "wb", "wb", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* wbu $rd,$rt */ { IQ2000_INSN_WBU, "wbu", "wbu", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* wbr1 $rt,$_index,$count */ { IQ2000_INSN_WBR1, "wbr1", "wbr1", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* wbr1u $rt,$_index,$count */ { IQ2000_INSN_WBR1U, "wbr1u", "wbr1u", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* wbr30 $rt,$_index,$count */ { IQ2000_INSN_WBR30, "wbr30", "wbr30", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* wbr30u $rt,$_index,$count */ { IQ2000_INSN_WBR30U, "wbr30u", "wbr30u", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* wx $rd,$rt */ { IQ2000_INSN_WX, "wx", "wx", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* wxu $rd,$rt */ { IQ2000_INSN_WXU, "wxu", "wxu", 32, - { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } } }, /* wxr1 $rt,$_index,$count */ { IQ2000_INSN_WXR1, "wxr1", "wxr1", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* wxr1u $rt,$_index,$count */ { IQ2000_INSN_WXR1U, "wxr1u", "wxr1u", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* wxr30 $rt,$_index,$count */ { IQ2000_INSN_WXR30, "wxr30", "wxr30", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* wxr30u $rt,$_index,$count */ { IQ2000_INSN_WXR30U, "wxr30u", "wxr30u", 32, - { 0|A(YIELD_INSN)|A(USES_RT), { (1<<MACH_IQ2000) } } + { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* ldw $rt,$lo16($base) */ { IQ2000_INSN_LDW, "ldw", "ldw", 32, - { 0|A(USES_RT)|A(LOAD_DELAY)|A(EVEN_REG_NUM), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(LOAD_DELAY)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ2000), 0 } } } } }, /* sdw $rt,$lo16($base) */ { IQ2000_INSN_SDW, "sdw", "sdw", 32, - { 0|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ2000), 0 } } } } }, /* j $jmptarg */ { IQ2000_INSN_J, "j", "j", 32, - { 0|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* jal $jmptarg */ { IQ2000_INSN_JAL, "jal", "jal", 32, - { 0|A(USES_R31)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(USES_R31)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* bmb $rs,$rt,$offset */ { IQ2000_INSN_BMB, "bmb", "bmb", 32, - { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ2000) } } + { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } } }, /* andoui $rt,$rs,$hi16 */ { IQ2000_INSN_ANDOUI_Q10, "andoui-q10", "andoui", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* andoui ${rt-rs},$hi16 */ { -1, "andoui2-q10", "andoui", 32, - { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* orui $rt,$rs,$hi16 */ { IQ2000_INSN_ORUI_Q10, "orui-q10", "orui", 32, - { 0|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* orui ${rt-rs},$hi16 */ { -1, "orui2-q10", "orui", 32, - { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* mrgb $rd,$rs,$rt,$maskq10 */ { IQ2000_INSN_MRGBQ10, "mrgbq10", "mrgb", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* mrgb ${rd-rs},$rt,$maskq10 */ { -1, "mrgbq102", "mrgb", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* j $jmptarg */ { IQ2000_INSN_JQ10, "jq10", "j", 32, - { 0|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* jal $rt,$jmptarg */ { IQ2000_INSN_JALQ10, "jalq10", "jal", 32, - { 0|A(USES_RT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* jal $jmptarg */ { IQ2000_INSN_JALQ10_2, "jalq10-2", "jal", 32, - { 0|A(USES_RT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* bbil $rs($bitnum),$offset */ { IQ2000_INSN_BBIL, "bbil", "bbil", 32, - { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* bbinl $rs($bitnum),$offset */ { IQ2000_INSN_BBINL, "bbinl", "bbinl", 32, - { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* bbvl $rs,$rt,$offset */ { IQ2000_INSN_BBVL, "bbvl", "bbvl", 32, - { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* bbvnl $rs,$rt,$offset */ { IQ2000_INSN_BBVNL, "bbvnl", "bbvnl", 32, - { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* bgtzal $rs,$offset */ { IQ2000_INSN_BGTZAL, "bgtzal", "bgtzal", 32, - { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* bgtzall $rs,$offset */ { IQ2000_INSN_BGTZALL, "bgtzall", "bgtzall", 32, - { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* blezal $rs,$offset */ { IQ2000_INSN_BLEZAL, "blezal", "blezal", 32, - { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* blezall $rs,$offset */ { IQ2000_INSN_BLEZALL, "blezall", "blezall", 32, - { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* bgtz $rs,$offset */ { IQ2000_INSN_BGTZ_Q10, "bgtz-q10", "bgtz", 32, - { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* bgtzl $rs,$offset */ { IQ2000_INSN_BGTZL_Q10, "bgtzl-q10", "bgtzl", 32, - { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* blez $rs,$offset */ { IQ2000_INSN_BLEZ_Q10, "blez-q10", "blez", 32, - { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* blezl $rs,$offset */ { IQ2000_INSN_BLEZL_Q10, "blezl-q10", "blezl", 32, - { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* bmb $rs,$rt,$offset */ { IQ2000_INSN_BMB_Q10, "bmb-q10", "bmb", 32, - { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* bmbl $rs,$rt,$offset */ { IQ2000_INSN_BMBL, "bmbl", "bmbl", 32, - { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* bri $rs,$offset */ { IQ2000_INSN_BRI, "bri", "bri", 32, - { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* brv $rs,$offset */ { IQ2000_INSN_BRV, "brv", "brv", 32, - { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* bctx $rs,$offset */ { IQ2000_INSN_BCTX, "bctx", "bctx", 32, - { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_IQ10) } } + { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } } }, /* yield */ { IQ2000_INSN_YIELD, "yield", "yield", 32, - { 0, { (1<<MACH_IQ10) } } + { 0, { { { (1<<MACH_IQ10), 0 } } } } }, /* crc32 $rd,$rs,$rt */ { IQ2000_INSN_CRC32, "crc32", "crc32", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* crc32b $rd,$rs,$rt */ { IQ2000_INSN_CRC32B, "crc32b", "crc32b", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* cnt1s $rd,$rs */ { IQ2000_INSN_CNT1S, "cnt1s", "cnt1s", 32, - { 0|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* avail $rd */ { IQ2000_INSN_AVAIL, "avail", "avail", 32, - { 0|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* free $rd,$rs */ { IQ2000_INSN_FREE, "free", "free", 32, - { 0|A(USES_RD)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* tstod $rd,$rs */ { IQ2000_INSN_TSTOD, "tstod", "tstod", 32, - { 0|A(USES_RD)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cmphdr $rd */ { IQ2000_INSN_CMPHDR, "cmphdr", "cmphdr", 32, - { 0|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* mcid $rd,$rt */ { IQ2000_INSN_MCID, "mcid", "mcid", 32, - { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* dba $rd */ { IQ2000_INSN_DBA, "dba", "dba", 32, - { 0|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* dbd $rd,$rs,$rt */ { IQ2000_INSN_DBD, "dbd", "dbd", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* dpwt $rd,$rs */ { IQ2000_INSN_DPWT, "dpwt", "dpwt", 32, - { 0|A(USES_RD)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* chkhdr $rd,$rs */ { IQ2000_INSN_CHKHDRQ10, "chkhdrq10", "chkhdr", 32, - { 0|A(USES_RD)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* rba $rd,$rs,$rt */ { IQ2000_INSN_RBA, "rba", "rba", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* rbal $rd,$rs,$rt */ { IQ2000_INSN_RBAL, "rbal", "rbal", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* rbar $rd,$rs,$rt */ { IQ2000_INSN_RBAR, "rbar", "rbar", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* wba $rd,$rs,$rt */ { IQ2000_INSN_WBA, "wba", "wba", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* wbau $rd,$rs,$rt */ { IQ2000_INSN_WBAU, "wbau", "wbau", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* wbac $rd,$rs,$rt */ { IQ2000_INSN_WBAC, "wbac", "wbac", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* rbi $rd,$rs,$rt,$bytecount */ { IQ2000_INSN_RBI, "rbi", "rbi", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* rbil $rd,$rs,$rt,$bytecount */ { IQ2000_INSN_RBIL, "rbil", "rbil", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* rbir $rd,$rs,$rt,$bytecount */ { IQ2000_INSN_RBIR, "rbir", "rbir", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* wbi $rd,$rs,$rt,$bytecount */ { IQ2000_INSN_WBI, "wbi", "wbi", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* wbic $rd,$rs,$rt,$bytecount */ { IQ2000_INSN_WBIC, "wbic", "wbic", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* wbiu $rd,$rs,$rt,$bytecount */ { IQ2000_INSN_WBIU, "wbiu", "wbiu", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrli $rd,$rs,$rt,$bytecount */ { IQ2000_INSN_PKRLI, "pkrli", "pkrli", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrlih $rd,$rs,$rt,$bytecount */ { IQ2000_INSN_PKRLIH, "pkrlih", "pkrlih", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrliu $rd,$rs,$rt,$bytecount */ { IQ2000_INSN_PKRLIU, "pkrliu", "pkrliu", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrlic $rd,$rs,$rt,$bytecount */ { IQ2000_INSN_PKRLIC, "pkrlic", "pkrlic", 32, - { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrla $rd,$rs,$rt */ { IQ2000_INSN_PKRLA, "pkrla", "pkrla", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrlau $rd,$rs,$rt */ { IQ2000_INSN_PKRLAU, "pkrlau", "pkrlau", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrlah $rd,$rs,$rt */ { IQ2000_INSN_PKRLAH, "pkrlah", "pkrlah", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrlac $rd,$rs,$rt */ { IQ2000_INSN_PKRLAC, "pkrlac", "pkrlac", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* lock $rd,$rt */ { IQ2000_INSN_LOCK, "lock", "lock", 32, - { 0|A(USES_RT)|A(USES_RD), { (1<<MACH_IQ10) } } + { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } } }, /* unlk $rd,$rt */ { IQ2000_INSN_UNLK, "unlk", "unlk", 32, - { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } } }, /* swrd $rd,$rt */ { IQ2000_INSN_SWRD, "swrd", "swrd", 32, - { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } } }, /* swrdl $rd,$rt */ { IQ2000_INSN_SWRDL, "swrdl", "swrdl", 32, - { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } } }, /* swwr $rd,$rs,$rt */ { IQ2000_INSN_SWWR, "swwr", "swwr", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* swwru $rd,$rs,$rt */ { IQ2000_INSN_SWWRU, "swwru", "swwru", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* dwrd $rd,$rt */ { IQ2000_INSN_DWRD, "dwrd", "dwrd", 32, - { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* dwrdl $rd,$rt */ { IQ2000_INSN_DWRDL, "dwrdl", "dwrdl", 32, - { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cam36 $rd,$rt,${cam-z},${cam-y} */ { IQ2000_INSN_CAM36, "cam36", "cam36", 32, - { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } } }, /* cam72 $rd,$rt,${cam-y},${cam-z} */ { IQ2000_INSN_CAM72, "cam72", "cam72", 32, - { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } } }, /* cam144 $rd,$rt,${cam-y},${cam-z} */ { IQ2000_INSN_CAM144, "cam144", "cam144", 32, - { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } } }, /* cam288 $rd,$rt,${cam-y},${cam-z} */ { IQ2000_INSN_CAM288, "cam288", "cam288", 32, - { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32and $rd,$rs,$rt */ { IQ2000_INSN_CM32AND, "cm32and", "cm32and", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32andn $rd,$rs,$rt */ { IQ2000_INSN_CM32ANDN, "cm32andn", "cm32andn", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32or $rd,$rs,$rt */ { IQ2000_INSN_CM32OR, "cm32or", "cm32or", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32ra $rd,$rs,$rt */ { IQ2000_INSN_CM32RA, "cm32ra", "cm32ra", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32rd $rd,$rt */ { IQ2000_INSN_CM32RD, "cm32rd", "cm32rd", 32, - { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32ri $rd,$rt */ { IQ2000_INSN_CM32RI, "cm32ri", "cm32ri", 32, - { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32rs $rd,$rs,$rt */ { IQ2000_INSN_CM32RS, "cm32rs", "cm32rs", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32sa $rd,$rs,$rt */ { IQ2000_INSN_CM32SA, "cm32sa", "cm32sa", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32sd $rd,$rt */ { IQ2000_INSN_CM32SD, "cm32sd", "cm32sd", 32, - { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32si $rd,$rt */ { IQ2000_INSN_CM32SI, "cm32si", "cm32si", 32, - { 0|A(USES_RD)|A(USES_RT), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32ss $rd,$rs,$rt */ { IQ2000_INSN_CM32SS, "cm32ss", "cm32ss", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32xor $rd,$rs,$rt */ { IQ2000_INSN_CM32XOR, "cm32xor", "cm32xor", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64clr $rd,$rt */ { IQ2000_INSN_CM64CLR, "cm64clr", "cm64clr", 32, - { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64ra $rd,$rs,$rt */ { IQ2000_INSN_CM64RA, "cm64ra", "cm64ra", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64rd $rd,$rt */ { IQ2000_INSN_CM64RD, "cm64rd", "cm64rd", 32, - { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64ri $rd,$rt */ { IQ2000_INSN_CM64RI, "cm64ri", "cm64ri", 32, - { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64ria2 $rd,$rs,$rt */ { IQ2000_INSN_CM64RIA2, "cm64ria2", "cm64ria2", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64rs $rd,$rs,$rt */ { IQ2000_INSN_CM64RS, "cm64rs", "cm64rs", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64sa $rd,$rs,$rt */ { IQ2000_INSN_CM64SA, "cm64sa", "cm64sa", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64sd $rd,$rt */ { IQ2000_INSN_CM64SD, "cm64sd", "cm64sd", 32, - { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64si $rd,$rt */ { IQ2000_INSN_CM64SI, "cm64si", "cm64si", 32, - { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64sia2 $rd,$rs,$rt */ { IQ2000_INSN_CM64SIA2, "cm64sia2", "cm64sia2", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64ss $rd,$rs,$rt */ { IQ2000_INSN_CM64SS, "cm64ss", "cm64ss", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128ria2 $rd,$rs,$rt */ { IQ2000_INSN_CM128RIA2, "cm128ria2", "cm128ria2", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128ria3 $rd,$rs,$rt,${cm-3z} */ { IQ2000_INSN_CM128RIA3, "cm128ria3", "cm128ria3", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128ria4 $rd,$rs,$rt,${cm-4z} */ { IQ2000_INSN_CM128RIA4, "cm128ria4", "cm128ria4", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128sia2 $rd,$rs,$rt */ { IQ2000_INSN_CM128SIA2, "cm128sia2", "cm128sia2", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128sia3 $rd,$rs,$rt,${cm-3z} */ { IQ2000_INSN_CM128SIA3, "cm128sia3", "cm128sia3", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128sia4 $rd,$rs,$rt,${cm-4z} */ { IQ2000_INSN_CM128SIA4, "cm128sia4", "cm128sia4", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128vsa $rd,$rs,$rt */ { IQ2000_INSN_CM128VSA, "cm128vsa", "cm128vsa", 32, - { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cfc $rd,$rt */ { IQ2000_INSN_CFC, "cfc", "cfc", 32, - { 0|A(YIELD_INSN)|A(USES_RD)|A(LOAD_DELAY), { (1<<MACH_IQ10) } } + { 0|A(YIELD_INSN)|A(USES_RD)|A(LOAD_DELAY), { { { (1<<MACH_IQ10), 0 } } } } }, /* ctc $rs,$rt */ { IQ2000_INSN_CTC, "ctc", "ctc", 32, - { 0|A(USES_RS), { (1<<MACH_IQ10) } } + { 0|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } } }, }; @@ -1978,7 +1978,7 @@ static void iq2000_cgen_rebuild_tables (CGEN_CPU_TABLE *cd) { int i; - unsigned int isas = cd->isas; + CGEN_BITSET *isas = cd->isas; unsigned int machs = cd->machs; cd->int_insn_p = CGEN_INT_INSN_P; @@ -1990,7 +1990,7 @@ iq2000_cgen_rebuild_tables (CGEN_CPU_TABLE *cd) cd->min_insn_bitsize = 65535; /* Some ridiculously big number. */ cd->max_insn_bitsize = 0; for (i = 0; i < MAX_ISAS; ++i) - if (((1 << i) & isas) != 0) + if (cgen_bitset_contains (isas, i)) { const CGEN_ISA *isa = & iq2000_cgen_isa_table[i]; @@ -2075,7 +2075,7 @@ iq2000_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...) { CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE)); static int init_p; - unsigned int isas = 0; /* 0 = "unspecified" */ + CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; va_list ap; @@ -2094,7 +2094,7 @@ iq2000_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...) switch (arg_type) { case CGEN_CPU_OPEN_ISAS : - isas = va_arg (ap, unsigned int); + isas = va_arg (ap, CGEN_BITSET *); break; case CGEN_CPU_OPEN_MACHS : machs = va_arg (ap, unsigned int); @@ -2125,9 +2125,6 @@ iq2000_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...) machs = (1 << MAX_MACHS) - 1; /* Base mach is always selected. */ machs |= 1; - /* ISA unspecified means "all". */ - if (isas == 0) - isas = (1 << MAX_ISAS) - 1; if (endian == CGEN_ENDIAN_UNKNOWN) { /* ??? If target has only one, could have a default. */ @@ -2135,7 +2132,7 @@ iq2000_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...) abort (); } - cd->isas = isas; + cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; /* FIXME: for the sparc case we can determine insn-endianness statically. diff --git a/opcodes/iq2000-desc.h b/opcodes/iq2000-desc.h index cd644a8..9efdca9 100644 --- a/opcodes/iq2000-desc.h +++ b/opcodes/iq2000-desc.h @@ -25,6 +25,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef IQ2000_CPU_H #define IQ2000_CPU_H +#include "opcode/cgen-bitset.h" + #define CGEN_ARCH iq2000 /* Given symbol S, return iq2000_cgen_<S>. */ @@ -200,6 +202,15 @@ typedef enum cgen_ifld_attr { /* Number of non-boolean elements in cgen_ifld_attr. */ #define CGEN_IFLD_NBOOL_ATTRS (CGEN_IFLD_END_NBOOLS - CGEN_IFLD_START_NBOOLS - 1) +/* cgen_ifld attribute accessor macros. */ +#define CGEN_ATTR_CGEN_IFLD_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_IFLD_MACH-CGEN_IFLD_START_NBOOLS-1].nonbitset) +#define CGEN_ATTR_CGEN_IFLD_VIRTUAL_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_VIRTUAL)) != 0) +#define CGEN_ATTR_CGEN_IFLD_PCREL_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_PCREL_ADDR)) != 0) +#define CGEN_ATTR_CGEN_IFLD_ABS_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_ABS_ADDR)) != 0) +#define CGEN_ATTR_CGEN_IFLD_RESERVED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_RESERVED)) != 0) +#define CGEN_ATTR_CGEN_IFLD_SIGN_OPT_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_SIGN_OPT)) != 0) +#define CGEN_ATTR_CGEN_IFLD_SIGNED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_SIGNED)) != 0) + /* Enum declaration for iq2000 ifield types. */ typedef enum ifield_type { IQ2000_F_NIL, IQ2000_F_ANYOF, IQ2000_F_OPCODE, IQ2000_F_RS @@ -227,6 +238,13 @@ typedef enum cgen_hw_attr { /* Number of non-boolean elements in cgen_hw_attr. */ #define CGEN_HW_NBOOL_ATTRS (CGEN_HW_END_NBOOLS - CGEN_HW_START_NBOOLS - 1) +/* cgen_hw attribute accessor macros. */ +#define CGEN_ATTR_CGEN_HW_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_HW_MACH-CGEN_HW_START_NBOOLS-1].nonbitset) +#define CGEN_ATTR_CGEN_HW_VIRTUAL_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_VIRTUAL)) != 0) +#define CGEN_ATTR_CGEN_HW_CACHE_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_CACHE_ADDR)) != 0) +#define CGEN_ATTR_CGEN_HW_PC_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_PC)) != 0) +#define CGEN_ATTR_CGEN_HW_PROFILE_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_PROFILE)) != 0) + /* Enum declaration for iq2000 hardware types. */ typedef enum cgen_hw_type { HW_H_MEMORY, HW_H_SINT, HW_H_UINT, HW_H_ADDR @@ -247,6 +265,17 @@ typedef enum cgen_operand_attr { /* Number of non-boolean elements in cgen_operand_attr. */ #define CGEN_OPERAND_NBOOL_ATTRS (CGEN_OPERAND_END_NBOOLS - CGEN_OPERAND_START_NBOOLS - 1) +/* cgen_operand attribute accessor macros. */ +#define CGEN_ATTR_CGEN_OPERAND_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_OPERAND_MACH-CGEN_OPERAND_START_NBOOLS-1].nonbitset) +#define CGEN_ATTR_CGEN_OPERAND_VIRTUAL_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_VIRTUAL)) != 0) +#define CGEN_ATTR_CGEN_OPERAND_PCREL_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_PCREL_ADDR)) != 0) +#define CGEN_ATTR_CGEN_OPERAND_ABS_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_ABS_ADDR)) != 0) +#define CGEN_ATTR_CGEN_OPERAND_SIGN_OPT_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_SIGN_OPT)) != 0) +#define CGEN_ATTR_CGEN_OPERAND_SIGNED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_SIGNED)) != 0) +#define CGEN_ATTR_CGEN_OPERAND_NEGATIVE_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_NEGATIVE)) != 0) +#define CGEN_ATTR_CGEN_OPERAND_RELAX_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_RELAX)) != 0) +#define CGEN_ATTR_CGEN_OPERAND_SEM_ONLY_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_SEM_ONLY)) != 0) + /* Enum declaration for iq2000 operand types. */ typedef enum cgen_operand_type { IQ2000_OPERAND_PC, IQ2000_OPERAND_RS, IQ2000_OPERAND_RT, IQ2000_OPERAND_RD @@ -281,6 +310,27 @@ typedef enum cgen_insn_attr { /* Number of non-boolean elements in cgen_insn_attr. */ #define CGEN_INSN_NBOOL_ATTRS (CGEN_INSN_END_NBOOLS - CGEN_INSN_START_NBOOLS - 1) +/* cgen_insn attribute accessor macros. */ +#define CGEN_ATTR_CGEN_INSN_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_INSN_MACH-CGEN_INSN_START_NBOOLS-1].nonbitset) +#define CGEN_ATTR_CGEN_INSN_ALIAS_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_ALIAS)) != 0) +#define CGEN_ATTR_CGEN_INSN_VIRTUAL_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_VIRTUAL)) != 0) +#define CGEN_ATTR_CGEN_INSN_UNCOND_CTI_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_UNCOND_CTI)) != 0) +#define CGEN_ATTR_CGEN_INSN_COND_CTI_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_COND_CTI)) != 0) +#define CGEN_ATTR_CGEN_INSN_SKIP_CTI_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_SKIP_CTI)) != 0) +#define CGEN_ATTR_CGEN_INSN_DELAY_SLOT_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_DELAY_SLOT)) != 0) +#define CGEN_ATTR_CGEN_INSN_RELAXABLE_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_RELAXABLE)) != 0) +#define CGEN_ATTR_CGEN_INSN_RELAXED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_RELAXED)) != 0) +#define CGEN_ATTR_CGEN_INSN_NO_DIS_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_NO_DIS)) != 0) +#define CGEN_ATTR_CGEN_INSN_PBB_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_PBB)) != 0) +#define CGEN_ATTR_CGEN_INSN_YIELD_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_YIELD_INSN)) != 0) +#define CGEN_ATTR_CGEN_INSN_LOAD_DELAY_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_LOAD_DELAY)) != 0) +#define CGEN_ATTR_CGEN_INSN_EVEN_REG_NUM_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_EVEN_REG_NUM)) != 0) +#define CGEN_ATTR_CGEN_INSN_UNSUPPORTED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_UNSUPPORTED)) != 0) +#define CGEN_ATTR_CGEN_INSN_USES_RD_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_USES_RD)) != 0) +#define CGEN_ATTR_CGEN_INSN_USES_RS_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_USES_RS)) != 0) +#define CGEN_ATTR_CGEN_INSN_USES_RT_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_USES_RT)) != 0) +#define CGEN_ATTR_CGEN_INSN_USES_R31_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_USES_R31)) != 0) + /* cgen.h uses things we just defined. */ #include "opcode/cgen.h" diff --git a/opcodes/iq2000-dis.c b/opcodes/iq2000-dis.c index 02f535e..b8a7c2e 100644 --- a/opcodes/iq2000-dis.c +++ b/opcodes/iq2000-dis.c @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2005 + Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU Binutils and GDB, the GNU debugger. @@ -497,7 +497,7 @@ default_print_insn (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info) typedef struct cpu_desc_list { struct cpu_desc_list *next; - int isa; + CGEN_BITSET *isa; int mach; int endian; CGEN_CPU_DESC cd; @@ -509,11 +509,12 @@ print_insn_iq2000 (bfd_vma pc, disassemble_info *info) static cpu_desc_list *cd_list = 0; cpu_desc_list *cl = 0; static CGEN_CPU_DESC cd = 0; - static int prev_isa; + static CGEN_BITSET *prev_isa; static int prev_mach; static int prev_endian; int length; - int isa,mach; + CGEN_BITSET *isa; + int mach; int endian = (info->endian == BFD_ENDIAN_BIG ? CGEN_ENDIAN_BIG : CGEN_ENDIAN_LITTLE); @@ -536,25 +537,34 @@ print_insn_iq2000 (bfd_vma pc, disassemble_info *info) #endif #ifdef CGEN_COMPUTE_ISA - isa = CGEN_COMPUTE_ISA (info); + { + static CGEN_BITSET *permanent_isa; + + if (!permanent_isa) + permanent_isa = cgen_bitset_create (MAX_ISAS); + isa = permanent_isa; + cgen_bitset_clear (isa); + cgen_bitset_add (isa, CGEN_COMPUTE_ISA (info)); + } #else isa = info->insn_sets; #endif /* If we've switched cpu's, try to find a handle we've used before */ if (cd - && (isa != prev_isa + && (cgen_bitset_compare (isa, prev_isa) != 0 || mach != prev_mach || endian != prev_endian)) { cd = 0; for (cl = cd_list; cl; cl = cl->next) { - if (cl->isa == isa && + if (cgen_bitset_compare (cl->isa, isa) == 0 && cl->mach == mach && cl->endian == endian) { cd = cl->cd; + prev_isa = cd->isas; break; } } @@ -570,7 +580,7 @@ print_insn_iq2000 (bfd_vma pc, disassemble_info *info) abort (); mach_name = arch_type->printable_name; - prev_isa = isa; + prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; cd = iq2000_cgen_cpu_open (CGEN_CPU_OPEN_ISAS, prev_isa, @@ -583,7 +593,7 @@ print_insn_iq2000 (bfd_vma pc, disassemble_info *info) /* Save this away for future reference. */ cl = xmalloc (sizeof (struct cpu_desc_list)); cl->cd = cd; - cl->isa = isa; + cl->isa = prev_isa; cl->mach = mach; cl->endian = endian; cl->next = cd_list; diff --git a/opcodes/iq2000-opc.c b/opcodes/iq2000-opc.c index 2ea3bf8..6f2f257 100644 --- a/opcodes/iq2000-opc.c +++ b/opcodes/iq2000-opc.c @@ -2312,472 +2312,472 @@ static const CGEN_IBASE iq2000_cgen_macro_insn_table[] = /* nop */ { -1, "nop", "nop", 32, - { 0|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* li $rs,$imm */ { -1, "li", "li", 32, - { 0|A(NO_DIS)|A(USES_RS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* move $rd,$rt */ { -1, "move", "move", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RD)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RD)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* lb $rt,$lo16 */ { -1, "lb-base-0", "lb", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* lbu $rt,$lo16 */ { -1, "lbu-base-0", "lbu", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* lh $rt,$lo16 */ { -1, "lh-base-0", "lh", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* lw $rt,$lo16 */ { -1, "lw-base-0", "lw", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* add $rt,$rs,$lo16 */ { -1, "m-add", "add", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* addu $rt,$rs,$lo16 */ { -1, "m-addu", "addu", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* and $rt,$rs,$lo16 */ { -1, "m-and", "and", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* j $rs */ { -1, "m-j", "j", 32, - { 0|A(NO_DIS)|A(USES_RS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* or $rt,$rs,$lo16 */ { -1, "m-or", "or", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* sll $rd,$rt,$rs */ { -1, "m-sll", "sll", 32, - { 0|A(NO_DIS)|A(USES_RS)|A(USES_RT)|A(USES_RD)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RS)|A(USES_RT)|A(USES_RD)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* slt $rt,$rs,$imm */ { -1, "m-slt", "slt", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* sltu $rt,$rs,$imm */ { -1, "m-sltu", "sltu", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* sra $rd,$rt,$rs */ { -1, "m-sra", "sra", 32, - { 0|A(NO_DIS)|A(USES_RS)|A(USES_RT)|A(USES_RD)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RS)|A(USES_RT)|A(USES_RD)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* srl $rd,$rt,$rs */ { -1, "m-srl", "srl", 32, - { 0|A(NO_DIS)|A(USES_RS)|A(USES_RT)|A(USES_RD)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RS)|A(USES_RT)|A(USES_RD)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* not $rd,$rt */ { -1, "not", "not", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RD)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RD)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* subi $rt,$rs,$mlo16 */ { -1, "subi", "subi", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* sub $rt,$rs,$mlo16 */ { -1, "m-sub", "sub", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* subu $rt,$rs,$mlo16 */ { -1, "m-subu", "subu", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* sb $rt,$lo16 */ { -1, "sb-base-0", "sb", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* sh $rt,$lo16 */ { -1, "sh-base-0", "sh", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* sw $rt,$lo16 */ { -1, "sw-base-0", "sw", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* xor $rt,$rs,$lo16 */ { -1, "m-xor", "xor", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_BASE) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } }, /* ldw $rt,$lo16 */ { -1, "ldw-base-0", "ldw", 32, - { 0|A(NO_DIS)|A(USES_RS)|A(USES_RT)|A(LOAD_DELAY)|A(EVEN_REG_NUM)|A(ALIAS), { (1<<MACH_IQ2000) } } + { 0|A(NO_DIS)|A(USES_RS)|A(USES_RT)|A(LOAD_DELAY)|A(EVEN_REG_NUM)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } } }, /* sdw $rt,$lo16 */ { -1, "sdw-base-0", "sdw", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(EVEN_REG_NUM)|A(ALIAS), { (1<<MACH_IQ2000) } } + { 0|A(NO_DIS)|A(USES_RT)|A(EVEN_REG_NUM)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } } }, /* avail */ { -1, "m-avail", "avail", 32, - { 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cam36 $rd,$rt,${cam-z} */ { -1, "m-cam36", "cam36", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cam72 $rd,$rt,${cam-z} */ { -1, "m-cam72", "cam72", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cam144 $rd,$rt,${cam-z} */ { -1, "m-cam144", "cam144", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cam288 $rd,$rt,${cam-z} */ { -1, "m-cam288", "cam288", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32read $rd,$rt */ { -1, "m-cm32read", "cm32read", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64read $rd,$rt */ { -1, "m-cm64read", "cm64read", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32mlog $rs,$rt */ { -1, "m-cm32mlog", "cm32mlog", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32and $rs,$rt */ { -1, "m-cm32and", "cm32and", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32andn $rs,$rt */ { -1, "m-cm32andn", "cm32andn", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32or $rs,$rt */ { -1, "m-cm32or", "cm32or", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32ra $rs,$rt */ { -1, "m-cm32ra", "cm32ra", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32rd $rt */ { -1, "m-cm32rd", "cm32rd", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32ri $rt */ { -1, "m-cm32ri", "cm32ri", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32rs $rs,$rt */ { -1, "m-cm32rs", "cm32rs", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32sa $rs,$rt */ { -1, "m-cm32sa", "cm32sa", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32sd $rt */ { -1, "m-cm32sd", "cm32sd", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32si $rt */ { -1, "m-cm32si", "cm32si", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32ss $rs,$rt */ { -1, "m-cm32ss", "cm32ss", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm32xor $rs,$rt */ { -1, "m-cm32xor", "cm32xor", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64clr $rt */ { -1, "m-cm64clr", "cm64clr", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64ra $rs,$rt */ { -1, "m-cm64ra", "cm64ra", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64rd $rt */ { -1, "m-cm64rd", "cm64rd", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64ri $rt */ { -1, "m-cm64ri", "cm64ri", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64ria2 $rs,$rt */ { -1, "m-cm64ria2", "cm64ria2", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64rs $rs,$rt */ { -1, "m-cm64rs", "cm64rs", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64sa $rs,$rt */ { -1, "m-cm64sa", "cm64sa", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64sd $rt */ { -1, "m-cm64sd", "cm64sd", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64si $rt */ { -1, "m-cm64si", "cm64si", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64sia2 $rs,$rt */ { -1, "m-cm64sia2", "cm64sia2", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm64ss $rs,$rt */ { -1, "m-cm64ss", "cm64ss", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128ria2 $rs,$rt */ { -1, "m-cm128ria2", "cm128ria2", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128ria3 $rs,$rt,${cm-3z} */ { -1, "m-cm128ria3", "cm128ria3", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128ria4 $rs,$rt,${cm-4z} */ { -1, "m-cm128ria4", "cm128ria4", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128sia2 $rs,$rt */ { -1, "m-cm128sia2", "cm128sia2", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128sia3 $rs,$rt,${cm-3z} */ { -1, "m-cm128sia3", "cm128sia3", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cm128sia4 $rs,$rt,${cm-4z} */ { -1, "m-cm128sia4", "cm128sia4", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* cmphdr */ { -1, "m-cmphdr", "cmphdr", 32, - { 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* dbd $rd,$rt */ { -1, "m-dbd", "dbd", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RD)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RD)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* dbd $rt */ { -1, "m2-dbd", "dbd", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* dpwt $rs */ { -1, "m-dpwt", "dpwt", 32, - { 0|A(NO_DIS)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* free $rs */ { -1, "m-free", "free", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* lock $rt */ { -1, "m-lock", "lock", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrla $rs,$rt */ { -1, "m-pkrla", "pkrla", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrlac $rs,$rt */ { -1, "m-pkrlac", "pkrlac", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrlah $rs,$rt */ { -1, "m-pkrlah", "pkrlah", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrlau $rs,$rt */ { -1, "m-pkrlau", "pkrlau", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrli $rs,$rt,$bytecount */ { -1, "m-pkrli", "pkrli", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrlic $rs,$rt,$bytecount */ { -1, "m-pkrlic", "pkrlic", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrlih $rs,$rt,$bytecount */ { -1, "m-pkrlih", "pkrlih", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* pkrliu $rs,$rt,$bytecount */ { -1, "m-pkrliu", "pkrliu", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* rba $rs,$rt */ { -1, "m-rba", "rba", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* rbal $rs,$rt */ { -1, "m-rbal", "rbal", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* rbar $rs,$rt */ { -1, "m-rbar", "rbar", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* rbi $rs,$rt,$bytecount */ { -1, "m-rbi", "rbi", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* rbil $rs,$rt,$bytecount */ { -1, "m-rbil", "rbil", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* rbir $rs,$rt,$bytecount */ { -1, "m-rbir", "rbir", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* swwr $rs,$rt */ { -1, "m-swwr", "swwr", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* swwru $rs,$rt */ { -1, "m-swwru", "swwru", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* tstod $rs */ { -1, "m-tstod", "tstod", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* unlk $rt */ { -1, "m-unlk", "unlk", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* wba $rs,$rt */ { -1, "m-wba", "wba", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* wbac $rs,$rt */ { -1, "m-wbac", "wbac", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* wbau $rs,$rt */ { -1, "m-wbau", "wbau", 32, - { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* wbi $rs,$rt,$bytecount */ { -1, "m-wbi", "wbi", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* wbic $rs,$rt,$bytecount */ { -1, "m-wbic", "wbic", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, /* wbiu $rs,$rt,$bytecount */ { -1, "m-wbiu", "wbiu", 32, - { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(ALIAS), { (1<<MACH_IQ10) } } + { 0|A(NO_DIS)|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } } }, }; diff --git a/opcodes/m32c-desc.c b/opcodes/m32c-desc.c index 12b9a1b..5485965 100644 --- a/opcodes/m32c-desc.c +++ b/opcodes/m32c-desc.c @@ -19263,27 +19263,27 @@ static const CGEN_IBASE m32c_cgen_insn_table[MAX_INSNS] = /* not.b:s r0l */ { M32C_INSN_NOT16_B_S_DST16_3_S_R0L_DIRECT_QI, "not16.b.s-dst16-3-S-R0l-direct-QI", "not.b:s", 8, - { 0, { (1<<MACH_BASE), (1<<ISA_M16C) } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }, /* not.b:s r0h */ { M32C_INSN_NOT16_B_S_DST16_3_S_R0H_DIRECT_QI, "not16.b.s-dst16-3-S-R0h-direct-QI", "not.b:s", 8, - { 0, { (1<<MACH_BASE), (1<<ISA_M16C) } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }, /* not.b:s ${Dsp-8-u8}[sb] */ { M32C_INSN_NOT16_B_S_DST16_3_S_8_8_SB_RELATIVE_QI, "not16.b.s-dst16-3-S-8-8-SB-relative-QI", "not.b:s", 16, - { 0, { (1<<MACH_BASE), (1<<ISA_M16C) } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }, /* not.b:s ${Dsp-8-s8}[fb] */ { M32C_INSN_NOT16_B_S_DST16_3_S_8_8_FB_RELATIVE_QI, "not16.b.s-dst16-3-S-8-8-FB-relative-QI", "not.b:s", 16, - { 0, { (1<<MACH_BASE), (1<<ISA_M16C) } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }, /* not.b:s ${Dsp-8-u16} */ { M32C_INSN_NOT16_B_S_DST16_3_S_8_16_ABSOLUTE_QI, "not16.b.s-dst16-3-S-8-16-absolute-QI", "not.b:s", 24, - { 0, { (1<<MACH_BASE), (1<<ISA_M16C) } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }, /* not.w${G} $Dst32RnUnprefixedHI */ { diff --git a/opcodes/m68k-dis.c b/opcodes/m68k-dis.c index 3504467..5e4150d 100644 --- a/opcodes/m68k-dis.c +++ b/opcodes/m68k-dis.c @@ -1499,6 +1499,20 @@ print_insn_m68k (bfd_vma memaddr, disassemble_info *info) } } + /* Don't match FPU insns with non-default coprocessor ID. */ + if (*d == '\0') + { + for (d = opc->args; *d; d += 2) + { + if (d[0] == 'I') + { + val = fetch_arg (buffer, 'd', 3, info); + if (val != 1) + break; + } + } + } + if (*d == '\0') if ((val = match_insn_m68k (memaddr, info, opc, & priv))) return val; diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c index 21f20fb..9a48d86 100644 --- a/opcodes/mips-dis.c +++ b/opcodes/mips-dis.c @@ -1656,6 +1656,92 @@ print_mips16_insn_arg (char type, } break; + case 'm': + case 'M': + /* MIPS16e save/restore. */ + { + int need_comma = 0; + int amask, args, statics; + int nsreg, smask; + int framesz; + int i, j; + + l = l & 0x7f; + if (use_extend) + l |= extend << 16; + + amask = (l >> 16) & 0xf; + if (amask == MIPS16_ALL_ARGS) + { + args = 4; + statics = 0; + } + else if (amask == MIPS16_ALL_STATICS) + { + args = 0; + statics = 4; + } + else + { + args = amask >> 2; + statics = amask & 3; + } + + if (args > 0) { + (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[4]); + if (args > 1) + (*info->fprintf_func) (info->stream, "-%s", + mips_gpr_names[4 + args - 1]); + need_comma = 1; + } + + framesz = (((l >> 16) & 0xf0) | (l & 0x0f)) * 8; + if (framesz == 0 && !use_extend) + framesz = 128; + + (*info->fprintf_func) (info->stream, "%s%d", + need_comma ? "," : "", + framesz); + + if (l & 0x40) /* $ra */ + (*info->fprintf_func) (info->stream, ",%s", mips_gpr_names[31]); + + nsreg = (l >> 24) & 0x7; + smask = 0; + if (l & 0x20) /* $s0 */ + smask |= 1 << 0; + if (l & 0x10) /* $s1 */ + smask |= 1 << 1; + if (nsreg > 0) /* $s2-$s8 */ + smask |= ((1 << nsreg) - 1) << 2; + + /* Find first set static reg bit. */ + for (i = 0; i < 9; i++) + { + if (smask & (1 << i)) + { + (*info->fprintf_func) (info->stream, ",%s", + mips_gpr_names[i == 8 ? 30 : (16 + i)]); + /* Skip over string of set bits. */ + for (j = i; smask & (2 << j); j++) + continue; + if (j > i) + (*info->fprintf_func) (info->stream, "-%s", + mips_gpr_names[j == 8 ? 30 : (16 + j)]); + i = j + 1; + } + } + + /* Statics $ax - $a3. */ + if (statics == 1) + (*info->fprintf_func) (info->stream, ",%s", mips_gpr_names[7]); + else if (statics > 0) + (*info->fprintf_func) (info->stream, ",%s-%s", + mips_gpr_names[7 - statics + 1], + mips_gpr_names[7]); + } + break; + default: /* xgettext:c-format */ (*info->fprintf_func) diff --git a/opcodes/mips16-opc.c b/opcodes/mips16-opc.c index 0459582..4e5ae44 100644 --- a/opcodes/mips16-opc.c +++ b/opcodes/mips16-opc.c @@ -226,6 +226,8 @@ const struct mips_opcode mips16_opcodes[] = {"jalrc", "R,x", 0xe8c0, 0xf8ff, WR_31|RD_x|TRAP, 0, 0 }, {"jrc", "x", 0xe880, 0xf8ff, RD_x|TRAP, 0, 0 }, {"jrc", "R", 0xe8a0, 0xffff, RD_31|TRAP, 0, 0 }, +{"restore", "M", 0x6400, 0xff80, WR_31|RD_SP|WR_SP|TRAP, 0, 0 }, +{"save", "m", 0x6480, 0xff80, RD_31|RD_SP|WR_SP|TRAP, 0, 0 }, {"seb", "x", 0xe891, 0xf8ff, WR_x|RD_x, 0, 0 }, {"seh", "x", 0xe8b1, 0xf8ff, WR_x|RD_x, 0, 0 }, {"sew", "x", 0xe8d1, 0xf8ff, WR_x|RD_x, 0, I3 }, diff --git a/opcodes/ms1-asm.c b/opcodes/ms1-asm.c index 528a0d5..177198e 100644 --- a/opcodes/ms1-asm.c +++ b/opcodes/ms1-asm.c @@ -61,6 +61,31 @@ signed_out_of_bounds (long val) } static const char * +parse_loopsize (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + void *arg) +{ + signed long * valuep = (signed long *) arg; + const char *errmsg; + bfd_reloc_code_real_type code = BFD_RELOC_NONE; + enum cgen_parse_operand_result result_type; + bfd_vma value; + + /* Is it a control transfer instructions? */ + if (opindex == (CGEN_OPERAND_TYPE) MS1_OPERAND_LOOPSIZE) + { + code = BFD_RELOC_MS1_PCINSN8; + errmsg = cgen_parse_address (cd, strp, opindex, code, + & result_type, & value); + *valuep = value; + return errmsg; + } + + abort (); +} + +static const char * parse_imm16 (CGEN_CPU_DESC cd, const char **strp, int opindex, @@ -89,7 +114,9 @@ parse_imm16 (CGEN_CPU_DESC cd, /* If it's not a control transfer instruction, then we have to check for %OP relocating operators. */ - if (strncmp (*strp, "%hi16", 5) == 0) + if (opindex == (CGEN_OPERAND_TYPE) MS1_OPERAND_IMM16L) + ; + else if (strncmp (*strp, "%hi16", 5) == 0) { *strp += 5; code = BFD_RELOC_HI16; @@ -417,6 +444,18 @@ ms1_cgen_parse_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_BRC2 : errmsg = cgen_parse_unsigned_integer (cd, strp, MS1_OPERAND_BRC2, (unsigned long *) (& fields->f_brc2)); break; + case MS1_OPERAND_CB1INCR : + errmsg = cgen_parse_signed_integer (cd, strp, MS1_OPERAND_CB1INCR, (long *) (& fields->f_cb1incr)); + break; + case MS1_OPERAND_CB1SEL : + errmsg = cgen_parse_unsigned_integer (cd, strp, MS1_OPERAND_CB1SEL, (unsigned long *) (& fields->f_cb1sel)); + break; + case MS1_OPERAND_CB2INCR : + errmsg = cgen_parse_signed_integer (cd, strp, MS1_OPERAND_CB2INCR, (long *) (& fields->f_cb2incr)); + break; + case MS1_OPERAND_CB2SEL : + errmsg = cgen_parse_unsigned_integer (cd, strp, MS1_OPERAND_CB2SEL, (unsigned long *) (& fields->f_cb2sel)); + break; case MS1_OPERAND_CBRB : errmsg = parse_cbrb (cd, strp, MS1_OPERAND_CBRB, (unsigned long *) (& fields->f_cbrb)); break; @@ -474,6 +513,9 @@ ms1_cgen_parse_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_IMM16 : errmsg = parse_imm16 (cd, strp, MS1_OPERAND_IMM16, (long *) (& fields->f_imm16s)); break; + case MS1_OPERAND_IMM16L : + errmsg = cgen_parse_unsigned_integer (cd, strp, MS1_OPERAND_IMM16L, (unsigned long *) (& fields->f_imm16l)); + break; case MS1_OPERAND_IMM16O : errmsg = parse_imm16 (cd, strp, MS1_OPERAND_IMM16O, (unsigned long *) (& fields->f_imm16s)); break; @@ -489,6 +531,9 @@ ms1_cgen_parse_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_LENGTH : errmsg = cgen_parse_unsigned_integer (cd, strp, MS1_OPERAND_LENGTH, (unsigned long *) (& fields->f_length)); break; + case MS1_OPERAND_LOOPSIZE : + errmsg = parse_loopsize (cd, strp, MS1_OPERAND_LOOPSIZE, (unsigned long *) (& fields->f_loopo)); + break; case MS1_OPERAND_MASK : errmsg = cgen_parse_unsigned_integer (cd, strp, MS1_OPERAND_MASK, (unsigned long *) (& fields->f_mask)); break; @@ -513,6 +558,9 @@ ms1_cgen_parse_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_RC2 : errmsg = parse_rc (cd, strp, MS1_OPERAND_RC2, (unsigned long *) (& fields->f_rc2)); break; + case MS1_OPERAND_RC3 : + errmsg = parse_rc (cd, strp, MS1_OPERAND_RC3, (unsigned long *) (& fields->f_rc3)); + break; case MS1_OPERAND_RCNUM : errmsg = cgen_parse_unsigned_integer (cd, strp, MS1_OPERAND_RCNUM, (unsigned long *) (& fields->f_rcnum)); break; diff --git a/opcodes/ms1-desc.c b/opcodes/ms1-desc.c index c48a8a8..6dbff2e 100644 --- a/opcodes/ms1-desc.c +++ b/opcodes/ms1-desc.c @@ -48,6 +48,7 @@ static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED = { "base", MACH_BASE }, { "ms1", MACH_MS1 }, { "ms1_003", MACH_MS1_003 }, + { "ms2", MACH_MS2 }, { "max", MACH_MAX }, { 0, 0 } }; @@ -113,6 +114,7 @@ const CGEN_ATTR_TABLE ms1_cgen_insn_attr_table[] = { "AL-INSN", &bool_attr[0], &bool_attr[0] }, { "IO-INSN", &bool_attr[0], &bool_attr[0] }, { "BR-INSN", &bool_attr[0], &bool_attr[0] }, + { "JAL-HAZARD", &bool_attr[0], &bool_attr[0] }, { "USES-FRDR", &bool_attr[0], &bool_attr[0] }, { "USES-FRDRRR", &bool_attr[0], &bool_attr[0] }, { "USES-FRSR1", &bool_attr[0], &bool_attr[0] }, @@ -133,6 +135,7 @@ static const CGEN_ISA ms1_cgen_isa_table[] = { static const CGEN_MACH ms1_cgen_mach_table[] = { { "ms1", "ms1", MACH_MS1, 0 }, { "ms1-003", "ms1-003", MACH_MS1_003, 0 }, + { "ms2", "ms2", MACH_MS2, 0 }, { 0, 0, 0, 0 } }; @@ -230,7 +233,9 @@ const CGEN_IFLD ms1_cgen_ifld_table[] = { MS1_F_UU4A, "f-uu4a", 0, 32, 19, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { MS1_F_UU4B, "f-uu4b", 0, 32, 23, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { MS1_F_UU12, "f-uu12", 0, 32, 11, 12, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { MS1_F_UU8, "f-uu8", 0, 32, 15, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { MS1_F_UU16, "f-uu16", 0, 32, 15, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { MS1_F_UU1, "f-uu1", 0, 32, 7, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { MS1_F_MSOPC, "f-msopc", 0, 32, 30, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { MS1_F_UU_26_25, "f-uu-26-25", 0, 32, 25, 26, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { MS1_F_MASK, "f-mask", 0, 32, 25, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } }, @@ -280,6 +285,13 @@ const CGEN_IFLD ms1_cgen_ifld_table[] = { MS1_F_DUP, "f-dup", 0, 32, 6, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { MS1_F_RC2, "f-rc2", 0, 32, 6, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { MS1_F_CTXDISP, "f-ctxdisp", 0, 32, 5, 6, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { MS1_F_IMM16L, "f-imm16l", 0, 32, 23, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { MS1_F_LOOPO, "f-loopo", 0, 32, 7, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { MS1_F_CB1SEL, "f-cb1sel", 0, 32, 25, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { MS1_F_CB2SEL, "f-cb2sel", 0, 32, 22, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { MS1_F_CB1INCR, "f-cb1incr", 0, 32, 19, 6, { 0|A(SIGNED), { { { (1<<MACH_BASE), 0 } } } } }, + { MS1_F_CB2INCR, "f-cb2incr", 0, 32, 13, 6, { 0|A(SIGNED), { { { (1<<MACH_BASE), 0 } } } } }, + { MS1_F_RC3, "f-rc3", 0, 32, 7, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { MS1_F_MSYSFRSR2, "f-msysfrsr2", 0, 32, 19, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { MS1_F_BRC2, "f-brc2", 0, 32, 14, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { MS1_F_BALL2, "f-ball2", 0, 32, 15, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } }, @@ -343,7 +355,7 @@ const CGEN_OPERAND ms1_cgen_operand_table[] = /* imm16o: immediate value */ { "imm16o", MS1_OPERAND_IMM16O, HW_H_UINT, 15, 16, { 0, { (const PTR) &ms1_cgen_ifld_table[MS1_F_IMM16S] } }, - { 0, { { { (1<<MACH_BASE), 0 } } } } }, + { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } }, /* rc: rc */ { "rc", MS1_OPERAND_RC, HW_H_UINT, 15, 1, { 0, { (const PTR) &ms1_cgen_ifld_table[MS1_F_RC] } }, @@ -504,6 +516,34 @@ const CGEN_OPERAND ms1_cgen_operand_table[] = { "fbincr", MS1_OPERAND_FBINCR, HW_H_UINT, 23, 4, { 0, { (const PTR) &ms1_cgen_ifld_table[MS1_F_FBINCR] } }, { 0, { { { (1<<MACH_BASE), 0 } } } } }, +/* loopsize: immediate value */ + { "loopsize", MS1_OPERAND_LOOPSIZE, HW_H_UINT, 7, 8, + { 0, { (const PTR) &ms1_cgen_ifld_table[MS1_F_LOOPO] } }, + { 0|A(PCREL_ADDR), { { { (1<<MACH_MS2), 0 } } } } }, +/* imm16l: immediate value */ + { "imm16l", MS1_OPERAND_IMM16L, HW_H_UINT, 23, 16, + { 0, { (const PTR) &ms1_cgen_ifld_table[MS1_F_IMM16L] } }, + { 0, { { { (1<<MACH_MS2), 0 } } } } }, +/* rc3: rc3 */ + { "rc3", MS1_OPERAND_RC3, HW_H_UINT, 7, 1, + { 0, { (const PTR) &ms1_cgen_ifld_table[MS1_F_RC3] } }, + { 0, { { { (1<<MACH_MS2), 0 } } } } }, +/* cb1sel: cb1sel */ + { "cb1sel", MS1_OPERAND_CB1SEL, HW_H_UINT, 25, 3, + { 0, { (const PTR) &ms1_cgen_ifld_table[MS1_F_CB1SEL] } }, + { 0, { { { (1<<MACH_MS2), 0 } } } } }, +/* cb2sel: cb2sel */ + { "cb2sel", MS1_OPERAND_CB2SEL, HW_H_UINT, 22, 3, + { 0, { (const PTR) &ms1_cgen_ifld_table[MS1_F_CB2SEL] } }, + { 0, { { { (1<<MACH_MS2), 0 } } } } }, +/* cb1incr: cb1incr */ + { "cb1incr", MS1_OPERAND_CB1INCR, HW_H_SINT, 19, 6, + { 0, { (const PTR) &ms1_cgen_ifld_table[MS1_F_CB1INCR] } }, + { 0|A(SIGNED), { { { (1<<MACH_MS2), 0 } } } } }, +/* cb2incr: cb2incr */ + { "cb2incr", MS1_OPERAND_CB2INCR, HW_H_SINT, 13, 6, + { 0, { (const PTR) &ms1_cgen_ifld_table[MS1_F_CB2INCR] } }, + { 0|A(SIGNED), { { { (1<<MACH_MS2), 0 } } } } }, /* sentinel */ { 0, 0, 0, 0, 0, { 0, { (const PTR) 0 } }, @@ -571,12 +611,12 @@ static const CGEN_IBASE ms1_cgen_insn_table[MAX_INSNS] = /* mul $frdrrr,$frsr1,$frsr2 */ { MS1_INSN_MUL, "mul", "mul", 32, - { 0|A(USES_FRSR2)|A(USES_FRSR1)|A(USES_FRDRRR)|A(AL_INSN), { { { (1<<MACH_MS1_003), 0 } } } } + { 0|A(USES_FRSR2)|A(USES_FRSR1)|A(USES_FRDRRR)|A(AL_INSN), { { { (1<<MACH_MS1_003)|(1<<MACH_MS2), 0 } } } } }, /* muli $frdr,$frsr1,#$imm16 */ { MS1_INSN_MULI, "muli", "muli", 32, - { 0|A(USES_FRSR1)|A(USES_FRDR)|A(AL_INSN), { { { (1<<MACH_MS1_003), 0 } } } } + { 0|A(USES_FRSR1)|A(USES_FRDR)|A(AL_INSN), { { { (1<<MACH_MS1_003)|(1<<MACH_MS2), 0 } } } } }, /* and $frdrrr,$frsr1,$frsr2 */ { @@ -706,12 +746,12 @@ static const CGEN_IBASE ms1_cgen_insn_table[MAX_INSNS] = /* jal $frdrrr,$frsr1 */ { MS1_INSN_JAL, "jal", "jal", 32, - { 0|A(USES_FRSR1)|A(USES_FRDR)|A(BR_INSN)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } + { 0|A(JAL_HAZARD)|A(USES_FRSR1)|A(USES_FRDR)|A(BR_INSN)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* dbnz $frsr1,$imm16o */ { MS1_INSN_DBNZ, "dbnz", "dbnz", 32, - { 0|A(USES_FRSR1)|A(DELAY_SLOT)|A(BR_INSN), { { { (1<<MACH_MS1_003), 0 } } } } + { 0|A(USES_FRSR1)|A(DELAY_SLOT)|A(BR_INSN), { { { (1<<MACH_MS1_003)|(1<<MACH_MS2), 0 } } } } }, /* ei */ { @@ -731,7 +771,7 @@ static const CGEN_IBASE ms1_cgen_insn_table[MAX_INSNS] = /* reti $frsr1 */ { MS1_INSN_RETI, "reti", "reti", 32, - { 0|A(USES_FRSR1)|A(BR_INSN)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } + { 0|A(JAL_HAZARD)|A(USES_FRSR1)|A(BR_INSN)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } } }, /* ldw $frdr,$frsr1,#$imm16 */ { @@ -751,27 +791,27 @@ static const CGEN_IBASE ms1_cgen_insn_table[MAX_INSNS] = /* iflush */ { MS1_INSN_IFLUSH, "iflush", "iflush", 32, - { 0, { { { (1<<MACH_MS1_003), 0 } } } } + { 0, { { { (1<<MACH_MS1_003)|(1<<MACH_MS2), 0 } } } } }, /* ldctxt $frsr1,$frsr2,#$rc,#$rcnum,#$contnum */ { MS1_INSN_LDCTXT, "ldctxt", "ldctxt", 32, - { 0, { { { (1<<MACH_BASE), 0 } } } } + { 0, { { { (1<<MACH_MS1), 0 } } } } }, /* ldfb $frsr1,$frsr2,#$imm16z */ { MS1_INSN_LDFB, "ldfb", "ldfb", 32, - { 0, { { { (1<<MACH_BASE), 0 } } } } + { 0, { { { (1<<MACH_MS1), 0 } } } } }, /* stfb $frsr1,$frsr2,#$imm16z */ { MS1_INSN_STFB, "stfb", "stfb", 32, - { 0, { { { (1<<MACH_BASE), 0 } } } } + { 0, { { { (1<<MACH_MS1), 0 } } } } }, /* fbcb $frsr1,#$rbbc,#$ball,#$brc,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp */ { MS1_INSN_FBCB, "fbcb", "fbcb", 32, - { 0, { { { (1<<MACH_BASE), 0 } } } } + { 0, { { { (1<<MACH_MS1)|(1<<MACH_MS1_003), 0 } } } } }, /* mfbcb $frsr1,#$rbbc,$frsr2,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp */ { @@ -876,42 +916,72 @@ static const CGEN_IBASE ms1_cgen_insn_table[MAX_INSNS] = /* wfbinc #$rda,#$wr,#$fbincr,#$ball,#$colnum,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp */ { MS1_INSN_WFBINC, "wfbinc", "wfbinc", 32, - { 0, { { { (1<<MACH_MS1_003), 0 } } } } + { 0, { { { (1<<MACH_MS1_003)|(1<<MACH_MS2), 0 } } } } }, /* mwfbinc $frsr2,#$rda,#$wr,#$fbincr,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp */ { MS1_INSN_MWFBINC, "mwfbinc", "mwfbinc", 32, - { 0, { { { (1<<MACH_MS1_003), 0 } } } } + { 0, { { { (1<<MACH_MS1_003)|(1<<MACH_MS2), 0 } } } } }, /* wfbincr $frsr1,#$rda,#$wr,#$ball,#$colnum,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp */ { MS1_INSN_WFBINCR, "wfbincr", "wfbincr", 32, - { 0, { { { (1<<MACH_MS1_003), 0 } } } } + { 0, { { { (1<<MACH_MS1_003)|(1<<MACH_MS2), 0 } } } } }, /* mwfbincr $frsr1,$frsr2,#$rda,#$wr,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp */ { MS1_INSN_MWFBINCR, "mwfbincr", "mwfbincr", 32, - { 0, { { { (1<<MACH_MS1_003), 0 } } } } + { 0, { { { (1<<MACH_MS1_003)|(1<<MACH_MS2), 0 } } } } }, /* fbcbincs #$perm,#$a23,#$cr,#$cbs,#$incr,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp */ { MS1_INSN_FBCBINCS, "fbcbincs", "fbcbincs", 32, - { 0, { { { (1<<MACH_MS1_003), 0 } } } } + { 0, { { { (1<<MACH_MS1_003)|(1<<MACH_MS2), 0 } } } } }, /* mfbcbincs $frsr1,#$perm,#$cbs,#$incr,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp */ { MS1_INSN_MFBCBINCS, "mfbcbincs", "mfbcbincs", 32, - { 0, { { { (1<<MACH_MS1_003), 0 } } } } + { 0, { { { (1<<MACH_MS1_003)|(1<<MACH_MS2), 0 } } } } }, /* fbcbincrs $frsr1,#$perm,#$ball,#$colnum,#$cbx,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp */ { MS1_INSN_FBCBINCRS, "fbcbincrs", "fbcbincrs", 32, - { 0, { { { (1<<MACH_MS1_003), 0 } } } } + { 0, { { { (1<<MACH_MS1_003)|(1<<MACH_MS2), 0 } } } } }, /* mfbcbincrs $frsr1,$frsr2,#$perm,#$cbx,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp */ { MS1_INSN_MFBCBINCRS, "mfbcbincrs", "mfbcbincrs", 32, - { 0, { { { (1<<MACH_MS1_003), 0 } } } } + { 0, { { { (1<<MACH_MS1_003)|(1<<MACH_MS2), 0 } } } } + }, +/* loop $frsr1,$loopsize */ + { + MS1_INSN_LOOP, "loop", "loop", 32, + { 0|A(USES_FRSR1)|A(DELAY_SLOT), { { { (1<<MACH_MS2), 0 } } } } + }, +/* loopi #$imm16l,$loopsize */ + { + MS1_INSN_LOOPI, "loopi", "loopi", 32, + { 0|A(DELAY_SLOT), { { { (1<<MACH_MS2), 0 } } } } + }, +/* dfbc #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc3,#$rc2,#$ctxdisp */ + { + MS1_INSN_DFBC, "dfbc", "dfbc", 32, + { 0, { { { (1<<MACH_MS2), 0 } } } } + }, +/* dwfb #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc2,#$ctxdisp */ + { + MS1_INSN_DWFB, "dwfb", "dwfb", 32, + { 0, { { { (1<<MACH_MS2), 0 } } } } + }, +/* fbwfb #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc3,#$rc2,#$ctxdisp */ + { + MS1_INSN_FBWFB, "fbwfb", "fbwfb", 32, + { 0, { { { (1<<MACH_MS2), 0 } } } } + }, +/* dfbr #$cb1sel,#$cb2sel,$frsr2,#$length,#$rownum1,#$rownum2,#$rc2,#$ctxdisp */ + { + MS1_INSN_DFBR, "dfbr", "dfbr", 32, + { 0|A(USES_FRSR2), { { { (1<<MACH_MS2), 0 } } } } }, }; diff --git a/opcodes/ms1-desc.h b/opcodes/ms1-desc.h index 4a3dd2f..909b323 100644 --- a/opcodes/ms1-desc.h +++ b/opcodes/ms1-desc.h @@ -40,6 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc., /* Selected cpu families. */ #define HAVE_CPU_MS1BF #define HAVE_CPU_MS1_003BF +#define HAVE_CPU_MS2BF #define CGEN_INSN_LSB0_P 1 @@ -76,9 +77,9 @@ typedef enum insn_opc { , OPC_NAND = 11, OPC_NOR = 12, OPC_XNOR = 13, OPC_LDUI = 14 , OPC_LSL = 16, OPC_LSR = 17, OPC_ASR = 18, OPC_BRLT = 24 , OPC_BRLE = 25, OPC_BREQ = 26, OPC_JMP = 27, OPC_JAL = 28 - , OPC_BRNEQ = 29, OPC_DBNZ = 30, OPC_LDW = 32, OPC_STW = 33 - , OPC_EI = 48, OPC_DI = 49, OPC_SI = 50, OPC_RETI = 51 - , OPC_BREAK = 52, OPC_IFLUSH = 53 + , OPC_BRNEQ = 29, OPC_DBNZ = 30, OPC_LOOP = 31, OPC_LDW = 32 + , OPC_STW = 33, OPC_EI = 48, OPC_DI = 49, OPC_SI = 50 + , OPC_RETI = 51, OPC_BREAK = 52, OPC_IFLUSH = 53 } INSN_OPC; /* Enum declaration for msopc enums. */ @@ -107,7 +108,8 @@ typedef enum msys_syms { /* Enum declaration for machine type selection. */ typedef enum mach_attr { - MACH_BASE, MACH_MS1, MACH_MS1_003, MACH_MAX + MACH_BASE, MACH_MS1, MACH_MS1_003, MACH_MS2 + , MACH_MAX } MACH_ATTR; /* Enum declaration for instruction set selection. */ @@ -148,20 +150,22 @@ typedef enum ifield_type { , MS1_F_IMM, MS1_F_UU24, MS1_F_SR1, MS1_F_SR2 , MS1_F_DR, MS1_F_DRRR, MS1_F_IMM16U, MS1_F_IMM16S , MS1_F_IMM16A, MS1_F_UU4A, MS1_F_UU4B, MS1_F_UU12 - , MS1_F_UU16, MS1_F_MSOPC, MS1_F_UU_26_25, MS1_F_MASK - , MS1_F_BANKADDR, MS1_F_RDA, MS1_F_UU_2_25, MS1_F_RBBC - , MS1_F_PERM, MS1_F_MODE, MS1_F_UU_1_24, MS1_F_WR - , MS1_F_FBINCR, MS1_F_UU_2_23, MS1_F_XMODE, MS1_F_A23 - , MS1_F_MASK1, MS1_F_CR, MS1_F_TYPE, MS1_F_INCAMT - , MS1_F_CBS, MS1_F_UU_1_19, MS1_F_BALL, MS1_F_COLNUM - , MS1_F_BRC, MS1_F_INCR, MS1_F_FBDISP, MS1_F_UU_4_15 - , MS1_F_LENGTH, MS1_F_UU_1_15, MS1_F_RC, MS1_F_RCNUM - , MS1_F_ROWNUM, MS1_F_CBX, MS1_F_ID, MS1_F_SIZE - , MS1_F_ROWNUM1, MS1_F_UU_3_11, MS1_F_RC1, MS1_F_CCB - , MS1_F_CBRB, MS1_F_CDB, MS1_F_ROWNUM2, MS1_F_CELL - , MS1_F_UU_3_9, MS1_F_CONTNUM, MS1_F_UU_1_6, MS1_F_DUP - , MS1_F_RC2, MS1_F_CTXDISP, MS1_F_MSYSFRSR2, MS1_F_BRC2 - , MS1_F_BALL2, MS1_F_MAX + , MS1_F_UU8, MS1_F_UU16, MS1_F_UU1, MS1_F_MSOPC + , MS1_F_UU_26_25, MS1_F_MASK, MS1_F_BANKADDR, MS1_F_RDA + , MS1_F_UU_2_25, MS1_F_RBBC, MS1_F_PERM, MS1_F_MODE + , MS1_F_UU_1_24, MS1_F_WR, MS1_F_FBINCR, MS1_F_UU_2_23 + , MS1_F_XMODE, MS1_F_A23, MS1_F_MASK1, MS1_F_CR + , MS1_F_TYPE, MS1_F_INCAMT, MS1_F_CBS, MS1_F_UU_1_19 + , MS1_F_BALL, MS1_F_COLNUM, MS1_F_BRC, MS1_F_INCR + , MS1_F_FBDISP, MS1_F_UU_4_15, MS1_F_LENGTH, MS1_F_UU_1_15 + , MS1_F_RC, MS1_F_RCNUM, MS1_F_ROWNUM, MS1_F_CBX + , MS1_F_ID, MS1_F_SIZE, MS1_F_ROWNUM1, MS1_F_UU_3_11 + , MS1_F_RC1, MS1_F_CCB, MS1_F_CBRB, MS1_F_CDB + , MS1_F_ROWNUM2, MS1_F_CELL, MS1_F_UU_3_9, MS1_F_CONTNUM + , MS1_F_UU_1_6, MS1_F_DUP, MS1_F_RC2, MS1_F_CTXDISP + , MS1_F_IMM16L, MS1_F_LOOPO, MS1_F_CB1SEL, MS1_F_CB2SEL + , MS1_F_CB1INCR, MS1_F_CB2INCR, MS1_F_RC3, MS1_F_MSYSFRSR2 + , MS1_F_BRC2, MS1_F_BALL2, MS1_F_MAX } IFIELD_TYPE; #define MAX_IFLD ((int) MS1_F_MAX) @@ -229,11 +233,12 @@ typedef enum cgen_operand_type { , MS1_OPERAND_A23, MS1_OPERAND_CR, MS1_OPERAND_CBS, MS1_OPERAND_INCR , MS1_OPERAND_LENGTH, MS1_OPERAND_CBX, MS1_OPERAND_CCB, MS1_OPERAND_CDB , MS1_OPERAND_MODE, MS1_OPERAND_ID, MS1_OPERAND_SIZE, MS1_OPERAND_FBINCR - , MS1_OPERAND_MAX + , MS1_OPERAND_LOOPSIZE, MS1_OPERAND_IMM16L, MS1_OPERAND_RC3, MS1_OPERAND_CB1SEL + , MS1_OPERAND_CB2SEL, MS1_OPERAND_CB1INCR, MS1_OPERAND_CB2INCR, MS1_OPERAND_MAX } CGEN_OPERAND_TYPE; /* Number of operands types. */ -#define MAX_OPERANDS 48 +#define MAX_OPERANDS 55 /* Maximum number of operands referenced by any insn. */ #define MAX_OPERAND_INSTANCES 8 @@ -245,9 +250,10 @@ typedef enum cgen_insn_attr { CGEN_INSN_ALIAS, CGEN_INSN_VIRTUAL, CGEN_INSN_UNCOND_CTI, CGEN_INSN_COND_CTI , CGEN_INSN_SKIP_CTI, CGEN_INSN_DELAY_SLOT, CGEN_INSN_RELAXABLE, CGEN_INSN_RELAXED , CGEN_INSN_NO_DIS, CGEN_INSN_PBB, CGEN_INSN_LOAD_DELAY, CGEN_INSN_MEMORY_ACCESS - , CGEN_INSN_AL_INSN, CGEN_INSN_IO_INSN, CGEN_INSN_BR_INSN, CGEN_INSN_USES_FRDR - , CGEN_INSN_USES_FRDRRR, CGEN_INSN_USES_FRSR1, CGEN_INSN_USES_FRSR2, CGEN_INSN_SKIPA - , CGEN_INSN_END_BOOLS, CGEN_INSN_START_NBOOLS = 31, CGEN_INSN_MACH, CGEN_INSN_END_NBOOLS + , CGEN_INSN_AL_INSN, CGEN_INSN_IO_INSN, CGEN_INSN_BR_INSN, CGEN_INSN_JAL_HAZARD + , CGEN_INSN_USES_FRDR, CGEN_INSN_USES_FRDRRR, CGEN_INSN_USES_FRSR1, CGEN_INSN_USES_FRSR2 + , CGEN_INSN_SKIPA, CGEN_INSN_END_BOOLS, CGEN_INSN_START_NBOOLS = 31, CGEN_INSN_MACH + , CGEN_INSN_END_NBOOLS } CGEN_INSN_ATTR; /* Number of non-boolean elements in cgen_insn_attr. */ @@ -270,6 +276,7 @@ typedef enum cgen_insn_attr { #define CGEN_ATTR_CGEN_INSN_AL_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_AL_INSN)) != 0) #define CGEN_ATTR_CGEN_INSN_IO_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_IO_INSN)) != 0) #define CGEN_ATTR_CGEN_INSN_BR_INSN_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_BR_INSN)) != 0) +#define CGEN_ATTR_CGEN_INSN_JAL_HAZARD_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_JAL_HAZARD)) != 0) #define CGEN_ATTR_CGEN_INSN_USES_FRDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_USES_FRDR)) != 0) #define CGEN_ATTR_CGEN_INSN_USES_FRDRRR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_USES_FRDRRR)) != 0) #define CGEN_ATTR_CGEN_INSN_USES_FRSR1_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_USES_FRSR1)) != 0) diff --git a/opcodes/ms1-dis.c b/opcodes/ms1-dis.c index 0026124..bc020de 100644 --- a/opcodes/ms1-dis.c +++ b/opcodes/ms1-dis.c @@ -60,6 +60,7 @@ static int read_insn /* -- dis.c */ static void print_dollarhex (CGEN_CPU_DESC, PTR, long, unsigned, bfd_vma, int); +static void print_pcrel (CGEN_CPU_DESC, PTR, long, unsigned, bfd_vma, int); static void print_dollarhex (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, @@ -77,6 +78,16 @@ print_dollarhex (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, print_normal (cd, dis_info, value, attrs, pc, length); } +static void +print_pcrel (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, + void * dis_info, + long value, + unsigned int attrs ATTRIBUTE_UNUSED, + bfd_vma pc ATTRIBUTE_UNUSED, + int length ATTRIBUTE_UNUSED) +{ + print_address (cd, dis_info, value + pc, attrs, pc, length); +} /* -- */ @@ -129,6 +140,18 @@ ms1_cgen_print_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_BRC2 : print_dollarhex (cd, info, fields->f_brc2, 0, pc, length); break; + case MS1_OPERAND_CB1INCR : + print_dollarhex (cd, info, fields->f_cb1incr, 0|(1<<CGEN_OPERAND_SIGNED), pc, length); + break; + case MS1_OPERAND_CB1SEL : + print_dollarhex (cd, info, fields->f_cb1sel, 0, pc, length); + break; + case MS1_OPERAND_CB2INCR : + print_dollarhex (cd, info, fields->f_cb2incr, 0|(1<<CGEN_OPERAND_SIGNED), pc, length); + break; + case MS1_OPERAND_CB2SEL : + print_dollarhex (cd, info, fields->f_cb2sel, 0, pc, length); + break; case MS1_OPERAND_CBRB : print_dollarhex (cd, info, fields->f_cbrb, 0, pc, length); break; @@ -186,8 +209,11 @@ ms1_cgen_print_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_IMM16 : print_dollarhex (cd, info, fields->f_imm16s, 0|(1<<CGEN_OPERAND_SIGNED), pc, length); break; + case MS1_OPERAND_IMM16L : + print_dollarhex (cd, info, fields->f_imm16l, 0, pc, length); + break; case MS1_OPERAND_IMM16O : - print_dollarhex (cd, info, fields->f_imm16s, 0, pc, length); + print_pcrel (cd, info, fields->f_imm16s, 0|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length); break; case MS1_OPERAND_IMM16Z : print_dollarhex (cd, info, fields->f_imm16u, 0, pc, length); @@ -201,6 +227,9 @@ ms1_cgen_print_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_LENGTH : print_dollarhex (cd, info, fields->f_length, 0, pc, length); break; + case MS1_OPERAND_LOOPSIZE : + print_pcrel (cd, info, fields->f_loopo, 0|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length); + break; case MS1_OPERAND_MASK : print_dollarhex (cd, info, fields->f_mask, 0, pc, length); break; @@ -225,6 +254,9 @@ ms1_cgen_print_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_RC2 : print_dollarhex (cd, info, fields->f_rc2, 0, pc, length); break; + case MS1_OPERAND_RC3 : + print_dollarhex (cd, info, fields->f_rc3, 0, pc, length); + break; case MS1_OPERAND_RCNUM : print_dollarhex (cd, info, fields->f_rcnum, 0, pc, length); break; diff --git a/opcodes/ms1-ibld.c b/opcodes/ms1-ibld.c index 3ffbd84..4640211 100644 --- a/opcodes/ms1-ibld.c +++ b/opcodes/ms1-ibld.c @@ -576,6 +576,18 @@ ms1_cgen_insert_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_BRC2 : errmsg = insert_normal (cd, fields->f_brc2, 0, 0, 14, 3, 32, total_length, buffer); break; + case MS1_OPERAND_CB1INCR : + errmsg = insert_normal (cd, fields->f_cb1incr, 0|(1<<CGEN_IFLD_SIGNED), 0, 19, 6, 32, total_length, buffer); + break; + case MS1_OPERAND_CB1SEL : + errmsg = insert_normal (cd, fields->f_cb1sel, 0, 0, 25, 3, 32, total_length, buffer); + break; + case MS1_OPERAND_CB2INCR : + errmsg = insert_normal (cd, fields->f_cb2incr, 0|(1<<CGEN_IFLD_SIGNED), 0, 13, 6, 32, total_length, buffer); + break; + case MS1_OPERAND_CB2SEL : + errmsg = insert_normal (cd, fields->f_cb2sel, 0, 0, 22, 3, 32, total_length, buffer); + break; case MS1_OPERAND_CBRB : errmsg = insert_normal (cd, fields->f_cbrb, 0, 0, 10, 1, 32, total_length, buffer); break; @@ -637,6 +649,9 @@ ms1_cgen_insert_operand (CGEN_CPU_DESC cd, errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 15, 16, 32, total_length, buffer); } break; + case MS1_OPERAND_IMM16L : + errmsg = insert_normal (cd, fields->f_imm16l, 0, 0, 23, 16, 32, total_length, buffer); + break; case MS1_OPERAND_IMM16O : { long value = fields->f_imm16s; @@ -656,6 +671,13 @@ ms1_cgen_insert_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_LENGTH : errmsg = insert_normal (cd, fields->f_length, 0, 0, 15, 3, 32, total_length, buffer); break; + case MS1_OPERAND_LOOPSIZE : + { + long value = fields->f_loopo; + value = ((unsigned int) (value) >> (2)); + errmsg = insert_normal (cd, value, 0, 0, 7, 8, 32, total_length, buffer); + } + break; case MS1_OPERAND_MASK : errmsg = insert_normal (cd, fields->f_mask, 0, 0, 25, 16, 32, total_length, buffer); break; @@ -680,6 +702,9 @@ ms1_cgen_insert_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_RC2 : errmsg = insert_normal (cd, fields->f_rc2, 0, 0, 6, 1, 32, total_length, buffer); break; + case MS1_OPERAND_RC3 : + errmsg = insert_normal (cd, fields->f_rc3, 0, 0, 7, 1, 32, total_length, buffer); + break; case MS1_OPERAND_RCNUM : errmsg = insert_normal (cd, fields->f_rcnum, 0, 0, 14, 3, 32, total_length, buffer); break; @@ -768,6 +793,18 @@ ms1_cgen_extract_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_BRC2 : length = extract_normal (cd, ex_info, insn_value, 0, 0, 14, 3, 32, total_length, pc, & fields->f_brc2); break; + case MS1_OPERAND_CB1INCR : + length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 19, 6, 32, total_length, pc, & fields->f_cb1incr); + break; + case MS1_OPERAND_CB1SEL : + length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 3, 32, total_length, pc, & fields->f_cb1sel); + break; + case MS1_OPERAND_CB2INCR : + length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 13, 6, 32, total_length, pc, & fields->f_cb2incr); + break; + case MS1_OPERAND_CB2SEL : + length = extract_normal (cd, ex_info, insn_value, 0, 0, 22, 3, 32, total_length, pc, & fields->f_cb2sel); + break; case MS1_OPERAND_CBRB : length = extract_normal (cd, ex_info, insn_value, 0, 0, 10, 1, 32, total_length, pc, & fields->f_cbrb); break; @@ -830,6 +867,9 @@ ms1_cgen_extract_operand (CGEN_CPU_DESC cd, fields->f_imm16s = value; } break; + case MS1_OPERAND_IMM16L : + length = extract_normal (cd, ex_info, insn_value, 0, 0, 23, 16, 32, total_length, pc, & fields->f_imm16l); + break; case MS1_OPERAND_IMM16O : { long value; @@ -850,6 +890,14 @@ ms1_cgen_extract_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_LENGTH : length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 3, 32, total_length, pc, & fields->f_length); break; + case MS1_OPERAND_LOOPSIZE : + { + long value; + length = extract_normal (cd, ex_info, insn_value, 0, 0, 7, 8, 32, total_length, pc, & value); + value = ((((value) << (2))) + (8)); + fields->f_loopo = value; + } + break; case MS1_OPERAND_MASK : length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 16, 32, total_length, pc, & fields->f_mask); break; @@ -874,6 +922,9 @@ ms1_cgen_extract_operand (CGEN_CPU_DESC cd, case MS1_OPERAND_RC2 : length = extract_normal (cd, ex_info, insn_value, 0, 0, 6, 1, 32, total_length, pc, & fields->f_rc2); break; + case MS1_OPERAND_RC3 : + length = extract_normal (cd, ex_info, insn_value, 0, 0, 7, 1, 32, total_length, pc, & fields->f_rc3); + break; case MS1_OPERAND_RCNUM : length = extract_normal (cd, ex_info, insn_value, 0, 0, 14, 3, 32, total_length, pc, & fields->f_rcnum); break; @@ -957,6 +1008,18 @@ ms1_cgen_get_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_BRC2 : value = fields->f_brc2; break; + case MS1_OPERAND_CB1INCR : + value = fields->f_cb1incr; + break; + case MS1_OPERAND_CB1SEL : + value = fields->f_cb1sel; + break; + case MS1_OPERAND_CB2INCR : + value = fields->f_cb2incr; + break; + case MS1_OPERAND_CB2SEL : + value = fields->f_cb2sel; + break; case MS1_OPERAND_CBRB : value = fields->f_cbrb; break; @@ -1014,6 +1077,9 @@ ms1_cgen_get_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_IMM16 : value = fields->f_imm16s; break; + case MS1_OPERAND_IMM16L : + value = fields->f_imm16l; + break; case MS1_OPERAND_IMM16O : value = fields->f_imm16s; break; @@ -1029,6 +1095,9 @@ ms1_cgen_get_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_LENGTH : value = fields->f_length; break; + case MS1_OPERAND_LOOPSIZE : + value = fields->f_loopo; + break; case MS1_OPERAND_MASK : value = fields->f_mask; break; @@ -1053,6 +1122,9 @@ ms1_cgen_get_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_RC2 : value = fields->f_rc2; break; + case MS1_OPERAND_RC3 : + value = fields->f_rc3; + break; case MS1_OPERAND_RCNUM : value = fields->f_rcnum; break; @@ -1118,6 +1190,18 @@ ms1_cgen_get_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_BRC2 : value = fields->f_brc2; break; + case MS1_OPERAND_CB1INCR : + value = fields->f_cb1incr; + break; + case MS1_OPERAND_CB1SEL : + value = fields->f_cb1sel; + break; + case MS1_OPERAND_CB2INCR : + value = fields->f_cb2incr; + break; + case MS1_OPERAND_CB2SEL : + value = fields->f_cb2sel; + break; case MS1_OPERAND_CBRB : value = fields->f_cbrb; break; @@ -1175,6 +1259,9 @@ ms1_cgen_get_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_IMM16 : value = fields->f_imm16s; break; + case MS1_OPERAND_IMM16L : + value = fields->f_imm16l; + break; case MS1_OPERAND_IMM16O : value = fields->f_imm16s; break; @@ -1190,6 +1277,9 @@ ms1_cgen_get_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_LENGTH : value = fields->f_length; break; + case MS1_OPERAND_LOOPSIZE : + value = fields->f_loopo; + break; case MS1_OPERAND_MASK : value = fields->f_mask; break; @@ -1214,6 +1304,9 @@ ms1_cgen_get_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_RC2 : value = fields->f_rc2; break; + case MS1_OPERAND_RC3 : + value = fields->f_rc3; + break; case MS1_OPERAND_RCNUM : value = fields->f_rcnum; break; @@ -1286,6 +1379,18 @@ ms1_cgen_set_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_BRC2 : fields->f_brc2 = value; break; + case MS1_OPERAND_CB1INCR : + fields->f_cb1incr = value; + break; + case MS1_OPERAND_CB1SEL : + fields->f_cb1sel = value; + break; + case MS1_OPERAND_CB2INCR : + fields->f_cb2incr = value; + break; + case MS1_OPERAND_CB2SEL : + fields->f_cb2sel = value; + break; case MS1_OPERAND_CBRB : fields->f_cbrb = value; break; @@ -1343,6 +1448,9 @@ ms1_cgen_set_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_IMM16 : fields->f_imm16s = value; break; + case MS1_OPERAND_IMM16L : + fields->f_imm16l = value; + break; case MS1_OPERAND_IMM16O : fields->f_imm16s = value; break; @@ -1358,6 +1466,9 @@ ms1_cgen_set_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_LENGTH : fields->f_length = value; break; + case MS1_OPERAND_LOOPSIZE : + fields->f_loopo = value; + break; case MS1_OPERAND_MASK : fields->f_mask = value; break; @@ -1382,6 +1493,9 @@ ms1_cgen_set_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_RC2 : fields->f_rc2 = value; break; + case MS1_OPERAND_RC3 : + fields->f_rc3 = value; + break; case MS1_OPERAND_RCNUM : fields->f_rcnum = value; break; @@ -1444,6 +1558,18 @@ ms1_cgen_set_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_BRC2 : fields->f_brc2 = value; break; + case MS1_OPERAND_CB1INCR : + fields->f_cb1incr = value; + break; + case MS1_OPERAND_CB1SEL : + fields->f_cb1sel = value; + break; + case MS1_OPERAND_CB2INCR : + fields->f_cb2incr = value; + break; + case MS1_OPERAND_CB2SEL : + fields->f_cb2sel = value; + break; case MS1_OPERAND_CBRB : fields->f_cbrb = value; break; @@ -1501,6 +1627,9 @@ ms1_cgen_set_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_IMM16 : fields->f_imm16s = value; break; + case MS1_OPERAND_IMM16L : + fields->f_imm16l = value; + break; case MS1_OPERAND_IMM16O : fields->f_imm16s = value; break; @@ -1516,6 +1645,9 @@ ms1_cgen_set_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_LENGTH : fields->f_length = value; break; + case MS1_OPERAND_LOOPSIZE : + fields->f_loopo = value; + break; case MS1_OPERAND_MASK : fields->f_mask = value; break; @@ -1540,6 +1672,9 @@ ms1_cgen_set_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case MS1_OPERAND_RC2 : fields->f_rc2 = value; break; + case MS1_OPERAND_RC3 : + fields->f_rc3 = value; + break; case MS1_OPERAND_RCNUM : fields->f_rcnum = value; break; diff --git a/opcodes/ms1-opc.c b/opcodes/ms1-opc.c index 4b9a05c..b30db01 100644 --- a/opcodes/ms1-opc.c +++ b/opcodes/ms1-opc.c @@ -237,6 +237,26 @@ static const CGEN_IFMT ifmt_mfbcbincrs ATTRIBUTE_UNUSED = { 32, 32, 0xfc008000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_PERM) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_UU_1_15) }, { F (F_CBX) }, { F (F_CCB) }, { F (F_CDB) }, { F (F_ROWNUM2) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } } }; +static const CGEN_IFMT ifmt_loop ATTRIBUTE_UNUSED = { + 32, 32, 0xff0fff00, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_SR1) }, { F (F_UU4A) }, { F (F_UU8) }, { F (F_LOOPO) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_loopi ATTRIBUTE_UNUSED = { + 32, 32, 0xff000000, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_IMM16L) }, { F (F_LOOPO) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_dfbc ATTRIBUTE_UNUSED = { + 32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_CB1SEL) }, { F (F_CB2SEL) }, { F (F_CB1INCR) }, { F (F_CB2INCR) }, { F (F_RC3) }, { F (F_RC2) }, { F (F_CTXDISP) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_dwfb ATTRIBUTE_UNUSED = { + 32, 32, 0xfc000080, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_CB1SEL) }, { F (F_CB2SEL) }, { F (F_CB1INCR) }, { F (F_CB2INCR) }, { F (F_UU1) }, { F (F_RC2) }, { F (F_CTXDISP) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_dfbr ATTRIBUTE_UNUSED = { + 32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_CB1SEL) }, { F (F_CB2SEL) }, { F (F_SR2) }, { F (F_LENGTH) }, { F (F_ROWNUM1) }, { F (F_ROWNUM2) }, { F (F_RC2) }, { F (F_CTXDISP) }, { 0 } } +}; + #undef F #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) @@ -722,6 +742,42 @@ static const CGEN_OPCODE ms1_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (FRSR1), ',', OP (FRSR2), ',', '#', OP (PERM), ',', '#', OP (CBX), ',', '#', OP (CCB), ',', '#', OP (CDB), ',', '#', OP (ROWNUM2), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } }, & ifmt_mfbcbincrs, { 0xfc000000 } }, +/* loop $frsr1,$loopsize */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (FRSR1), ',', OP (LOOPSIZE), 0 } }, + & ifmt_loop, { 0x3e000000 } + }, +/* loopi #$imm16l,$loopsize */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', '#', OP (IMM16L), ',', OP (LOOPSIZE), 0 } }, + & ifmt_loopi, { 0x3f000000 } + }, +/* dfbc #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc3,#$rc2,#$ctxdisp */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', '#', OP (CB1SEL), ',', '#', OP (CB2SEL), ',', '#', OP (CB1INCR), ',', '#', OP (CB2INCR), ',', '#', OP (RC3), ',', '#', OP (RC2), ',', '#', OP (CTXDISP), 0 } }, + & ifmt_dfbc, { 0x80000000 } + }, +/* dwfb #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc2,#$ctxdisp */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', '#', OP (CB1SEL), ',', '#', OP (CB2SEL), ',', '#', OP (CB1INCR), ',', '#', OP (CB2INCR), ',', '#', OP (RC2), ',', '#', OP (CTXDISP), 0 } }, + & ifmt_dwfb, { 0x84000000 } + }, +/* fbwfb #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc3,#$rc2,#$ctxdisp */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', '#', OP (CB1SEL), ',', '#', OP (CB2SEL), ',', '#', OP (CB1INCR), ',', '#', OP (CB2INCR), ',', '#', OP (RC3), ',', '#', OP (RC2), ',', '#', OP (CTXDISP), 0 } }, + & ifmt_dfbc, { 0x88000000 } + }, +/* dfbr #$cb1sel,#$cb2sel,$frsr2,#$length,#$rownum1,#$rownum2,#$rc2,#$ctxdisp */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', '#', OP (CB1SEL), ',', '#', OP (CB2SEL), ',', OP (FRSR2), ',', '#', OP (LENGTH), ',', '#', OP (ROWNUM1), ',', '#', OP (ROWNUM2), ',', '#', OP (RC2), ',', '#', OP (CTXDISP), 0 } }, + & ifmt_dfbr, { 0x8c000000 } + }, }; #undef A diff --git a/opcodes/ms1-opc.h b/opcodes/ms1-opc.h index 5ac1357..dc57584 100644 --- a/opcodes/ms1-opc.h +++ b/opcodes/ms1-opc.h @@ -68,14 +68,15 @@ typedef enum cgen_insn_type { , MS1_INSN_WFBI, MS1_INSN_WFB, MS1_INSN_RCRISC, MS1_INSN_FBCBINC , MS1_INSN_RCXMODE, MS1_INSN_INTERLEAVER, MS1_INSN_WFBINC, MS1_INSN_MWFBINC , MS1_INSN_WFBINCR, MS1_INSN_MWFBINCR, MS1_INSN_FBCBINCS, MS1_INSN_MFBCBINCS - , MS1_INSN_FBCBINCRS, MS1_INSN_MFBCBINCRS + , MS1_INSN_FBCBINCRS, MS1_INSN_MFBCBINCRS, MS1_INSN_LOOP, MS1_INSN_LOOPI + , MS1_INSN_DFBC, MS1_INSN_DWFB, MS1_INSN_FBWFB, MS1_INSN_DFBR } CGEN_INSN_TYPE; /* Index of `invalid' insn place holder. */ #define CGEN_INSN_INVALID MS1_INSN_INVALID /* Total number of insns in table. */ -#define MAX_INSNS ((int) MS1_INSN_MFBCBINCRS + 1) +#define MAX_INSNS ((int) MS1_INSN_DFBR + 1) /* This struct records data prior to insertion or after extraction. */ struct cgen_fields @@ -97,7 +98,9 @@ struct cgen_fields long f_uu4a; long f_uu4b; long f_uu12; + long f_uu8; long f_uu16; + long f_uu1; long f_msopc; long f_uu_26_25; long f_mask; @@ -147,6 +150,13 @@ struct cgen_fields long f_dup; long f_rc2; long f_ctxdisp; + long f_imm16l; + long f_loopo; + long f_cb1sel; + long f_cb2sel; + long f_cb1incr; + long f_cb2incr; + long f_rc3; long f_msysfrsr2; long f_brc2; long f_ball2; diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c index 8e7c134..84e6d6a 100644 --- a/opcodes/ppc-opc.c +++ b/opcodes/ppc-opc.c @@ -4522,8 +4522,8 @@ const struct powerpc_opcode powerpc_opcodes[] = { { "fmuls", A(59,25,0), AFRB_MASK, PPC, { FRT, FRA, FRC } }, { "fmuls.", A(59,25,1), AFRB_MASK, PPC, { FRT, FRA, FRC } }, -{ "fsqrtes", A(59,26,0), AFRAFRC_MASK, POWER5, { FRT, FRB } }, -{ "fsqrtes.", A(59,26,1), AFRAFRC_MASK, POWER5, { FRT, FRB } }, +{ "frsqrtes", A(59,26,0), AFRAFRC_MASK, POWER5, { FRT, FRB } }, +{ "frsqrtes.",A(59,26,1), AFRAFRC_MASK, POWER5, { FRT, FRB } }, { "fmsubs", A(59,28,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, { "fmsubs.", A(59,28,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, @@ -4652,6 +4652,15 @@ const struct powerpc_opcode powerpc_opcodes[] = { { "fabs", XRC(63,264,0), XRA_MASK, COM, { FRT, FRB } }, { "fabs.", XRC(63,264,1), XRA_MASK, COM, { FRT, FRB } }, +{ "frin", XRC(63,392,0), XRA_MASK, POWER5, { FRT, FRB } }, +{ "frin.", XRC(63,392,1), XRA_MASK, POWER5, { FRT, FRB } }, +{ "friz", XRC(63,424,0), XRA_MASK, POWER5, { FRT, FRB } }, +{ "friz.", XRC(63,424,1), XRA_MASK, POWER5, { FRT, FRB } }, +{ "frip", XRC(63,456,0), XRA_MASK, POWER5, { FRT, FRB } }, +{ "frip.", XRC(63,456,1), XRA_MASK, POWER5, { FRT, FRB } }, +{ "frim", XRC(63,488,0), XRA_MASK, POWER5, { FRT, FRB } }, +{ "frim.", XRC(63,488,1), XRA_MASK, POWER5, { FRT, FRB } }, + { "mffs", XRC(63,583,0), XRARB_MASK, COM, { FRT } }, { "mffs.", XRC(63,583,1), XRARB_MASK, COM, { FRT } }, diff --git a/sim/ChangeLog b/sim/ChangeLog index e7ef6a5..3fa2416 100644 --- a/sim/ChangeLog +++ b/sim/ChangeLog @@ -1,3 +1,8 @@ +2005-11-16 Hans-Peter Nilsson <hp@axis.com> + + * cris/cris-tmpl.c (MY (f_model_insn_before)): Make sure only the + low 32 bits are used after an unsigned long cast. + 2005-05-28 Hans-Peter Nilsson <hp@axis.com> * cris/Makefile.in (stamp-v32fmloop): Depend on stamp-v10fmloop. diff --git a/sim/cris/cris-tmpl.c b/sim/cris/cris-tmpl.c index 3a24cf3..678ac01 100644 --- a/sim/cris/cris-tmpl.c +++ b/sim/cris/cris-tmpl.c @@ -121,13 +121,15 @@ MY (f_model_insn_before) (SIM_CPU *current_cpu, int first_p ATTRIBUTE_UNUSED) char flags[7]; SIM_DESC sd = CPU_STATE (current_cpu); - cris_trace_printf (sd, current_cpu, "%lx ", (unsigned long) (CPU (h_pc))); + cris_trace_printf (sd, current_cpu, "%lx ", + 0xffffffffUL & (unsigned long) (CPU (h_pc))); for (i = 0; i < 15; i++) cris_trace_printf (sd, current_cpu, "%lx ", - (unsigned long) (XCONCAT3(crisv,BASENUM, - f_h_gr_get) (current_cpu, - i))); + 0xffffffffUL + & (unsigned long) (XCONCAT3(crisv,BASENUM, + f_h_gr_get) (current_cpu, + i))); flags[0] = GET_H_IBIT () != 0 ? 'I' : 'i'; flags[1] = GET_H_XBIT () != 0 ? 'X' : 'x'; flags[2] = GET_H_NBIT () != 0 ? 'N' : 'n'; @@ -148,9 +150,10 @@ MY (f_model_insn_before) (SIM_CPU *current_cpu, int first_p ATTRIBUTE_UNUSED) ->unaligned_mem_dword_count - CPU_CRIS_PREV_MISC_PROFILE (current_cpu) ->unaligned_mem_dword_count)), - (unsigned long) (XCONCAT3(crisv,BASENUM, - f_h_gr_get) (current_cpu, - 15))); + 0xffffffffUL + & (unsigned long) (XCONCAT3(crisv,BASENUM, + f_h_gr_get) (current_cpu, + 15))); else cris_trace_printf (sd, current_cpu, "%s %d\n", flags, (int) diff --git a/sim/sh/ChangeLog b/sim/sh/ChangeLog index ee6bfe1..586af7b 100644 --- a/sim/sh/ChangeLog +++ b/sim/sh/ChangeLog @@ -1,3 +1,8 @@ +2005-11-10 Andrew Stubbs <andrew.stubbs@st.com> + + * interp.c (sim_memory_size): Use same amount of memory on Windows as + elsewhere. + 2005-09-19 J"orn Rennecke <joern.rennecke@st.com> * interp.c (<sys/mman.h>): Include. diff --git a/sim/sh/interp.c b/sim/sh/interp.c index 235d6bb..d89b0dc 100644 --- a/sim/sh/interp.c +++ b/sim/sh/interp.c @@ -853,7 +853,7 @@ do { \ #endif -#if defined(__GO32__) || defined(_WIN32) +#if defined(__GO32__) int sim_memory_size = 19; #else int sim_memory_size = 24; |