Remove Cell Broadband Engine debugging support
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Fri, 20 Sep 2019 21:06:57 +0000 (23:06 +0200)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Fri, 20 Sep 2019 21:06:57 +0000 (23:06 +0200)
This patch implements removal of Cell/B.E. support, including
- Support for the spu-*-* target
- Support for native stand-alone SPU debugging
- Support for integrated debugging of combined PPU/SPU applications
- Remote debugging (gdbserver) support for all the above.

The patch also removes the TARGET_OBJECT_SPU target object type,
as this is available only on Cell/B.E. targets, including
- Native Linux support
- Core file support (including core file generation)
- Remote target support, including removal of the qXfer:spu:read
  and qXfer:spu:write remote protocal packets and associated
  support in gdbserver.

gdb/ChangeLog
2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>

* NEWS: Mention that Cell/B.E. debugging support was removed.
* MAINTAINERS: Remove spu target.

* config/djgpp/fnchange.lst: Remove entries for removed files.

* Makefile.in (ALL_TARGET_OBS): Remove solib-spu.o,
spu-multiarch.o, and spu-tdep.o.
(HFILES_NO_SRCDIR): Remove solib-spu.h and spu-tdep.h.
(ALLDEPFILES): Remove solib-spu.c, spu-linux-nat.c,
spu-multiarch.c, and spu-tdep.c.
* spu-linux-nat.c: Remove file.
* spu-multiarch.c: Remove file.
* spu-tdep.c: Remove file.
* spu-tdep.h: Remove file.
* solib-spu.c: Remove file.
* solib-spu.h: Remove file.

* configure.host (powerpc64*-*-linux*): Remove Cell/B.E. support.
* configure.nat (spu-linux): Remove.
* configure.tgt (powerpc*-*-linux*): Remove solib-spu.o and
solib-multiarch.o from gdb_target_obs.
(spu*-*-*): Remove.

* arch/ppc-linux-common.h (struct ppc_linux_features): Remove "cell"
feature flag.
(ppc_linux_no_features): Update.
* arch/ppc-linux-common.c (ppc_linux_match_description): Remove
Cell/B.E. support.
* arch/ppc-linux-tdesc.h (tdesc_powerpc_cell32l): Remove declaration.
(tdesc_powerpc_cell64l): Likewise.
* nat/ppc-linux.h (PPC_FEATURE_CELL): Remove.
* ppc-linux-nat.c (ppc_linux_nat_target::read_description): Remove
Cell/B.E. support.
* ppc-linux-tdep.h: Do not include "solib-spu.h" or "spu-tdep.h".
Do not include "features/rs6000/powerpc-cell32l.c" or
"features/rs6000/powerpc-cell64l.c".
(ppc_linux_spu_section): Remove.
(ppc_linux_core_read_description): Remove Cell/B.E. support.
(spe_context_objfile, spe_context_lm_addr, spe_context_offset,
spe_context_cache_ptid, spe_context_cache_ptid): Remove.
(ppc_linux_spe_context_lookup): Remove.
(ppc_linux_spe_context_inferior_created): Remove.
(ppc_linux_spe_context_solib_loaded): Remove.
(ppc_linux_spe_context_solib_unloaded): Remove.
(ppc_linux_spe_context): Remove.
(struct ppu2spu_cache): Remove.
(ppu2spu_prev_arch, ppu2spu_this_id, ppu2spu_prev_register): Remove.
(struct ppu2spu_data): Remove.
(ppu2spu_unwind_register, ppu2spu_sniffer, ppu2spu_dealloc_cache,
ppu2spu_unwind): Remove.
(ppc_linux_init_abi): Remove Cell/B.E. support.
* rs6000-tdep.h (rs6000_gdbarch_init): Remove Cell/B.E. support.

* features/Makefile (rs6000/powerpc-cell32l-expedite): Remove.
(rs6000/powerpc-cell64l-expedite): Likewise
(WHICH): Remove rs6000/powerpc-cell32l and rs6000/powerpc-cell64l.
(XMLTOC): Remove rs6000/powerpc-cell32l.xml and
rs6000/powerpc-cell64l.xml.
* features/rs6000/powerpc-cell32l.xml: Remove.
* features/rs6000/powerpc-cell64l.xml: Likewise.
* features/rs6000/powerpc-cell32l.c: Remove generated file.
* features/rs6000/powerpc-cell64l.c: Likewise.
* regformats/rs6000/powerpc-cell32l.dat: Remove generated file.
* regformats/rs6000/powerpc-cell64l.dat: Likewise.
* regformats/reg-spu.dat: Remove.

* target.h (enum target_object): Remove TARGET_OBJECT_SPU.
* corelow.c (struct spuid_list): Remove.
(add_to_spuid_list): Remove.
(core_target::xfer_partial): Remove support for TARGET_OBJECT_SPU.
* remote.c (PACKET_qXfer_spu_read, PACKET_qXfer_spu_write): Remove.
(remote_protocol_features): Remove associated entries.
(_initialize_remote): No longer initialize them.
(remote_target::xfer_partial): Remove support for TARGET_OBJECT_SPU.
* linux-nat.c (SPUFS_MAGIC): Remove.
(linux_proc_xfer_spu): Remove.
(spu_enumerate_spu_ids): Remove.
(linux_nat_target::xfer_partial): Remove support for TARGET_OBJECT_SPU.
* linux-tdep.c (-linux_spu_make_corefile_notes): Remove.
(linux_make_corefile_notes): No longer call it.

* regcache.c (cooked_read_test): Remove bfd_arch_spu special case.
(cooked_write_test): Likewise.

gdb/doc/ChangeLog
2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>

* doc/gdb.texinfo (Remote Configuration): Remove documentation for
qXfer:spu:read and qXfer:spu:write.
(General Query Packets): Likewise.
(Cell Broadband Engine SPU architecture): Remove subsection.

gdb/gdbserver/ChangeLog
2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>

* configure.srv (ipa_ppc_linux_regobj): Remove powerpc-cell32l-ipa.o
and powerpc-cell64l-ipa.o.
(powerpc*-*-linux*): Remove powerpc-cell32l.o and powerpc-cell64l.o
from srv_regobj.  Remove rs6000/powerpc-cell32l.xml and
rs6000/powerpc-cell64l.xml from srv_xmlfiles.
(spu*-*-*): Remove.

* spu-low.c: Remove file.

* linux-ppc-low.c (INSTR_SC, NR_spu_run): Remove.
(parse_spufs_run): Remove.
(ppc_get_pc): Remove Cell/B.E. support.
(ppc_set_pc): Likewise.
(ppc_breakpoint_at): Likewise.
(ppc_arch_setup): Likewise.
(ppc_get_ipa_tdesc_idx): Do not handle tdesc_powerpc_cell64l or
tdesc_powerpc_cell32l.
(initialize_low_arch): Do not call init_registers_powerpc_cell64l
or init_registers_powerpc_cell32l.
* linux-ppc-ipa.c (get_ipa_tdesc): Do not handle PPC_TDESC_CELL.
(initialize_low_tracepoint): Do not call init_registers_powerpc_cell64l
or init_registers_powerpc_cell32l.
* linux-ppc-tdesc-init.h (PPC_TDESC_CELL): Mark as unused.
(init_registers_powerpc_cell32l): Remove prototype.
(init_registers_powerpc_cell64l): Likewise.

* target.h (struct target_ops): Remove qxfer_spu member.
* server.c (handle_qxfer_spu): Remove.
(qxfer_packets): Remove entry for "spu".
(handle_query): No longer support qXfer:spu:read or qXfer:spu:write.
* linux-low.c (SPUFS_MAGIC): Remove.
(spu_enumerate_spu_ids): Remove.
(linux_qxfer_spu): Remove.
(linux_target_ops): Remove qxfer_spu member.
* lynx-low.c (lynx_target_ops): Remove qxfer_spu member.
* nto-low.c (nto_target_ops): Remove qxfer_spu member.
* win32-low.c (win32_target_ops): Remove qxfer_spu member.

gdb/testsuite/ChangeLog
2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>

* gdb.arch/spu-info.exp: Remove file.
* gdb.arch/spu-info.c: Remove file.
* gdb.arch/spu-ls.exp: Remove file.
* gdb.arch/spu-ls.c: Remove file.

* gdb.asm/asm-source.exp: Remove support for spu*-*-*.
* gdb.asm/spu.inc: Remove file.

* gdb.base/dump.exp: Remove support for spu*-*-*.
* gdb.base/stack-checking.exp: Likewise.
* gdb.base/overlays.exp: Likewise.
* gdb.base/ovlymgr.c: Likewise.
* gdb.base/spu.ld: Remove file.

* gdb.cp/bs15503.exp: Remove support for spu*-*-*.
* gdb.cp/cpexprs.exp: Likewise.
* gdb.cp/exception.exp: Likewise.
* gdb.cp/gdb2495.exp: Likewise.
* gdb.cp/mb-templates.exp: Likewise.
* gdb.cp/pr9167.exp: Likewise.
* gdb.cp/userdef.exp: Likewise.

* gdb.xml/tdesc-regs.exp: Remove support for spu*-*-*.

* gdb.cell: Remove directory.
* lib/cell.exp: Remove file.

108 files changed:
gdb/ChangeLog
gdb/MAINTAINERS
gdb/Makefile.in
gdb/NEWS
gdb/arch/ppc-linux-common.c
gdb/arch/ppc-linux-common.h
gdb/arch/ppc-linux-tdesc.h
gdb/config/djgpp/fnchange.lst
gdb/configure.host
gdb/configure.nat
gdb/configure.tgt
gdb/corelow.c
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/features/Makefile
gdb/features/rs6000/powerpc-cell32l.c [deleted file]
gdb/features/rs6000/powerpc-cell32l.xml [deleted file]
gdb/features/rs6000/powerpc-cell64l.c [deleted file]
gdb/features/rs6000/powerpc-cell64l.xml [deleted file]
gdb/gdbserver/ChangeLog
gdb/gdbserver/configure.srv
gdb/gdbserver/linux-low.c
gdb/gdbserver/linux-ppc-ipa.c
gdb/gdbserver/linux-ppc-low.c
gdb/gdbserver/linux-ppc-tdesc-init.h
gdb/gdbserver/lynx-low.c
gdb/gdbserver/nto-low.c
gdb/gdbserver/server.c
gdb/gdbserver/spu-low.c [deleted file]
gdb/gdbserver/target.h
gdb/gdbserver/win32-low.c
gdb/linux-nat.c
gdb/linux-tdep.c
gdb/nat/ppc-linux.h
gdb/ppc-linux-nat.c
gdb/ppc-linux-tdep.c
gdb/regcache.c
gdb/regformats/reg-spu.dat [deleted file]
gdb/regformats/rs6000/powerpc-cell32l.dat [deleted file]
gdb/regformats/rs6000/powerpc-cell64l.dat [deleted file]
gdb/remote.c
gdb/rs6000-tdep.c
gdb/solib-spu.c [deleted file]
gdb/solib-spu.h [deleted file]
gdb/spu-linux-nat.c [deleted file]
gdb/spu-multiarch.c [deleted file]
gdb/spu-tdep.c [deleted file]
gdb/spu-tdep.h [deleted file]
gdb/target.h
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.arch/spu-info.c [deleted file]
gdb/testsuite/gdb.arch/spu-info.exp [deleted file]
gdb/testsuite/gdb.arch/spu-ls.c [deleted file]
gdb/testsuite/gdb.arch/spu-ls.exp [deleted file]
gdb/testsuite/gdb.asm/asm-source.exp
gdb/testsuite/gdb.asm/spu.inc [deleted file]
gdb/testsuite/gdb.base/dump.exp
gdb/testsuite/gdb.base/overlays.exp
gdb/testsuite/gdb.base/ovlymgr.c
gdb/testsuite/gdb.base/spu.ld [deleted file]
gdb/testsuite/gdb.base/stack-checking.c
gdb/testsuite/gdb.cell/arch.exp [deleted file]
gdb/testsuite/gdb.cell/break-spu.c [deleted file]
gdb/testsuite/gdb.cell/break.c [deleted file]
gdb/testsuite/gdb.cell/break.exp [deleted file]
gdb/testsuite/gdb.cell/bt-spu.c [deleted file]
gdb/testsuite/gdb.cell/bt.c [deleted file]
gdb/testsuite/gdb.cell/bt.exp [deleted file]
gdb/testsuite/gdb.cell/bt2-spu.c [deleted file]
gdb/testsuite/gdb.cell/core.exp [deleted file]
gdb/testsuite/gdb.cell/coremaker-spu.c [deleted file]
gdb/testsuite/gdb.cell/coremaker.c [deleted file]
gdb/testsuite/gdb.cell/data-spu.c [deleted file]
gdb/testsuite/gdb.cell/data.c [deleted file]
gdb/testsuite/gdb.cell/data.exp [deleted file]
gdb/testsuite/gdb.cell/dwarfaddr.S [deleted file]
gdb/testsuite/gdb.cell/dwarfaddr.exp [deleted file]
gdb/testsuite/gdb.cell/ea-cache-spu.c [deleted file]
gdb/testsuite/gdb.cell/ea-cache.c [deleted file]
gdb/testsuite/gdb.cell/ea-cache.exp [deleted file]
gdb/testsuite/gdb.cell/ea-standalone.c [deleted file]
gdb/testsuite/gdb.cell/ea-standalone.exp [deleted file]
gdb/testsuite/gdb.cell/ea-test.c [deleted file]
gdb/testsuite/gdb.cell/ea-test.exp [deleted file]
gdb/testsuite/gdb.cell/f-regs.exp [deleted file]
gdb/testsuite/gdb.cell/fork-spu.c [deleted file]
gdb/testsuite/gdb.cell/fork.c [deleted file]
gdb/testsuite/gdb.cell/fork.exp [deleted file]
gdb/testsuite/gdb.cell/gcore.exp [deleted file]
gdb/testsuite/gdb.cell/mem-access-spu.c [deleted file]
gdb/testsuite/gdb.cell/mem-access.c [deleted file]
gdb/testsuite/gdb.cell/mem-access.exp [deleted file]
gdb/testsuite/gdb.cell/ptype.exp [deleted file]
gdb/testsuite/gdb.cell/registers.exp [deleted file]
gdb/testsuite/gdb.cell/size-spu.c [deleted file]
gdb/testsuite/gdb.cell/size.c [deleted file]
gdb/testsuite/gdb.cell/sizeof.exp [deleted file]
gdb/testsuite/gdb.cell/solib-symbol.exp [deleted file]
gdb/testsuite/gdb.cell/solib.exp [deleted file]
gdb/testsuite/gdb.cp/bs15503.exp
gdb/testsuite/gdb.cp/cpexprs.exp
gdb/testsuite/gdb.cp/exception.exp
gdb/testsuite/gdb.cp/gdb2495.exp
gdb/testsuite/gdb.cp/mb-templates.exp
gdb/testsuite/gdb.cp/pr9167.exp
gdb/testsuite/gdb.cp/userdef.exp
gdb/testsuite/gdb.xml/tdesc-regs.exp
gdb/testsuite/lib/cell.exp [deleted file]

index adaa12382277703e3bc8d4034549a9cda324d901..9c8cebaf6fdec9690ecb65fd83cc0d4ebbae34ae 100644 (file)
@@ -1,3 +1,89 @@
+2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * NEWS: Mention that Cell/B.E. debugging support was removed.
+       * MAINTAINERS: Remove spu target.
+
+       * config/djgpp/fnchange.lst: Remove entries for removed files.
+
+       * Makefile.in (ALL_TARGET_OBS): Remove solib-spu.o,
+       spu-multiarch.o, and spu-tdep.o.
+       (HFILES_NO_SRCDIR): Remove solib-spu.h and spu-tdep.h.
+       (ALLDEPFILES): Remove solib-spu.c, spu-linux-nat.c,
+       spu-multiarch.c, and spu-tdep.c.
+       * spu-linux-nat.c: Remove file.
+       * spu-multiarch.c: Remove file.
+       * spu-tdep.c: Remove file.
+       * spu-tdep.h: Remove file.
+       * solib-spu.c: Remove file.
+       * solib-spu.h: Remove file.
+
+       * configure.host (powerpc64*-*-linux*): Remove Cell/B.E. support.
+       * configure.nat (spu-linux): Remove.
+       * configure.tgt (powerpc*-*-linux*): Remove solib-spu.o and
+       solib-multiarch.o from gdb_target_obs.
+       (spu*-*-*): Remove.
+
+       * arch/ppc-linux-common.h (struct ppc_linux_features): Remove "cell"
+       feature flag.
+       (ppc_linux_no_features): Update.
+       * arch/ppc-linux-common.c (ppc_linux_match_description): Remove
+       Cell/B.E. support.
+       * arch/ppc-linux-tdesc.h (tdesc_powerpc_cell32l): Remove declaration.
+       (tdesc_powerpc_cell64l): Likewise.
+       * nat/ppc-linux.h (PPC_FEATURE_CELL): Remove.
+       * ppc-linux-nat.c (ppc_linux_nat_target::read_description): Remove
+       Cell/B.E. support.
+       * ppc-linux-tdep.h: Do not include "solib-spu.h" or "spu-tdep.h".
+       Do not include "features/rs6000/powerpc-cell32l.c" or
+       "features/rs6000/powerpc-cell64l.c".
+       (ppc_linux_spu_section): Remove.
+       (ppc_linux_core_read_description): Remove Cell/B.E. support.
+       (spe_context_objfile, spe_context_lm_addr, spe_context_offset,
+       spe_context_cache_ptid, spe_context_cache_ptid): Remove.
+       (ppc_linux_spe_context_lookup): Remove.
+       (ppc_linux_spe_context_inferior_created): Remove.
+       (ppc_linux_spe_context_solib_loaded): Remove.
+       (ppc_linux_spe_context_solib_unloaded): Remove.
+       (ppc_linux_spe_context): Remove.
+       (struct ppu2spu_cache): Remove.
+       (ppu2spu_prev_arch, ppu2spu_this_id, ppu2spu_prev_register): Remove.
+       (struct ppu2spu_data): Remove.
+       (ppu2spu_unwind_register, ppu2spu_sniffer, ppu2spu_dealloc_cache,
+       ppu2spu_unwind): Remove.
+       (ppc_linux_init_abi): Remove Cell/B.E. support.
+       * rs6000-tdep.h (rs6000_gdbarch_init): Remove Cell/B.E. support.
+
+       * features/Makefile (rs6000/powerpc-cell32l-expedite): Remove.
+       (rs6000/powerpc-cell64l-expedite): Likewise
+       (WHICH): Remove rs6000/powerpc-cell32l and rs6000/powerpc-cell64l.
+       (XMLTOC): Remove rs6000/powerpc-cell32l.xml and
+       rs6000/powerpc-cell64l.xml.
+       * features/rs6000/powerpc-cell32l.xml: Remove.
+       * features/rs6000/powerpc-cell64l.xml: Likewise.
+       * features/rs6000/powerpc-cell32l.c: Remove generated file.
+       * features/rs6000/powerpc-cell64l.c: Likewise.
+       * regformats/rs6000/powerpc-cell32l.dat: Remove generated file.
+       * regformats/rs6000/powerpc-cell64l.dat: Likewise.
+       * regformats/reg-spu.dat: Remove.
+
+       * target.h (enum target_object): Remove TARGET_OBJECT_SPU.
+       * corelow.c (struct spuid_list): Remove.
+       (add_to_spuid_list): Remove.
+       (core_target::xfer_partial): Remove support for TARGET_OBJECT_SPU.
+       * remote.c (PACKET_qXfer_spu_read, PACKET_qXfer_spu_write): Remove.
+       (remote_protocol_features): Remove associated entries.
+       (_initialize_remote): No longer initialize them.
+       (remote_target::xfer_partial): Remove support for TARGET_OBJECT_SPU.
+       * linux-nat.c (SPUFS_MAGIC): Remove.
+       (linux_proc_xfer_spu): Remove.
+       (spu_enumerate_spu_ids): Remove.
+       (linux_nat_target::xfer_partial): Remove support for TARGET_OBJECT_SPU.
+       * linux-tdep.c (-linux_spu_make_corefile_notes): Remove.
+       (linux_make_corefile_notes): No longer call it.
+
+       * regcache.c (cooked_read_test): Remove bfd_arch_spu special case.
+       (cooked_write_test): Likewise.
+
 2019-09-20  Tom Tromey  <tom@tromey.com>
 
        * NEWS: Mention case-sensitivity of TUI commands.
index fd24cb79bc6c40488c990cbecad1f62db2e2d81b..3efcb714707142eb313e98eb98934a6098ed23e4 100644 (file)
@@ -319,9 +319,6 @@ the native maintainer when resolving ABI issues.
        sparc           --target=sparc64-solaris2.10 ,-Werror
                        (--target=sparc-elf broken)
 
-       spu             --target=spu-elf ,-Werror
-                       Ulrich Weigand          uweigand@de.ibm.com
-
        tic6x           --target=tic6x-elf ,-Werror
                        Yao Qi                  qiyao@sourceware.org
 
index e7e26a44a0cb951c1cf16fd99743795e6f4874e8..877a9ccd6bd727056d6288e1c277af0fea5ea3f3 100644 (file)
@@ -776,7 +776,6 @@ ALL_TARGET_OBS = \
        solib-darwin.o \
        solib-dsbt.o \
        solib-frv.o \
-       solib-spu.o \
        solib-svr4.o \
        sparc-linux-tdep.o \
        sparc-nbsd-tdep.o \
@@ -784,8 +783,6 @@ ALL_TARGET_OBS = \
        sparc-ravenscar-thread.o \
        sparc-sol2-tdep.o \
        sparc-tdep.o \
-       spu-multiarch.o \
-       spu-tdep.o \
        symfile-mem.o \
        tic6x-linux-tdep.o \
        tic6x-tdep.o \
@@ -1382,7 +1379,6 @@ HFILES_NO_SRCDIR = \
        solib.h \
        solib-aix.h \
        solib-darwin.h \
-       solib-spu.h \
        solib-svr4.h \
        solib-target.h \
        solist.h \
@@ -1392,7 +1388,6 @@ HFILES_NO_SRCDIR = \
        sparc-ravenscar-thread.h \
        sparc-tdep.h \
        sparc64-tdep.h \
-       spu-tdep.h \
        stabsread.h \
        stack.h \
        stap-probe.h \
@@ -2304,7 +2299,6 @@ ALLDEPFILES = \
        sh-tdep.c \
        sol2-tdep.c \
        solib-aix.c \
-       solib-spu.c \
        solib-svr4.c \
        sparc-linux-nat.c \
        sparc-linux-tdep.c \
@@ -2327,9 +2321,6 @@ ALLDEPFILES = \
        sparc64-obsd-tdep.c \
        sparc64-sol2-tdep.c \
        sparc64-tdep.c \
-       spu-linux-nat.c \
-       spu-multiarch.c \
-       spu-tdep.c \
        tilegx-linux-nat.c \
        tilegx-linux-tdep.c \
        tilegx-tdep.c \
index 201701bac310cc7dfeebf41625dd3a11d5988302..35b48d9cb3013d3d9e92611bcfd9fed8c426abb9 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -330,6 +330,12 @@ focus, winheight, +, -, >, <
   from .inputrc to bind keys in this keymap.  This feature is only
   available when gdb is built against GNU readline 8.0 or later.
 
+* Removed targets and native configurations
+
+  GDB no longer supports debugging the Cell Broadband Engine.  This includes
+  both debugging standalone Cell/B.E. SPU applications and integrated debugging
+  of Cell/B.E. applications that use both the PPU and SPU architectures.
+
 *** Changes in GDB 8.3
 
 * GDB and GDBserver now support access to additional registers on
index 8af30e3cd4292daa7d8788aeae70e0f0f0fa98cc..20b35807460ce5428e1ca6e2971026e7844a427b 100644 (file)
@@ -50,9 +50,7 @@ ppc_linux_match_description (struct ppc_linux_features features)
 
   if (features.wordsize == 8)
     {
-      if (features.cell)
-       tdesc = tdesc_powerpc_cell64l;
-      else if (features.vsx)
+      if (features.vsx)
        tdesc = (features.htm? tdesc_powerpc_isa207_htm_vsx64l
                 : features.isa207? tdesc_powerpc_isa207_vsx64l
                 : features.ppr_dscr? tdesc_powerpc_isa205_ppr_dscr_vsx64l
@@ -69,9 +67,7 @@ ppc_linux_match_description (struct ppc_linux_features features)
     {
       gdb_assert (features.wordsize == 4);
 
-      if (features.cell)
-       tdesc = tdesc_powerpc_cell32l;
-      else if (features.vsx)
+      if (features.vsx)
        tdesc = (features.htm? tdesc_powerpc_isa207_htm_vsx32l
                 : features.isa207? tdesc_powerpc_isa207_vsx32l
                 : features.ppr_dscr? tdesc_powerpc_isa205_ppr_dscr_vsx32l
index fe332accdcae5757f20a23adbfbf89e022a5949a..1f91ff0576ea669a648f9ade556c25663ef48a5b 100644 (file)
@@ -58,7 +58,6 @@ struct ppc_linux_features
   bool ppr_dscr;
   bool isa207;
   bool htm;
-  bool cell;
 };
 
 /* Base value for ppc_linux_features variables.  */
@@ -70,7 +69,6 @@ const struct ppc_linux_features ppc_linux_no_features = {
   false,
   false,
   false,
-  false,
 };
 
 /* Return a target description that matches FEATURES.  */
index 5c9242f7dc540286354bc2ea5874db45aefe6e1c..5014131b6e7ca3c0d444c76bd7b1b3e963005774 100644 (file)
@@ -24,7 +24,6 @@ struct target_desc;
 
 extern struct target_desc *tdesc_powerpc_32l;
 extern struct target_desc *tdesc_powerpc_altivec32l;
-extern struct target_desc *tdesc_powerpc_cell32l;
 extern struct target_desc *tdesc_powerpc_vsx32l;
 extern struct target_desc *tdesc_powerpc_isa205_32l;
 extern struct target_desc *tdesc_powerpc_isa205_altivec32l;
@@ -36,7 +35,6 @@ extern struct target_desc *tdesc_powerpc_e500l;
 
 extern struct target_desc *tdesc_powerpc_64l;
 extern struct target_desc *tdesc_powerpc_altivec64l;
-extern struct target_desc *tdesc_powerpc_cell64l;
 extern struct target_desc *tdesc_powerpc_vsx64l;
 extern struct target_desc *tdesc_powerpc_isa205_64l;
 extern struct target_desc *tdesc_powerpc_isa205_altivec64l;
index 12fb082b6610fff79160550c901cdcbcaad8c2c4..7608218dbc1c933b1d0376b7368e72aa236d12d3 100644 (file)
 @V@/gdb/features/rs6000/powerpc-vsx32l.c @V@/gdb/features/rs6000/ppc-v32l.c
 @V@/gdb/features/rs6000/powerpc-vsx64.c @V@/gdb/features/rs6000/ppc-v64.c
 @V@/gdb/features/rs6000/powerpc-vsx64l.c @V@/gdb/features/rs6000/ppc-v64l.c
-@V@/gdb/features/rs6000/powerpc-cell32l.c @V@/gdb/features/rs6000/ppc-c32l.c
-@V@/gdb/features/rs6000/powerpc-cell64l.c @V@/gdb/features/rs6000/ppc-c64l.c
 @V@/gdb/features/rs6000/powerpc-32.xml @V@/gdb/features/rs6000/ppc-32.xml
 @V@/gdb/features/rs6000/powerpc-32l.xml @V@/gdb/features/rs6000/ppc-32l.xml
 @V@/gdb/features/rs6000/powerpc-403.xml @V@/gdb/features/rs6000/ppc-403.xml
 @V@/gdb/features/rs6000/powerpc-vsx32l.xml @V@/gdb/features/rs6000/ppc-v32l.xml
 @V@/gdb/features/rs6000/powerpc-vsx64.xml @V@/gdb/features/rs6000/ppc-v64.xml
 @V@/gdb/features/rs6000/powerpc-vsx64l.xml @V@/gdb/features/rs6000/ppc-v64l.xml
-@V@/gdb/features/rs6000/powerpc-cell32l.xml @V@/gdb/features/rs6000/ppc-c32l.xml
-@V@/gdb/features/rs6000/powerpc-cell64l.xml @V@/gdb/features/rs6000/ppc-c64l.xml
 @V@/gdb/features/i386/amd64-avx-linux.c @V@/gdb/features/i386/a64-al.c
 @V@/gdb/features/i386/amd64-avx.c @V@/gdb/features/i386/a64-a.c
 @V@/gdb/features/i386/amd64-avx-linux.xml @V@/gdb/features/i386/a64-al.xml
 @V@/gdb/regformats/rs6000/powerpc-isa205-vsx64l.dat @V@/gdb/regformats/rs6000/ppciv64l.dat
 @V@/gdb/regformats/rs6000/powerpc-vsx32l.dat @V@/gdb/regformats/rs6000/ppc-v32l.dat
 @V@/gdb/regformats/rs6000/powerpc-vsx64l.dat @V@/gdb/regformats/rs6000/ppc-v64l.dat
-@V@/gdb/regformats/rs6000/powerpc-cell32l.dat @V@/gdb/regformats/rs6000/ppc-c32l.dat
-@V@/gdb/regformats/rs6000/powerpc-cell64l.dat @V@/gdb/regformats/rs6000/ppc-c64l.dat
 @V@/gdb/regformats/tic6x-c62x.dat @V@/gdb/regformats/c6x-62x.dat
 @V@/gdb/regformats/tic6x-c64x.dat @V@/gdb/regformats/c6x-64x.dat
 @V@/gdb/regformats/tic6x-c64xp.dat @V@/gdb/regformats/c6xc64xp.dat
 @V@/gdb/testsuite/gdb.base/watchpoint-cond-gone.exp @V@/gdb/testsuite/gdb.base/wpcondg.exp
 @V@/gdb/testsuite/gdb.base/watchpoint-cond-gone.c @V@/gdb/testsuite/gdb.base/wpcondg.c
 @V@/gdb/testsuite/gdb.base/watchpoint-cond-gone-stripped.c @V@/gdb/testsuite/gdb.base/wpcondgs.c
-@V@/gdb/testsuite/gdb.cell/coremaker-spu.c @V@/gdb/testsuite/gdb.cell/core-spu.c
-@V@/gdb/testsuite/gdb.cell/ea-cache-spu.c @V@/gdb/testsuite/gdb.cell/ea-spu.c
-@V@/gdb/testsuite/gdb.cell/mem-access-spu.c @V@/gdb/testsuite/gdb.cell/mem-spu.c
 @V@/gdb/testsuite/gdb.cp/m-static1.cc @V@/gdb/testsuite/gdb.cp/m-stat1.cc
 @V@/gdb/testsuite/gdb.cp/namespace1.cc @V@/gdb/testsuite/gdb.cp/namesp1.cc
 @V@/gdb/testsuite/gdb.cp/namespace-nested-import.cc @V@/gdb/testsuite/gdb.cp/nnested.cc
index c87f997abc18848a7c99abecf80264cb5eb06213..f382cad1a84393cb6b8bf27abe6cc9b0b76e7e01 100644 (file)
@@ -140,13 +140,7 @@ powerpc-*-netbsd* | powerpc-*-knetbsd*-gnu)
                        gdb_host=nbsd ;;
 powerpc-*-openbsd*)    gdb_host=obsd ;;
 
-powerpc64*-*-linux*)   gdb_host=ppc64-linux
-                        # Support 'pseudo-native' debugging on the Cell BE
-                        if test "${target_cpu}" = "spu"; then
-                               gdb_host=spu-linux
-                               gdb_native=yes
-                        fi
-                       ;;
+powerpc64*-*-linux*)   gdb_host=ppc64-linux ;;
 powerpc*-*-linux*)     gdb_host=linux ;;
 
 riscv*-*-freebsd*)     gdb_host=fbsd ;;
index 64ee101d83667a3e760148ddf4694056f69d0416..77a2ee80839d04ea8a3fbc6fc6dc077d586d4203 100644 (file)
@@ -484,21 +484,4 @@ case ${gdb_host} in
                ;;
        esac
        ;;
-    spu-linux)
-       case ${gdb_host_cpu} in
-           powerpc)
-               # Target: Cell BE (PowerPC64 + SPU)
-               # This implements a 'pseudo-native' GDB running on the
-               # PPU side of the Cell BE and debugging the SPU side.
-               NAT_FILE=
-               NAT_CDEPS=
-               LOADLIBES=
-               NATDEPFILES='spu-linux-nat.o \
-                     inf-ptrace.o fork-child.o nat/fork-inferior.o \
-                     nat/linux-procfs.o nat/linux-ptrace.o \
-                     nat/linux-waitpid.o \
-                     nat/linux-personality.o nat/linux-namespaces.o'
-               ;;
-       esac
-       ;;
 esac
index 7c0215e89a46d85ec8de883cd6c0b6fc59921872..2edfe3bfb5ecf3ca07ff7b79d7e5d4688ade6985 100644 (file)
@@ -514,8 +514,7 @@ powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*)
 powerpc*-*-linux*)
        # Target: PowerPC running Linux
        gdb_target_obs="rs6000-tdep.o ppc-linux-tdep.o ppc-sysv-tdep.o \
-                       ppc64-tdep.o solib-svr4.o solib-spu.o \
-                       spu-multiarch.o \
+                       ppc64-tdep.o solib-svr4.o \
                        glibc-tdep.o symfile-mem.o linux-tdep.o \
                        ravenscar-thread.o ppc-ravenscar-thread.o \
                        linux-record.o \
@@ -668,12 +667,6 @@ sparc64-*-*)
                        ravenscar-thread.o sparc-ravenscar-thread.o"
        ;;
 
-spu*-*-*)
-       # Target: Cell BE SPU
-       gdb_target_obs="spu-tdep.o"
-       build_gdbserver=yes
-       ;;
-
 s12z-*-*)
        # Target: Freescale S12z
        gdb_target_obs="s12z-tdep.o"
index b30b91b522d94f048e1e741a6d4c0bb570ed58e4..cea9210a52039ebc753b969e761d1d0adf14b0d0 100644 (file)
@@ -709,36 +709,6 @@ core_target::files_info ()
   print_section_info (&m_core_section_table, core_bfd);
 }
 \f
-struct spuid_list
-{
-  gdb_byte *buf;
-  ULONGEST offset;
-  LONGEST len;
-  ULONGEST pos;
-  ULONGEST written;
-};
-
-static void
-add_to_spuid_list (bfd *abfd, asection *asect, void *list_p)
-{
-  struct spuid_list *list = (struct spuid_list *) list_p;
-  enum bfd_endian byte_order
-    = bfd_big_endian (abfd) ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
-  int fd, pos = 0;
-
-  sscanf (bfd_section_name (asect), "SPU/%d/regs%n", &fd, &pos);
-  if (pos == 0)
-    return;
-
-  if (list->pos >= list->offset && list->pos + 4 <= list->offset + list->len)
-    {
-      store_unsigned_integer (list->buf + list->pos - list->offset,
-                             4, byte_order, fd);
-      list->written += 4;
-    }
-  list->pos += 4;
-}
-
 enum target_xfer_status
 core_target::xfer_partial (enum target_object object, const char *annex,
                           gdb_byte *readbuf, const gdb_byte *writebuf,
@@ -865,64 +835,6 @@ core_target::xfer_partial (enum target_object object, const char *annex,
        }
       /* FALL THROUGH */
 
-    case TARGET_OBJECT_SPU:
-      if (readbuf && annex)
-       {
-         /* When the SPU contexts are stored in a core file, BFD
-            represents this with a fake section called
-            "SPU/<annex>".  */
-
-         struct bfd_section *section;
-         bfd_size_type size;
-         char sectionstr[100];
-
-         xsnprintf (sectionstr, sizeof sectionstr, "SPU/%s", annex);
-
-         section = bfd_get_section_by_name (core_bfd, sectionstr);
-         if (section == NULL)
-           return TARGET_XFER_E_IO;
-
-         size = bfd_section_size (section);
-         if (offset >= size)
-           return TARGET_XFER_EOF;
-         size -= offset;
-         if (size > len)
-           size = len;
-
-         if (size == 0)
-           return TARGET_XFER_EOF;
-         if (!bfd_get_section_contents (core_bfd, section, readbuf,
-                                        (file_ptr) offset, size))
-           {
-             warning (_("Couldn't read SPU section in core file."));
-             return TARGET_XFER_E_IO;
-           }
-
-         *xfered_len = (ULONGEST) size;
-         return TARGET_XFER_OK;
-       }
-      else if (readbuf)
-       {
-         /* NULL annex requests list of all present spuids.  */
-         struct spuid_list list;
-
-         list.buf = readbuf;
-         list.offset = offset;
-         list.len = len;
-         list.pos = 0;
-         list.written = 0;
-         bfd_map_over_sections (core_bfd, add_to_spuid_list, &list);
-
-         if (list.written == 0)
-           return TARGET_XFER_EOF;
-         else
-           {
-             *xfered_len = (ULONGEST) list.written;
-             return TARGET_XFER_OK;
-           }
-       }
-      return TARGET_XFER_E_IO;
-
     case TARGET_OBJECT_SIGNAL_INFO:
       if (readbuf)
        {
index 8eaaab3ae1f3564d862de7e7fad8adcb4ec0e198..0a10fa3fade7b0d911b1188e954a8c64e8cf557d 100644 (file)
@@ -1,3 +1,10 @@
+2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * doc/gdb.texinfo (Remote Configuration): Remove documentation for
+       qXfer:spu:read and qXfer:spu:write.
+       (General Query Packets): Likewise.
+       (Cell Broadband Engine SPU architecture): Remove subsection.
+
 2019-09-18  Tom Tromey  <tom@tromey.com>
 
        * gdb.texinfo (Editing): Document readline application name.
index a129ea0aa1b57ec73542790b95e7d9e7e184071d..f2713c03960dbe3bf4cc15714fc2bd68794db26e 100644 (file)
@@ -22563,14 +22563,6 @@ are:
 @tab @code{qXfer:sdata:read}
 @tab @code{print $_sdata}
 
-@item @code{read-spu-object}
-@tab @code{qXfer:spu:read}
-@tab @code{info spu}
-
-@item @code{write-spu-object}
-@tab @code{qXfer:spu:write}
-@tab @code{info spu}
-
 @item @code{read-siginfo-object}
 @tab @code{qXfer:siginfo:read}
 @tab @code{print $_siginfo}
@@ -24438,7 +24430,6 @@ all uses of @value{GDBN} with the architecture, both native and cross.
 * Alpha::
 * MIPS::
 * HPPA::               HP PA architecture
-* SPU::                Cell Broadband Engine SPU architecture
 * PowerPC::
 * Nios II::
 * Sparc64::
@@ -24753,69 +24744,6 @@ given @var{address}.
 @end table
 
 
-@node SPU
-@subsection Cell Broadband Engine SPU architecture
-@cindex Cell Broadband Engine
-@cindex SPU
-
-When @value{GDBN} is debugging the Cell Broadband Engine SPU architecture,
-it provides the following special commands:
-
-@table @code
-@item info spu event
-@kindex info spu
-Display SPU event facility status.  Shows current event mask
-and pending event status.
-
-@item info spu signal
-Display SPU signal notification facility status.  Shows pending
-signal-control word and signal notification mode of both signal
-notification channels.
-
-@item info spu mailbox
-Display SPU mailbox facility status.  Shows all pending entries,
-in order of processing, in each of the SPU Write Outbound,
-SPU Write Outbound Interrupt, and SPU Read Inbound mailboxes.
-
-@item info spu dma
-Display MFC DMA status.  Shows all pending commands in the MFC
-DMA queue.  For each entry, opcode, tag, class IDs, effective
-and local store addresses and transfer size are shown.
-
-@item info spu proxydma
-Display MFC Proxy-DMA status.  Shows all pending commands in the MFC
-Proxy-DMA queue.  For each entry, opcode, tag, class IDs, effective
-and local store addresses and transfer size are shown.
-
-@end table
-When @value{GDBN} is debugging a combined PowerPC/SPU application
-on the Cell Broadband Engine, it provides in addition the following
-special commands:
-
-@table @code
-@item set spu stop-on-load @var{arg}
-@kindex set spu
-Set whether to stop for new SPE threads.  When set to @code{on}, @value{GDBN}
-will give control to the user when a new SPE thread enters its @code{main}
-function.  The default is @code{off}.
-
-@item show spu stop-on-load
-@kindex show spu
-Show whether to stop for new SPE threads.
-
-@item set spu auto-flush-cache @var{arg}
-Set whether to automatically flush the software-managed cache.  When set to
-@code{on}, @value{GDBN} will automatically cause the SPE software-managed
-cache to be flushed whenever SPE execution stops.  This provides a consistent
-view of PowerPC memory that is accessed via the cache.  If an application
-does not use the software-managed cache, this option has no effect.
-
-@item show spu auto-flush-cache
-Show whether to automatically flush the software-managed cache.
-
-@end table
-
 @node PowerPC
 @subsection PowerPC
 @cindex PowerPC architecture
@@ -40110,16 +40038,6 @@ These are the currently defined stub features and their properties:
 @tab @samp{-}
 @tab Yes
 
-@item @samp{qXfer:spu:read}
-@tab No
-@tab @samp{-}
-@tab Yes
-
-@item @samp{qXfer:spu:write}
-@tab No
-@tab @samp{-}
-@tab Yes
-
 @item @samp{qXfer:siginfo:read}
 @tab No
 @tab @samp{-}
@@ -40352,14 +40270,6 @@ The remote stub understands the @samp{qXfer:memory-map:read} packet
 The remote stub understands the @samp{qXfer:sdata:read} packet
 (@pxref{qXfer sdata read}).
 
-@item qXfer:spu:read
-The remote stub understands the @samp{qXfer:spu:read} packet
-(@pxref{qXfer spu read}).
-
-@item qXfer:spu:write
-The remote stub understands the @samp{qXfer:spu:write} packet
-(@pxref{qXfer spu write}).
-
 @item qXfer:siginfo:read
 The remote stub understands the @samp{qXfer:siginfo:read} packet
 (@pxref{qXfer siginfo read}).
@@ -40805,18 +40715,6 @@ This packet is not probed by default; the remote stub must request it,
 by supplying an appropriate @samp{qSupported} response
 (@pxref{qSupported}).
 
-@item qXfer:spu:read:@var{annex}:@var{offset},@var{length}
-@anchor{qXfer spu read}
-Read contents of an @code{spufs} file on the target system.  The
-annex specifies which file to read; it must be of the form 
-@file{@var{id}/@var{name}}, where @var{id} specifies an SPU context ID
-in the target process, and @var{name} identifes the @code{spufs} file
-in that context to be accessed.
-
-This packet is not probed by default; the remote stub must request it,
-by supplying an appropriate @samp{qSupported} response
-(@pxref{qSupported}).
-
 @item qXfer:threads:read::@var{offset},@var{length}
 @anchor{qXfer threads read}
 Access the list of threads on target.  @xref{Thread List Format}.  The
@@ -40902,17 +40800,6 @@ empty (@pxref{qXfer write}).
 This packet is not probed by default; the remote stub must request it,
 by supplying an appropriate @samp{qSupported} response
 (@pxref{qSupported}).
-
-@item qXfer:spu:write:@var{annex}:@var{offset}:@var{data}@dots{}
-@anchor{qXfer spu write}
-Write @var{data} to an @code{spufs} file on the target system.  The
-annex specifies which file to write; it must be of the form
-@file{@var{id}/@var{name}}, where @var{id} specifies an SPU context ID
-in the target process, and @var{name} identifes the @code{spufs} file
-in that context to be accessed.
-
-This packet is not probed by default; the remote stub must request it,
-by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
 @end table
 
 @item qXfer:@var{object}:@var{operation}:@dots{}
index 2b65d46df094f7ec50205951a23af2638cffec27..52318d4c06bd99e4e8a0d9d770b36e606a1faa69 100644 (file)
@@ -53,7 +53,7 @@ WHICH = arm/arm-with-iwmmxt arm/arm-with-vfpv2 arm/arm-with-vfpv3 \
        rs6000/powerpc-32 \
        rs6000/powerpc-32l rs6000/powerpc-altivec32l rs6000/powerpc-e500l \
        rs6000/powerpc-64l rs6000/powerpc-altivec64l rs6000/powerpc-vsx32l \
-       rs6000/powerpc-vsx64l rs6000/powerpc-cell32l rs6000/powerpc-cell64l \
+       rs6000/powerpc-vsx64l \
        rs6000/powerpc-isa205-32l rs6000/powerpc-isa205-64l \
        rs6000/powerpc-isa205-altivec32l rs6000/powerpc-isa205-altivec64l \
        rs6000/powerpc-isa205-vsx32l rs6000/powerpc-isa205-vsx64l \
@@ -84,8 +84,6 @@ microblaze-expedite = r1,rpc
 nios2-linux-expedite = sp,pc
 or1k-expedite = r1,npc
 powerpc-expedite = r1,pc
-rs6000/powerpc-cell32l-expedite = r1,pc,r0,orig_r3,r4
-rs6000/powerpc-cell64l-expedite = r1,pc,r0,orig_r3,r4
 s390-linux32-expedite = r14,r15,pswa
 s390-linux32v1-expedite = r14,r15,pswa
 s390-linux32v2-expedite = r14,r15,pswa
@@ -140,8 +138,6 @@ XMLTOC = \
        rs6000/powerpc-altivec32l.xml \
        rs6000/powerpc-altivec64.xml \
        rs6000/powerpc-altivec64l.xml \
-       rs6000/powerpc-cell32l.xml \
-       rs6000/powerpc-cell64l.xml \
        rs6000/powerpc-e500.xml \
        rs6000/powerpc-e500l.xml \
        rs6000/powerpc-isa205-32l.xml \
diff --git a/gdb/features/rs6000/powerpc-cell32l.c b/gdb/features/rs6000/powerpc-cell32l.c
deleted file mode 100644 (file)
index 74c42f9..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: powerpc-cell32l.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_powerpc_cell32l;
-static void
-initialize_tdesc_powerpc_cell32l (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
-
-  tdesc_add_compatible (result, bfd_scan_arch ("spu:256K"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
-  tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r26", 26, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r27", 27, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r28", 28, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r29", 29, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "r31", 31, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "pc", 64, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "msr", 65, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "cr", 66, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "lr", 67, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "ctr", 68, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
-  tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f3", 35, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f4", 36, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f5", 37, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f6", 38, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f7", 39, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f8", 40, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f9", 41, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f10", 42, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f11", 43, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f12", 44, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f13", 45, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f14", 46, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f15", 47, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f16", 48, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f17", 49, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f18", 50, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f19", 51, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f20", 52, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f21", 53, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f22", 54, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f23", 55, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f24", 56, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f25", 57, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f26", 58, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f27", 59, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f28", 60, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f29", 61, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f30", 62, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
-  tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 32, "int");
-  tdesc_create_reg (feature, "trap", 72, 1, NULL, 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
-  tdesc_type *element_type;
-  element_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", element_type, 4);
-
-  element_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", element_type, 4);
-
-  element_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", element_type, 8);
-
-  element_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", element_type, 16);
-
-  tdesc_type_with_fields *type_with_fields;
-  type_with_fields = tdesc_create_union (feature, "vec128");
-  tdesc_type *field_type;
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type_with_fields, "uint128", field_type);
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type_with_fields, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type_with_fields, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type_with_fields, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type_with_fields, "v16_int8", field_type);
-
-  tdesc_create_reg (feature, "vr0", 73, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr1", 74, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr2", 75, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr3", 76, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr4", 77, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr5", 78, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr6", 79, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr7", 80, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr8", 81, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr9", 82, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr10", 83, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr11", 84, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr12", 85, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr13", 86, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr14", 87, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr15", 88, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr16", 89, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr17", 90, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr18", 91, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr19", 92, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr20", 93, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr21", 94, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr22", 95, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr23", 96, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr24", 97, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr25", 98, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr26", 99, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr27", 100, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr28", 101, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr29", 102, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr30", 103, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr31", 104, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
-  tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
-
-  tdesc_powerpc_cell32l = result;
-}
diff --git a/gdb/features/rs6000/powerpc-cell32l.xml b/gdb/features/rs6000/powerpc-cell32l.xml
deleted file mode 100644 (file)
index 57b4806..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2009-2019 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  -->
-
-<!-- Cell/B.E. architecture.  Identical to the PowerPC 32-bit Linux UISA,
-     but adds support for the SPU as compatible architecture.  -->
-
-<!DOCTYPE target SYSTEM "gdb-target.dtd">
-<target>
-  <architecture>powerpc:common</architecture>
-  <compatible>spu</compatible>
-  <xi:include href="power-core.xml"/>
-  <xi:include href="power-fpu.xml"/>
-  <xi:include href="power-linux.xml"/>
-  <xi:include href="power-altivec.xml"/>
-</target>
diff --git a/gdb/features/rs6000/powerpc-cell64l.c b/gdb/features/rs6000/powerpc-cell64l.c
deleted file mode 100644 (file)
index cbfda4c..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: powerpc-cell64l.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_powerpc_cell64l;
-static void
-initialize_tdesc_powerpc_cell64l (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
-
-  tdesc_add_compatible (result, bfd_scan_arch ("spu:256K"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
-  tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r3", 3, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r4", 4, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r5", 5, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r6", 6, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r7", 7, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r16", 16, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r17", 17, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r18", 18, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r19", 19, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r20", 20, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r21", 21, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r22", 22, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r23", 23, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r24", 24, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r25", 25, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r26", 26, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r27", 27, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r28", 28, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r29", 29, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r30", 30, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "r31", 31, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "pc", 64, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "msr", 65, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "cr", 66, 1, NULL, 32, "uint32");
-  tdesc_create_reg (feature, "lr", 67, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "ctr", 68, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "xer", 69, 1, NULL, 32, "uint32");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.fpu");
-  tdesc_create_reg (feature, "f0", 32, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f1", 33, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f2", 34, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f3", 35, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f4", 36, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f5", 37, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f6", 38, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f7", 39, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f8", 40, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f9", 41, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f10", 42, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f11", 43, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f12", 44, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f13", 45, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f14", 46, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f15", 47, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f16", 48, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f17", 49, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f18", 50, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f19", 51, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f20", 52, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f21", 53, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f22", 54, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f23", 55, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f24", 56, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f25", 57, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f26", 58, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f27", 59, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f28", 60, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f29", 61, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f30", 62, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "f31", 63, 1, NULL, 64, "ieee_double");
-  tdesc_create_reg (feature, "fpscr", 70, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux");
-  tdesc_create_reg (feature, "orig_r3", 71, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "trap", 72, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.power.altivec");
-  tdesc_type *element_type;
-  element_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", element_type, 4);
-
-  element_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", element_type, 4);
-
-  element_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", element_type, 8);
-
-  element_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", element_type, 16);
-
-  tdesc_type_with_fields *type_with_fields;
-  type_with_fields = tdesc_create_union (feature, "vec128");
-  tdesc_type *field_type;
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type_with_fields, "uint128", field_type);
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type_with_fields, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type_with_fields, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type_with_fields, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type_with_fields, "v16_int8", field_type);
-
-  tdesc_create_reg (feature, "vr0", 73, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr1", 74, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr2", 75, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr3", 76, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr4", 77, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr5", 78, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr6", 79, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr7", 80, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr8", 81, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr9", 82, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr10", 83, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr11", 84, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr12", 85, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr13", 86, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr14", 87, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr15", 88, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr16", 89, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr17", 90, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr18", 91, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr19", 92, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr20", 93, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr21", 94, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr22", 95, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr23", 96, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr24", 97, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr25", 98, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr26", 99, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr27", 100, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr28", 101, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr29", 102, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr30", 103, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vr31", 104, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "vscr", 105, 1, "vector", 32, "int");
-  tdesc_create_reg (feature, "vrsave", 106, 1, "vector", 32, "int");
-
-  tdesc_powerpc_cell64l = result;
-}
diff --git a/gdb/features/rs6000/powerpc-cell64l.xml b/gdb/features/rs6000/powerpc-cell64l.xml
deleted file mode 100644 (file)
index c2add44..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-<!-- Copyright (C) 2009-2019 Free Software Foundation, Inc.
-
-     Copying and distribution of this file, with or without modification,
-     are permitted in any medium without royalty provided the copyright
-     notice and this notice are preserved.  -->
-
-<!-- Cell/B.E. architecture.  Identical to the PowerPC 64-bit Linux UISA,
-     but adds support for the SPU as compatible architecture.  -->
-
-<!DOCTYPE target SYSTEM "gdb-target.dtd">
-<target>
-  <architecture>powerpc:common64</architecture>
-  <compatible>spu</compatible>
-  <xi:include href="power64-core.xml"/>
-  <xi:include href="power-fpu.xml"/>
-  <xi:include href="power64-linux.xml"/>
-  <xi:include href="power-altivec.xml"/>
-</target>
index faafdfd967077365997081dc097f784cbdbe2438..5c761670145930effdd396425602e6e72fa1d54d 100644 (file)
@@ -1,3 +1,43 @@
+2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * configure.srv (ipa_ppc_linux_regobj): Remove powerpc-cell32l-ipa.o
+       and powerpc-cell64l-ipa.o.
+       (powerpc*-*-linux*): Remove powerpc-cell32l.o and powerpc-cell64l.o
+       from srv_regobj.  Remove rs6000/powerpc-cell32l.xml and
+       rs6000/powerpc-cell64l.xml from srv_xmlfiles.
+       (spu*-*-*): Remove.
+
+       * spu-low.c: Remove file.
+
+       * linux-ppc-low.c (INSTR_SC, NR_spu_run): Remove.
+       (parse_spufs_run): Remove.
+       (ppc_get_pc): Remove Cell/B.E. support.
+       (ppc_set_pc): Likewise.
+       (ppc_breakpoint_at): Likewise.
+       (ppc_arch_setup): Likewise.
+       (ppc_get_ipa_tdesc_idx): Do not handle tdesc_powerpc_cell64l or
+       tdesc_powerpc_cell32l.
+       (initialize_low_arch): Do not call init_registers_powerpc_cell64l
+       or init_registers_powerpc_cell32l.
+       * linux-ppc-ipa.c (get_ipa_tdesc): Do not handle PPC_TDESC_CELL.
+       (initialize_low_tracepoint): Do not call init_registers_powerpc_cell64l
+       or init_registers_powerpc_cell32l.
+       * linux-ppc-tdesc-init.h (PPC_TDESC_CELL): Mark as unused.
+       (init_registers_powerpc_cell32l): Remove prototype.
+       (init_registers_powerpc_cell64l): Likewise.
+
+       * target.h (struct target_ops): Remove qxfer_spu member.
+       * server.c (handle_qxfer_spu): Remove.
+       (qxfer_packets): Remove entry for "spu".
+       (handle_query): No longer support qXfer:spu:read or qXfer:spu:write.
+       * linux-low.c (SPUFS_MAGIC): Remove.
+       (spu_enumerate_spu_ids): Remove.
+       (linux_qxfer_spu): Remove.
+       (linux_target_ops): Remove qxfer_spu member.
+       * lynx-low.c (lynx_target_ops): Remove qxfer_spu member.
+       * nto-low.c (nto_target_ops): Remove qxfer_spu member.
+       * win32-low.c (win32_target_ops): Remove qxfer_spu member.
+
 2019-08-23  Sergio Durigan Junior  <sergiodj@redhat.com>
 
        * Makefile.in (SFILES): Add 'gdbsupport/gdb-dlfcn.c'.
index 66d3d426ac5f4373270e1874b6f9998fc7d44bfe..1a4ab8e3361c0dbee0b3e038018086ce854ff424 100644 (file)
@@ -24,7 +24,7 @@
 # Default hostio_last_error implementation
 srv_hostio_err_objs="hostio-errno.o"
 
-ipa_ppc_linux_regobj="powerpc-32l-ipa.o powerpc-altivec32l-ipa.o powerpc-cell32l-ipa.o powerpc-vsx32l-ipa.o powerpc-isa205-32l-ipa.o powerpc-isa205-altivec32l-ipa.o powerpc-isa205-vsx32l-ipa.o powerpc-isa205-ppr-dscr-vsx32l-ipa.o powerpc-isa207-vsx32l-ipa.o powerpc-isa207-htm-vsx32l-ipa.o powerpc-e500l-ipa.o powerpc-64l-ipa.o powerpc-altivec64l-ipa.o powerpc-cell64l-ipa.o powerpc-vsx64l-ipa.o powerpc-isa205-64l-ipa.o powerpc-isa205-altivec64l-ipa.o powerpc-isa205-vsx64l-ipa.o powerpc-isa205-ppr-dscr-vsx64l-ipa.o powerpc-isa207-vsx64l-ipa.o powerpc-isa207-htm-vsx64l-ipa.o"
+ipa_ppc_linux_regobj="powerpc-32l-ipa.o powerpc-altivec32l-ipa.o powerpc-vsx32l-ipa.o powerpc-isa205-32l-ipa.o powerpc-isa205-altivec32l-ipa.o powerpc-isa205-vsx32l-ipa.o powerpc-isa205-ppr-dscr-vsx32l-ipa.o powerpc-isa207-vsx32l-ipa.o powerpc-isa207-htm-vsx32l-ipa.o powerpc-e500l-ipa.o powerpc-64l-ipa.o powerpc-altivec64l-ipa.o powerpc-vsx64l-ipa.o powerpc-isa205-64l-ipa.o powerpc-isa205-altivec64l-ipa.o powerpc-isa205-vsx64l-ipa.o powerpc-isa205-ppr-dscr-vsx64l-ipa.o powerpc-isa207-vsx64l-ipa.o powerpc-isa207-htm-vsx64l-ipa.o"
 
 # Linux object files.  This is so we don't have to repeat
 # these files over and over again.
@@ -186,7 +186,6 @@ case "${target}" in
                        ;;
   powerpc*-*-linux*)   srv_regobj="powerpc-32l.o"
                        srv_regobj="${srv_regobj} powerpc-altivec32l.o"
-                       srv_regobj="${srv_regobj} powerpc-cell32l.o"
                        srv_regobj="${srv_regobj} powerpc-vsx32l.o"
                        srv_regobj="${srv_regobj} powerpc-isa205-32l.o"
                        srv_regobj="${srv_regobj} powerpc-isa205-altivec32l.o"
@@ -197,7 +196,6 @@ case "${target}" in
                        srv_regobj="${srv_regobj} powerpc-e500l.o"
                        srv_regobj="${srv_regobj} powerpc-64l.o"
                        srv_regobj="${srv_regobj} powerpc-altivec64l.o"
-                       srv_regobj="${srv_regobj} powerpc-cell64l.o"
                        srv_regobj="${srv_regobj} powerpc-vsx64l.o"
                        srv_regobj="${srv_regobj} powerpc-isa205-64l.o"
                        srv_regobj="${srv_regobj} powerpc-isa205-altivec64l.o"
@@ -209,7 +207,6 @@ case "${target}" in
                        srv_tgtobj="${srv_tgtobj} arch/ppc-linux-common.o"
                        srv_xmlfiles="rs6000/powerpc-32l.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec32l.xml"
-                       srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-cell32l.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-vsx32l.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-32l.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-altivec32l.xml"
@@ -240,7 +237,6 @@ case "${target}" in
                        srv_xmlfiles="${srv_xmlfiles} rs6000/power-spe.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-64l.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec64l.xml"
-                       srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-cell64l.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-vsx64l.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-64l.xml"
                        srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-altivec64l.xml"
@@ -340,9 +336,6 @@ case "${target}" in
                        srv_linux_regsets=yes
                        srv_linux_thread_db=yes
                        ;;
-  spu*-*-*)            srv_regobj=reg-spu.o
-                       srv_tgtobj="spu-low.o fork-child.o fork-inferior.o"
-                       ;;
   tic6x-*-uclinux)     if $development; then
                          srv_regobj="tic6x-c64xp-linux.o"
                          srv_regobj="${srv_regobj} tic6x-c64x-linux.o"
index 3113017ae67837aa7a5de3097b4f7224d1dee82a..d64c3641ffb12412945593815c8ce9e51acfa3b5 100644 (file)
 #endif
 #include "nat/linux-namespaces.h"
 
-#ifndef SPUFS_MAGIC
-#define SPUFS_MAGIC 0x23c9b64e
-#endif
-
 #ifdef HAVE_PERSONALITY
 # include <sys/personality.h>
 # if !HAVE_DECL_ADDR_NO_RANDOMIZE
@@ -6358,99 +6354,6 @@ linux_supports_range_stepping (void)
   return (*the_low_target.supports_range_stepping) ();
 }
 
-/* Enumerate spufs IDs for process PID.  */
-static int
-spu_enumerate_spu_ids (long pid, unsigned char *buf, CORE_ADDR offset, int len)
-{
-  int pos = 0;
-  int written = 0;
-  char path[128];
-  DIR *dir;
-  struct dirent *entry;
-
-  sprintf (path, "/proc/%ld/fd", pid);
-  dir = opendir (path);
-  if (!dir)
-    return -1;
-
-  rewinddir (dir);
-  while ((entry = readdir (dir)) != NULL)
-    {
-      struct stat st;
-      struct statfs stfs;
-      int fd;
-
-      fd = atoi (entry->d_name);
-      if (!fd)
-        continue;
-
-      sprintf (path, "/proc/%ld/fd/%d", pid, fd);
-      if (stat (path, &st) != 0)
-        continue;
-      if (!S_ISDIR (st.st_mode))
-        continue;
-
-      if (statfs (path, &stfs) != 0)
-        continue;
-      if (stfs.f_type != SPUFS_MAGIC)
-        continue;
-
-      if (pos >= offset && pos + 4 <= offset + len)
-        {
-          *(unsigned int *)(buf + pos - offset) = fd;
-          written += 4;
-        }
-      pos += 4;
-    }
-
-  closedir (dir);
-  return written;
-}
-
-/* Implements the to_xfer_partial interface for the TARGET_OBJECT_SPU
-   object type, using the /proc file system.  */
-static int
-linux_qxfer_spu (const char *annex, unsigned char *readbuf,
-                unsigned const char *writebuf,
-                CORE_ADDR offset, int len)
-{
-  long pid = lwpid_of (current_thread);
-  char buf[128];
-  int fd = 0;
-  int ret = 0;
-
-  if (!writebuf && !readbuf)
-    return -1;
-
-  if (!*annex)
-    {
-      if (!readbuf)
-       return -1;
-      else
-       return spu_enumerate_spu_ids (pid, readbuf, offset, len);
-    }
-
-  sprintf (buf, "/proc/%ld/fd/%s", pid, annex);
-  fd = open (buf, writebuf? O_WRONLY : O_RDONLY);
-  if (fd <= 0)
-    return -1;
-
-  if (offset != 0
-      && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
-    {
-      close (fd);
-      return 0;
-    }
-
-  if (writebuf)
-    ret = write (fd, writebuf, (size_t) len);
-  else
-    ret = read (fd, readbuf, (size_t) len);
-
-  close (fd);
-  return ret;
-}
-
 #if defined PT_GETDSBT || defined PTRACE_GETFDPIC
 struct target_loadseg
 {
@@ -7496,7 +7399,6 @@ static struct target_ops linux_target_ops = {
 #else
   NULL,
 #endif
-  linux_qxfer_spu,
   hostio_last_error_from_errno,
   linux_qxfer_osdata,
   linux_xfer_siginfo,
index 08adc52ce4c8f504172fc9fda2405fa0f058be13..f9df02236afaed281a4b7f6baa510d55455513af 100644 (file)
@@ -181,8 +181,6 @@ get_ipa_tdesc (int idx)
       return tdesc_powerpc_64l;
     case PPC_TDESC_ALTIVEC:
       return tdesc_powerpc_altivec64l;
-    case PPC_TDESC_CELL:
-      return tdesc_powerpc_cell64l;
     case PPC_TDESC_VSX:
       return tdesc_powerpc_vsx64l;
     case PPC_TDESC_ISA205:
@@ -202,8 +200,6 @@ get_ipa_tdesc (int idx)
       return tdesc_powerpc_32l;
     case PPC_TDESC_ALTIVEC:
       return tdesc_powerpc_altivec32l;
-    case PPC_TDESC_CELL:
-      return tdesc_powerpc_cell32l;
     case PPC_TDESC_VSX:
       return tdesc_powerpc_vsx32l;
     case PPC_TDESC_ISA205:
@@ -241,7 +237,6 @@ initialize_low_tracepoint (void)
 #ifdef __powerpc64__
   init_registers_powerpc_64l ();
   init_registers_powerpc_altivec64l ();
-  init_registers_powerpc_cell64l ();
   init_registers_powerpc_vsx64l ();
   init_registers_powerpc_isa205_64l ();
   init_registers_powerpc_isa205_altivec64l ();
@@ -252,7 +247,6 @@ initialize_low_tracepoint (void)
 #else
   init_registers_powerpc_32l ();
   init_registers_powerpc_altivec32l ();
-  init_registers_powerpc_cell32l ();
   init_registers_powerpc_vsx32l ();
   init_registers_powerpc_isa205_32l ();
   init_registers_powerpc_isa205_altivec32l ();
index 8a0965bd20aeb45306a9fd6f5695dc36ae767e89..c0622825ad057db7f29999533c4f8df33bfa633b 100644 (file)
@@ -220,73 +220,10 @@ ppc_supply_ptrace_register (struct regcache *regcache,
     perror_with_name ("Unexpected byte order");
 }
 
-
-#define INSTR_SC        0x44000002
-#define NR_spu_run      0x0116
-
-/* If the PPU thread is currently stopped on a spu_run system call,
-   return to FD and ADDR the file handle and NPC parameter address
-   used with the system call.  Return non-zero if successful.  */
-static int
-parse_spufs_run (struct regcache *regcache, int *fd, CORE_ADDR *addr)
-{
-  CORE_ADDR curr_pc;
-  int curr_insn;
-  int curr_r0;
-
-  if (register_size (regcache->tdesc, 0) == 4)
-    {
-      unsigned int pc, r0, r3, r4;
-      collect_register_by_name (regcache, "pc", &pc);
-      collect_register_by_name (regcache, "r0", &r0);
-      collect_register_by_name (regcache, "orig_r3", &r3);
-      collect_register_by_name (regcache, "r4", &r4);
-      curr_pc = (CORE_ADDR) pc;
-      curr_r0 = (int) r0;
-      *fd = (int) r3;
-      *addr = (CORE_ADDR) r4;
-    }
-  else
-    {
-      unsigned long pc, r0, r3, r4;
-      collect_register_by_name (regcache, "pc", &pc);
-      collect_register_by_name (regcache, "r0", &r0);
-      collect_register_by_name (regcache, "orig_r3", &r3);
-      collect_register_by_name (regcache, "r4", &r4);
-      curr_pc = (CORE_ADDR) pc;
-      curr_r0 = (int) r0;
-      *fd = (int) r3;
-      *addr = (CORE_ADDR) r4;
-    }
-
-  /* Fetch instruction preceding current NIP.  */
-  if ((*the_target->read_memory) (curr_pc - 4,
-                                 (unsigned char *) &curr_insn, 4) != 0)
-    return 0;
-  /* It should be a "sc" instruction.  */
-  if (curr_insn != INSTR_SC)
-    return 0;
-  /* System call number should be NR_spu_run.  */
-  if (curr_r0 != NR_spu_run)
-    return 0;
-
-  return 1;
-}
-
 static CORE_ADDR
 ppc_get_pc (struct regcache *regcache)
 {
-  CORE_ADDR addr;
-  int fd;
-
-  if (parse_spufs_run (regcache, &fd, &addr))
-    {
-      unsigned int pc;
-      (*the_target->read_memory) (addr, (unsigned char *) &pc, 4);
-      return ((CORE_ADDR)1 << 63)
-       | ((CORE_ADDR)fd << 32) | (CORE_ADDR) (pc - 4);
-    }
-  else if (register_size (regcache->tdesc, 0) == 4)
+  if (register_size (regcache->tdesc, 0) == 4)
     {
       unsigned int pc;
       collect_register_by_name (regcache, "pc", &pc);
@@ -303,15 +240,7 @@ ppc_get_pc (struct regcache *regcache)
 static void
 ppc_set_pc (struct regcache *regcache, CORE_ADDR pc)
 {
-  CORE_ADDR addr;
-  int fd;
-
-  if (parse_spufs_run (regcache, &fd, &addr))
-    {
-      unsigned int newpc = pc;
-      (*the_target->write_memory) (addr, (unsigned char *) &newpc, 4);
-    }
-  else if (register_size (regcache->tdesc, 0) == 4)
+  if (register_size (regcache->tdesc, 0) == 4)
     {
       unsigned int newpc = pc;
       supply_register_by_name (regcache, "pc", &newpc);
@@ -348,23 +277,11 @@ ppc_breakpoint_at (CORE_ADDR where)
 {
   unsigned int insn;
 
-  if (where & ((CORE_ADDR)1 << 63))
-    {
-      char mem_annex[32];
-      sprintf (mem_annex, "%d/mem", (int)((where >> 32) & 0x7fffffff));
-      (*the_target->qxfer_spu) (mem_annex, (unsigned char *) &insn,
-                               NULL, where & 0xffffffff, 4);
-      if (insn == 0x3fff)
-       return 1;
-    }
-  else
-    {
-      (*the_target->read_memory) (where, (unsigned char *) &insn, 4);
-      if (insn == ppc_breakpoint)
-       return 1;
-      /* If necessary, recognize more trap instructions here.  GDB only uses
-        the one.  */
-    }
+  (*the_target->read_memory) (where, (unsigned char *) &insn, 4);
+  if (insn == ppc_breakpoint)
+    return 1;
+  /* If necessary, recognize more trap instructions here.  GDB only uses
+     the one.  */
 
   return 0;
 }
@@ -941,9 +858,6 @@ ppc_arch_setup (void)
        }
     }
 
-  if (ppc_hwcap & PPC_FEATURE_CELL)
-    features.cell = true;
-
   tdesc = ppc_linux_match_description (features);
 
   /* On 32-bit machines, check for SPE registers.
@@ -3416,8 +3330,6 @@ ppc_get_ipa_tdesc_idx (void)
     return PPC_TDESC_BASE;
   if (tdesc == tdesc_powerpc_altivec64l)
     return PPC_TDESC_ALTIVEC;
-  if (tdesc == tdesc_powerpc_cell64l)
-    return PPC_TDESC_CELL;
   if (tdesc == tdesc_powerpc_vsx64l)
     return PPC_TDESC_VSX;
   if (tdesc == tdesc_powerpc_isa205_64l)
@@ -3438,8 +3350,6 @@ ppc_get_ipa_tdesc_idx (void)
     return PPC_TDESC_BASE;
   if (tdesc == tdesc_powerpc_altivec32l)
     return PPC_TDESC_ALTIVEC;
-  if (tdesc == tdesc_powerpc_cell32l)
-    return PPC_TDESC_CELL;
   if (tdesc == tdesc_powerpc_vsx32l)
     return PPC_TDESC_VSX;
   if (tdesc == tdesc_powerpc_isa205_32l)
@@ -3507,7 +3417,6 @@ initialize_low_arch (void)
 
   init_registers_powerpc_32l ();
   init_registers_powerpc_altivec32l ();
-  init_registers_powerpc_cell32l ();
   init_registers_powerpc_vsx32l ();
   init_registers_powerpc_isa205_32l ();
   init_registers_powerpc_isa205_altivec32l ();
@@ -3519,7 +3428,6 @@ initialize_low_arch (void)
 #if __powerpc64__
   init_registers_powerpc_64l ();
   init_registers_powerpc_altivec64l ();
-  init_registers_powerpc_cell64l ();
   init_registers_powerpc_vsx64l ();
   init_registers_powerpc_isa205_64l ();
   init_registers_powerpc_isa205_altivec64l ();
index 4f9a7c5009ba8bf2004c316f3552666e036ba704..299b3ce36332c87657f5ab1d0b076fe7be5dcf76 100644 (file)
@@ -27,7 +27,7 @@
 enum ppc_linux_tdesc {
   PPC_TDESC_BASE,
   PPC_TDESC_ALTIVEC,
-  PPC_TDESC_CELL,
+  PPC_TDESC_CELL,  /* No longer used, but kept to avoid ABI changes.  */
   PPC_TDESC_VSX,
   PPC_TDESC_ISA205,
   PPC_TDESC_ISA205_ALTIVEC,
@@ -46,9 +46,6 @@ void init_registers_powerpc_32l (void);
 /* Defined in auto-generated file powerpc-altivec32l.c.  */
 void init_registers_powerpc_altivec32l (void);
 
-/* Defined in auto-generated file powerpc-cell32l.c.  */
-void init_registers_powerpc_cell32l (void);
-
 /* Defined in auto-generated file powerpc-vsx32l.c.  */
 void init_registers_powerpc_vsx32l (void);
 
@@ -83,9 +80,6 @@ void init_registers_powerpc_64l (void);
 /* Defined in auto-generated file powerpc-altivec64l.c.  */
 void init_registers_powerpc_altivec64l (void);
 
-/* Defined in auto-generated file powerpc-cell64l.c.  */
-void init_registers_powerpc_cell64l (void);
-
 /* Defined in auto-generated file powerpc-vsx64l.c.  */
 void init_registers_powerpc_vsx64l (void);
 
index 0a8b258e87d11c086a47359ff22963b5ee2de2cf..2bd24e7cee05e3ac186af0bf8f25abd86674058f 100644 (file)
@@ -753,7 +753,6 @@ static struct target_ops lynx_target_ops = {
   NULL,  /* stopped_data_address */
   NULL,  /* read_offsets */
   NULL,  /* get_tls_address */
-  NULL,  /* qxfer_spu */
   NULL,  /* hostio_last_error */
   NULL,  /* qxfer_osdata */
   NULL,  /* qxfer_siginfo */
index 011701aa8ce3eee91bbcef2853006de5e2e12ce5..3c1130680f25b22d3f447757a3664e50a24aa752 100644 (file)
@@ -963,7 +963,6 @@ static struct target_ops nto_target_ops = {
   nto_stopped_data_address,
   NULL, /* nto_read_offsets */
   NULL, /* thread_db_set_tls_address */
-  NULL,
   hostio_last_error_from_errno,
   NULL, /* nto_qxfer_osdata */
   NULL, /* xfer_siginfo */
index 127cd3840bcbc5cafb453aea7b5eabfc1553c242..67e8e3e54de363ffa77547b79d9ed01f0a4981df 100644 (file)
@@ -1613,22 +1613,6 @@ handle_qxfer_siginfo (const char *annex,
   return (*the_target->qxfer_siginfo) (annex, readbuf, writebuf, offset, len);
 }
 
-/* Handle qXfer:spu:read and qXfer:spu:write.  */
-
-static int
-handle_qxfer_spu (const char *annex,
-                 gdb_byte *readbuf, const gdb_byte *writebuf,
-                 ULONGEST offset, LONGEST len)
-{
-  if (the_target->qxfer_spu == NULL)
-    return -2;
-
-  if (current_thread == NULL)
-    return -1;
-
-  return (*the_target->qxfer_spu) (annex, readbuf, writebuf, offset, len);
-}
-
 /* Handle qXfer:statictrace:read.  */
 
 static int
@@ -1985,7 +1969,6 @@ static const struct qxfer qxfer_packets[] =
     { "libraries-svr4", handle_qxfer_libraries_svr4 },
     { "osdata", handle_qxfer_osdata },
     { "siginfo", handle_qxfer_siginfo },
-    { "spu", handle_qxfer_spu },
     { "statictrace", handle_qxfer_statictrace },
     { "threads", handle_qxfer_threads },
     { "traceframe-info", handle_qxfer_traceframe_info },
@@ -2397,9 +2380,6 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
       if (the_target->read_auxv != NULL)
        strcat (own_buf, ";qXfer:auxv:read+");
 
-      if (the_target->qxfer_spu != NULL)
-       strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
-
       if (the_target->qxfer_siginfo != NULL)
        strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
 
diff --git a/gdb/gdbserver/spu-low.c b/gdb/gdbserver/spu-low.c
deleted file mode 100644 (file)
index 4930c59..0000000
+++ /dev/null
@@ -1,732 +0,0 @@
-/* Low level interface to SPUs, for the remote server for GDB.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
-
-   Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#include "server.h"
-
-#include "gdbsupport/gdb_wait.h"
-#include <sys/ptrace.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/syscall.h>
-#include "gdbsupport/filestuff.h"
-#include "hostio.h"
-#include "nat/fork-inferior.h"
-
-/* Some older glibc versions do not define this.  */
-#ifndef __WNOTHREAD
-#define __WNOTHREAD     0x20000000      /* Don't wait on children of other
-                                          threads in this group */
-#endif
-
-#define PTRACE_TYPE_RET long
-#define PTRACE_TYPE_ARG3 long
-
-/* Number of registers.  */
-#define SPU_NUM_REGS         130
-#define SPU_NUM_CORE_REGS    128
-
-/* Special registers.  */
-#define SPU_ID_REGNUM        128
-#define SPU_PC_REGNUM        129
-
-/* PPU side system calls.  */
-#define INSTR_SC       0x44000002
-#define NR_spu_run     0x0116
-
-/* These are used in remote-utils.c.  */
-int using_threads = 0;
-
-/* Defined in auto-generated file reg-spu.c.  */
-void init_registers_spu (void);
-extern const struct target_desc *tdesc_spu;
-
-/* Software breakpoint instruction.  */
-static const gdb_byte breakpoint[] = { 0x00, 0x00, 0x3f, 0xff };
-
-/* Fetch PPU register REGNO.  */
-static CORE_ADDR
-fetch_ppc_register (int regno)
-{
-  PTRACE_TYPE_RET res;
-
-  int tid = current_ptid.lwp ();
-
-#ifndef __powerpc64__
-  /* If running as a 32-bit process on a 64-bit system, we attempt
-     to get the full 64-bit register content of the target process.
-     If the PPC special ptrace call fails, we're on a 32-bit system;
-     just fall through to the regular ptrace call in that case.  */
-  {
-    char buf[8];
-
-    errno = 0;
-    ptrace ((PTRACE_TYPE_ARG1) PPC_PTRACE_PEEKUSR_3264, tid,
-           (PTRACE_TYPE_ARG3) (regno * 8), buf);
-    if (errno == 0)
-      ptrace ((PTRACE_TYPE_ARG1) PPC_PTRACE_PEEKUSR_3264, tid,
-             (PTRACE_TYPE_ARG3) (regno * 8 + 4), buf + 4);
-    if (errno == 0)
-      return (CORE_ADDR) *(unsigned long long *)buf;
-  }
-#endif
-
-  errno = 0;
-  res = ptrace (PT_READ_U, tid,
-               (PTRACE_TYPE_ARG3) (regno * sizeof (PTRACE_TYPE_RET)), 0);
-  if (errno != 0)
-    {
-      char mess[128];
-      sprintf (mess, "reading PPC register #%d", regno);
-      perror_with_name (mess);
-    }
-
-  return (CORE_ADDR) (unsigned long) res;
-}
-
-/* Fetch WORD from PPU memory at (aligned) MEMADDR in thread TID.  */
-static int
-fetch_ppc_memory_1 (int tid, CORE_ADDR memaddr, PTRACE_TYPE_RET *word)
-{
-  errno = 0;
-
-#ifndef __powerpc64__
-  if (memaddr >> 32)
-    {
-      unsigned long long addr_8 = (unsigned long long) memaddr;
-      ptrace ((PTRACE_TYPE_ARG1) PPC_PTRACE_PEEKTEXT_3264, tid,
-             (PTRACE_TYPE_ARG3) &addr_8, word);
-    }
-  else
-#endif
-    *word = ptrace (PT_READ_I, tid, (PTRACE_TYPE_ARG3) (size_t) memaddr, 0);
-
-  return errno;
-}
-
-/* Store WORD into PPU memory at (aligned) MEMADDR in thread TID.  */
-static int
-store_ppc_memory_1 (int tid, CORE_ADDR memaddr, PTRACE_TYPE_RET word)
-{
-  errno = 0;
-
-#ifndef __powerpc64__
-  if (memaddr >> 32)
-    {
-      unsigned long long addr_8 = (unsigned long long) memaddr;
-      ptrace ((PTRACE_TYPE_ARG1) PPC_PTRACE_POKEDATA_3264, tid,
-             (PTRACE_TYPE_ARG3) &addr_8, word);
-    }
-  else
-#endif
-    ptrace (PT_WRITE_D, tid, (PTRACE_TYPE_ARG3) (size_t) memaddr, word);
-
-  return errno;
-}
-
-/* Fetch LEN bytes of PPU memory at MEMADDR to MYADDR.  */
-static int
-fetch_ppc_memory (CORE_ADDR memaddr, char *myaddr, int len)
-{
-  int i, ret;
-
-  CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_TYPE_RET);
-  int count = ((((memaddr + len) - addr) + sizeof (PTRACE_TYPE_RET) - 1)
-              / sizeof (PTRACE_TYPE_RET));
-  PTRACE_TYPE_RET *buffer;
-
-  int tid = current_ptid.lwp ();
-
-  buffer = XALLOCAVEC (PTRACE_TYPE_RET, count);
-  for (i = 0; i < count; i++, addr += sizeof (PTRACE_TYPE_RET))
-    if ((ret = fetch_ppc_memory_1 (tid, addr, &buffer[i])) != 0)
-      return ret;
-
-  memcpy (myaddr,
-         (char *) buffer + (memaddr & (sizeof (PTRACE_TYPE_RET) - 1)),
-         len);
-
-  return 0;
-}
-
-/* Store LEN bytes from MYADDR to PPU memory at MEMADDR.  */
-static int
-store_ppc_memory (CORE_ADDR memaddr, char *myaddr, int len)
-{
-  int i, ret;
-
-  CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_TYPE_RET);
-  int count = ((((memaddr + len) - addr) + sizeof (PTRACE_TYPE_RET) - 1)
-              / sizeof (PTRACE_TYPE_RET));
-  PTRACE_TYPE_RET *buffer;
-
-  int tid = current_ptid.lwp ();
-
-  buffer = XALLOCAVEC (PTRACE_TYPE_RET, count);
-
-  if (addr != memaddr || len < (int) sizeof (PTRACE_TYPE_RET))
-    if ((ret = fetch_ppc_memory_1 (tid, addr, &buffer[0])) != 0)
-      return ret;
-
-  if (count > 1)
-    if ((ret = fetch_ppc_memory_1 (tid, addr + (count - 1)
-                                              * sizeof (PTRACE_TYPE_RET),
-                                  &buffer[count - 1])) != 0)
-      return ret;
-
-  memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_TYPE_RET) - 1)),
-         myaddr, len);
-
-  for (i = 0; i < count; i++, addr += sizeof (PTRACE_TYPE_RET))
-    if ((ret = store_ppc_memory_1 (tid, addr, buffer[i])) != 0)
-      return ret;
-
-  return 0;
-}
-
-
-/* If the PPU thread is currently stopped on a spu_run system call,
-   return to FD and ADDR the file handle and NPC parameter address
-   used with the system call.  Return non-zero if successful.  */
-static int
-parse_spufs_run (int *fd, CORE_ADDR *addr)
-{
-  unsigned int insn;
-  CORE_ADDR pc = fetch_ppc_register (32);  /* nip */
-
-  /* Fetch instruction preceding current NIP.  */
-  if (fetch_ppc_memory (pc-4, (char *) &insn, 4) != 0)
-    return 0;
-  /* It should be a "sc" instruction.  */
-  if (insn != INSTR_SC)
-    return 0;
-  /* System call number should be NR_spu_run.  */
-  if (fetch_ppc_register (0) != NR_spu_run)
-    return 0;
-
-  /* Register 3 contains fd, register 4 the NPC param pointer.  */
-  *fd = fetch_ppc_register (34);  /* orig_gpr3 */
-  *addr = fetch_ppc_register (4);
-  return 1;
-}
-
-
-/* Copy LEN bytes at OFFSET in spufs file ANNEX into/from READBUF or WRITEBUF,
-   using the /proc file system.  */
-static int
-spu_proc_xfer_spu (const char *annex, unsigned char *readbuf,
-                  const unsigned char *writebuf,
-                  CORE_ADDR offset, int len)
-{
-  char buf[128];
-  int fd = 0;
-  int ret = -1;
-
-  if (!annex)
-    return 0;
-
-  sprintf (buf, "/proc/%ld/fd/%s", current_ptid.lwp (), annex);
-  fd = open (buf, writebuf? O_WRONLY : O_RDONLY);
-  if (fd <= 0)
-    return -1;
-
-  if (offset != 0
-      && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
-    {
-      close (fd);
-      return 0;
-    }
-
-  if (writebuf)
-    ret = write (fd, writebuf, (size_t) len);
-  else if (readbuf)
-    ret = read (fd, readbuf, (size_t) len);
-
-  close (fd);
-  return ret;
-}
-
-/* Callback to be used when calling fork_inferior, responsible for
-   actually initiating the tracing of the inferior.  */
-
-static void
-spu_ptrace_fun ()
-{
-  if (ptrace (PTRACE_TRACEME, 0, 0, 0) < 0)
-    trace_start_error_with_name ("ptrace");
-  if (setpgid (0, 0) < 0)
-    trace_start_error_with_name ("setpgid");
-}
-
-/* Start an inferior process and returns its pid.
-   PROGRAM is the name of the program to be started, and PROGRAM_ARGS
-   are its arguments.  */
-
-static int
-spu_create_inferior (const char *program,
-                    const std::vector<char *> &program_args)
-{
-  int pid;
-  ptid_t ptid;
-  struct process_info *proc;
-  std::string str_program_args = stringify_argv (program_args);
-
-  pid = fork_inferior (program,
-                      str_program_args.c_str (),
-                      get_environ ()->envp (), spu_ptrace_fun,
-                      NULL, NULL, NULL, NULL);
-
-  post_fork_inferior (pid, program);
-
-  proc = add_process (pid, 0);
-  proc->tdesc = tdesc_spu;
-
-  ptid = ptid_t (pid, pid, 0);
-  add_thread (ptid, NULL);
-  return pid;
-}
-
-/* Attach to an inferior process.  */
-int
-spu_attach (unsigned long  pid)
-{
-  ptid_t ptid;
-  struct process_info *proc;
-
-  if (ptrace (PTRACE_ATTACH, pid, 0, 0) != 0)
-    {
-      fprintf (stderr, "Cannot attach to process %ld: %s (%d)\n", pid,
-              strerror (errno), errno);
-      fflush (stderr);
-      _exit (0177);
-    }
-
-  proc = add_process (pid, 1);
-  proc->tdesc = tdesc_spu;
-  ptid = ptid_t (pid, pid, 0);
-  add_thread (ptid, NULL);
-  return 0;
-}
-
-/* Kill the inferior process.  */
-static int
-spu_kill (process_info *process)
-{
-  int status, ret;
-  int pid = process->pid;
-
-  ptrace (PTRACE_KILL, pid, 0, 0);
-
-  do {
-    ret = waitpid (pid, &status, 0);
-    if (WIFEXITED (status) || WIFSIGNALED (status))
-      break;
-  } while (ret != -1 || errno != ECHILD);
-
-  clear_inferiors ();
-  remove_process (process);
-  return 0;
-}
-
-/* Detach from inferior process.  */
-static int
-spu_detach (process_info *process)
-{
-  ptrace (PTRACE_DETACH, process->pid, 0, 0);
-
-  clear_inferiors ();
-  remove_process (process);
-  return 0;
-}
-
-static void
-spu_mourn (struct process_info *process)
-{
-  remove_process (process);
-}
-
-static void
-spu_join (int pid)
-{
-  int status, ret;
-
-  do {
-    ret = waitpid (pid, &status, 0);
-    if (WIFEXITED (status) || WIFSIGNALED (status))
-      break;
-  } while (ret != -1 || errno != ECHILD);
-}
-
-/* Return nonzero if the given thread is still alive.  */
-static int
-spu_thread_alive (ptid_t ptid)
-{
-  return ptid == current_ptid;
-}
-
-/* Resume process.  */
-static void
-spu_resume (struct thread_resume *resume_info, size_t n)
-{
-  struct thread_info *thr = get_first_thread ();
-  size_t i;
-
-  for (i = 0; i < n; i++)
-    if (resume_info[i].thread == minus_one_ptid
-       || resume_info[i].thread == ptid_of (thr))
-      break;
-
-  if (i == n)
-    return;
-
-  /* We don't support hardware single-stepping right now, assume
-     GDB knows to use software single-stepping.  */
-  if (resume_info[i].kind == resume_step)
-    fprintf (stderr, "Hardware single-step not supported.\n");
-
-  regcache_invalidate ();
-
-  errno = 0;
-  ptrace (PTRACE_CONT, ptid_of (thr).lwp (), 0, resume_info[i].sig);
-  if (errno)
-    perror_with_name ("ptrace");
-}
-
-/* Wait for process, returns status.  */
-static ptid_t
-spu_wait (ptid_t ptid, struct target_waitstatus *ourstatus, int options)
-{
-  int pid = ptid.pid ();
-  int w;
-  int ret;
-
-  while (1)
-    {
-      ret = waitpid (pid, &w, WNOHANG | __WALL | __WNOTHREAD);
-
-      if (ret == -1)
-       {
-         if (errno != ECHILD)
-           perror_with_name ("waitpid");
-       }
-      else if (ret > 0)
-       break;
-
-      usleep (1000);
-    }
-
-  /* On the first wait, continue running the inferior until we are
-     blocked inside an spu_run system call.  */
-  if (!server_waiting)
-    {
-      int fd;
-      CORE_ADDR addr;
-
-      while (!parse_spufs_run (&fd, &addr))
-       {
-         ptrace (PT_SYSCALL, pid, (PTRACE_TYPE_ARG3) 0, 0);
-         waitpid (pid, NULL, __WALL | __WNOTHREAD);
-       }
-    }
-
-  if (WIFEXITED (w))
-    {
-      fprintf (stderr, "\nChild exited with retcode = %x \n", WEXITSTATUS (w));
-      ourstatus->kind =  TARGET_WAITKIND_EXITED;
-      ourstatus->value.integer = WEXITSTATUS (w);
-      clear_inferiors ();
-      return ptid_t (ret);
-    }
-  else if (!WIFSTOPPED (w))
-    {
-      fprintf (stderr, "\nChild terminated with signal = %x \n", WTERMSIG (w));
-      ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
-      ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (w));
-      clear_inferiors ();
-      return ptid_t (ret);
-    }
-
-  /* After attach, we may have received a SIGSTOP.  Do not return this
-     as signal to GDB, or else it will try to continue with SIGSTOP ...  */
-  if (!server_waiting)
-    {
-      ourstatus->kind = TARGET_WAITKIND_STOPPED;
-      ourstatus->value.sig = GDB_SIGNAL_0;
-      return ptid_t (ret, ret, 0);
-    }
-
-  ourstatus->kind = TARGET_WAITKIND_STOPPED;
-  ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w));
-  return ptid_t (ret, ret, 0);
-}
-
-/* Fetch inferior registers.  */
-static void
-spu_fetch_registers (struct regcache *regcache, int regno)
-{
-  int fd;
-  CORE_ADDR addr;
-
-  /* We must be stopped on a spu_run system call.  */
-  if (!parse_spufs_run (&fd, &addr))
-    return;
-
-  /* The ID register holds the spufs file handle.  */
-  if (regno == -1 || regno == SPU_ID_REGNUM)
-    supply_register (regcache, SPU_ID_REGNUM, (char *)&fd);
-
-  /* The NPC register is found at ADDR.  */
-  if (regno == -1 || regno == SPU_PC_REGNUM)
-    {
-      char buf[4];
-      if (fetch_ppc_memory (addr, buf, 4) == 0)
-       supply_register (regcache, SPU_PC_REGNUM, buf);
-    }
-
-  /* The GPRs are found in the "regs" spufs file.  */
-  if (regno == -1 || (regno >= 0 && regno < SPU_NUM_CORE_REGS))
-    {
-      unsigned char buf[16*SPU_NUM_CORE_REGS];
-      char annex[32];
-      int i;
-
-      sprintf (annex, "%d/regs", fd);
-      if (spu_proc_xfer_spu (annex, buf, NULL, 0, sizeof buf) == sizeof buf)
-       for (i = 0; i < SPU_NUM_CORE_REGS; i++)
-         supply_register (regcache, i, buf + i*16);
-    }
-}
-
-/* Store inferior registers.  */
-static void
-spu_store_registers (struct regcache *regcache, int regno)
-{
-  int fd;
-  CORE_ADDR addr;
-
-  /* ??? Some callers use 0 to mean all registers.  */
-  if (regno == 0)
-    regno = -1;
-
-  /* We must be stopped on a spu_run system call.  */
-  if (!parse_spufs_run (&fd, &addr))
-    return;
-
-  /* The NPC register is found at ADDR.  */
-  if (regno == -1 || regno == SPU_PC_REGNUM)
-    {
-      char buf[4];
-      collect_register (regcache, SPU_PC_REGNUM, buf);
-      store_ppc_memory (addr, buf, 4);
-    }
-
-  /* The GPRs are found in the "regs" spufs file.  */
-  if (regno == -1 || (regno >= 0 && regno < SPU_NUM_CORE_REGS))
-    {
-      unsigned char buf[16*SPU_NUM_CORE_REGS];
-      char annex[32];
-      int i;
-
-      for (i = 0; i < SPU_NUM_CORE_REGS; i++)
-       collect_register (regcache, i, buf + i*16);
-
-      sprintf (annex, "%d/regs", fd);
-      spu_proc_xfer_spu (annex, NULL, buf, 0, sizeof buf);
-    }
-}
-
-/* Copy LEN bytes from inferior's memory starting at MEMADDR
-   to debugger memory starting at MYADDR.  */
-static int
-spu_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
-{
-  int fd, ret;
-  CORE_ADDR addr;
-  char annex[32], lslr_annex[32], buf[32];
-  CORE_ADDR lslr;
-
-  /* We must be stopped on a spu_run system call.  */
-  if (!parse_spufs_run (&fd, &addr))
-    return 0;
-
-  /* Use the "mem" spufs file to access SPU local store.  */
-  sprintf (annex, "%d/mem", fd);
-  ret = spu_proc_xfer_spu (annex, myaddr, NULL, memaddr, len);
-  if (ret > 0)
-    return ret == len ? 0 : EIO;
-
-  /* SPU local store access wraps the address around at the
-     local store limit.  We emulate this here.  To avoid needing
-     an extra access to retrieve the LSLR, we only do that after
-     trying the original address first, and getting end-of-file.  */
-  sprintf (lslr_annex, "%d/lslr", fd);
-  memset (buf, 0, sizeof buf);
-  if (spu_proc_xfer_spu (lslr_annex, (unsigned char *)buf, NULL,
-                        0, sizeof buf) <= 0)
-    return ret;
-
-  lslr = strtoul (buf, NULL, 16);
-  ret = spu_proc_xfer_spu (annex, myaddr, NULL, memaddr & lslr, len);
-
-  return ret == len ? 0 : EIO;
-}
-
-/* Copy LEN bytes of data from debugger memory at MYADDR
-   to inferior's memory at MEMADDR.
-   On failure (cannot write the inferior)
-   returns the value of errno.  */
-static int
-spu_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
-{
-  int fd, ret;
-  CORE_ADDR addr;
-  char annex[32], lslr_annex[32], buf[32];
-  CORE_ADDR lslr;
-
-  /* We must be stopped on a spu_run system call.  */
-  if (!parse_spufs_run (&fd, &addr))
-    return 0;
-
-  /* Use the "mem" spufs file to access SPU local store.  */
-  sprintf (annex, "%d/mem", fd);
-  ret = spu_proc_xfer_spu (annex, NULL, myaddr, memaddr, len);
-  if (ret > 0)
-    return ret == len ? 0 : EIO;
-
-  /* SPU local store access wraps the address around at the
-     local store limit.  We emulate this here.  To avoid needing
-     an extra access to retrieve the LSLR, we only do that after
-     trying the original address first, and getting end-of-file.  */
-  sprintf (lslr_annex, "%d/lslr", fd);
-  memset (buf, 0, sizeof buf);
-  if (spu_proc_xfer_spu (lslr_annex, (unsigned char *)buf, NULL,
-                        0, sizeof buf) <= 0)
-    return ret;
-
-  lslr = strtoul (buf, NULL, 16);
-  ret = spu_proc_xfer_spu (annex, NULL, myaddr, memaddr & lslr, len);
-
-  return ret == len ? 0 : EIO;
-}
-
-/* Look up special symbols -- unneded here.  */
-static void
-spu_look_up_symbols (void)
-{
-}
-
-/* Send signal to inferior.  */
-static void
-spu_request_interrupt (void)
-{
-  struct thread_info *thr = get_first_thread ();
-
-  syscall (SYS_tkill, lwpid_of (thr), SIGINT);
-}
-
-/* Implementation of the target_ops method "sw_breakpoint_from_kind".  */
-
-static const gdb_byte *
-spu_sw_breakpoint_from_kind (int kind, int *size)
-{
-  *size = sizeof breakpoint;
-  return breakpoint;
-}
-
-static struct target_ops spu_target_ops = {
-  spu_create_inferior,
-  NULL,  /* post_create_inferior */
-  spu_attach,
-  spu_kill,
-  spu_detach,
-  spu_mourn,
-  spu_join,
-  spu_thread_alive,
-  spu_resume,
-  spu_wait,
-  spu_fetch_registers,
-  spu_store_registers,
-  NULL, /* prepare_to_access_memory */
-  NULL, /* done_accessing_memory */
-  spu_read_memory,
-  spu_write_memory,
-  spu_look_up_symbols,
-  spu_request_interrupt,
-  NULL,
-  NULL,  /* supports_z_point_type */
-  NULL,
-  NULL,
-  NULL, /* stopped_by_sw_breakpoint */
-  NULL, /* supports_stopped_by_sw_breakpoint */
-  NULL, /* stopped_by_hw_breakpoint */
-  NULL, /* supports_stopped_by_hw_breakpoint */
-  NULL, /* supports_hardware_single_step */
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  spu_proc_xfer_spu,
-  hostio_last_error_from_errno,
-  NULL, /* qxfer_osdata */
-  NULL, /* qxfer_siginfo */
-  NULL, /* supports_non_stop */
-  NULL, /* async */
-  NULL, /* start_non_stop */
-  NULL, /* supports_multi_process */
-  NULL, /* supports_fork_events */
-  NULL, /* supports_vfork_events */
-  NULL, /* supports_exec_events */
-  NULL, /* handle_new_gdb_connection */
-  NULL, /* handle_monitor_command */
-  NULL, /* core_of_thread */
-  NULL, /* read_loadmap */
-  NULL, /* process_qsupported */
-  NULL, /* supports_tracepoints */
-  NULL, /* read_pc */
-  NULL, /* write_pc */
-  NULL, /* thread_stopped */
-  NULL, /* get_tib_address */
-  NULL, /* pause_all */
-  NULL, /* unpause_all */
-  NULL, /* stabilize_threads */
-  NULL, /* install_fast_tracepoint_jump_pad */
-  NULL, /* emit_ops */
-  NULL, /* supports_disable_randomization */
-  NULL, /* get_min_fast_tracepoint_insn_len */
-  NULL, /* qxfer_libraries_svr4 */
-  NULL, /* support_agent */
-  NULL, /* enable_btrace */
-  NULL, /* disable_btrace */
-  NULL, /* read_btrace */
-  NULL, /* read_btrace_conf */
-  NULL, /* supports_range_stepping */
-  NULL, /* pid_to_exec_file */
-  NULL, /* multifs_open */
-  NULL, /* multifs_unlink */
-  NULL, /* multifs_readlink */
-  NULL, /* breakpoint_kind_from_pc */
-  spu_sw_breakpoint_from_kind,
-};
-
-void
-initialize_low (void)
-{
-  set_target_ops (&spu_target_ops);
-  init_registers_spu ();
-}
index 67167cca2d3d4c3a55326c3651b135e3ac222660..2df135a7696c0800f483365add1973203d086f97 100644 (file)
@@ -256,10 +256,6 @@ struct target_ops
   int (*get_tls_address) (struct thread_info *thread, CORE_ADDR offset,
                          CORE_ADDR load_module, CORE_ADDR *address);
 
-   /* Read/Write from/to spufs using qXfer packets.  */
-  int (*qxfer_spu) (const char *annex, unsigned char *readbuf,
-                   unsigned const char *writebuf, CORE_ADDR offset, int len);
-
   /* Fill BUF with an hostio error packet representing the last hostio
      error.  */
   void (*hostio_last_error) (char *buf);
index 49c6cf1b7c9d68f735f5f24a8990e8f2989aa8c4..7088ba4dd17d846af7d09f0ac0a1501955782116 100644 (file)
@@ -1809,7 +1809,6 @@ static struct target_ops win32_target_ops = {
   win32_stopped_data_address,
   NULL, /* read_offsets */
   NULL, /* get_tls_address */
-  NULL, /* qxfer_spu */
 #ifdef _WIN32_WCE
   wince_hostio_last_error,
 #else
index 945c19f6668d78c1838d7fae277d2f83cd19f506..cd5cf1830d3fdc1ed4f48b7571f30538cb35dc4e 100644 (file)
 #include "gdbsupport/fileio.h"
 #include "gdbsupport/scope-exit.h"
 
-#ifndef SPUFS_MAGIC
-#define SPUFS_MAGIC 0x23c9b64e
-#endif
-
 /* This comment documents high-level logic of this file.
 
 Waiting for events in sync mode
@@ -3841,12 +3837,6 @@ linux_nat_xfer_osdata (enum target_object object,
                       const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
                       ULONGEST *xfered_len);
 
-static enum target_xfer_status
-linux_proc_xfer_spu (enum target_object object,
-                    const char *annex, gdb_byte *readbuf,
-                    const gdb_byte *writebuf,
-                    ULONGEST offset, ULONGEST len, ULONGEST *xfered_len);
-
 static enum target_xfer_status
 linux_proc_xfer_partial (enum target_object object,
                         const char *annex, gdb_byte *readbuf,
@@ -3879,10 +3869,6 @@ linux_nat_target::xfer_partial (enum target_object object,
     return linux_nat_xfer_osdata (object, annex, readbuf, writebuf,
                                  offset, len, xfered_len);
 
-  if (object == TARGET_OBJECT_SPU)
-    return linux_proc_xfer_spu (object, annex, readbuf, writebuf,
-                               offset, len, xfered_len);
-
   /* GDB calculates all addresses in the largest possible address
      width.
      The address width must be masked before its final use - either by
@@ -4020,121 +4006,6 @@ linux_proc_xfer_partial (enum target_object object,
 }
 
 
-/* Enumerate spufs IDs for process PID.  */
-static LONGEST
-spu_enumerate_spu_ids (int pid, gdb_byte *buf, ULONGEST offset, ULONGEST len)
-{
-  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
-  LONGEST pos = 0;
-  LONGEST written = 0;
-  char path[128];
-  DIR *dir;
-  struct dirent *entry;
-
-  xsnprintf (path, sizeof path, "/proc/%d/fd", pid);
-  dir = opendir (path);
-  if (!dir)
-    return -1;
-
-  rewinddir (dir);
-  while ((entry = readdir (dir)) != NULL)
-    {
-      struct stat st;
-      struct statfs stfs;
-      int fd;
-
-      fd = atoi (entry->d_name);
-      if (!fd)
-       continue;
-
-      xsnprintf (path, sizeof path, "/proc/%d/fd/%d", pid, fd);
-      if (stat (path, &st) != 0)
-       continue;
-      if (!S_ISDIR (st.st_mode))
-       continue;
-
-      if (statfs (path, &stfs) != 0)
-       continue;
-      if (stfs.f_type != SPUFS_MAGIC)
-       continue;
-
-      if (pos >= offset && pos + 4 <= offset + len)
-       {
-         store_unsigned_integer (buf + pos - offset, 4, byte_order, fd);
-         written += 4;
-       }
-      pos += 4;
-    }
-
-  closedir (dir);
-  return written;
-}
-
-/* Implement the to_xfer_partial interface for the TARGET_OBJECT_SPU
-   object type, using the /proc file system.  */
-
-static enum target_xfer_status
-linux_proc_xfer_spu (enum target_object object,
-                    const char *annex, gdb_byte *readbuf,
-                    const gdb_byte *writebuf,
-                    ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
-{
-  char buf[128];
-  int fd = 0;
-  int ret = -1;
-  int pid = inferior_ptid.lwp ();
-
-  if (!annex)
-    {
-      if (!readbuf)
-       return TARGET_XFER_E_IO;
-      else
-       {
-         LONGEST l = spu_enumerate_spu_ids (pid, readbuf, offset, len);
-
-         if (l < 0)
-           return TARGET_XFER_E_IO;
-         else if (l == 0)
-           return TARGET_XFER_EOF;
-         else
-           {
-             *xfered_len = (ULONGEST) l;
-             return TARGET_XFER_OK;
-           }
-       }
-    }
-
-  xsnprintf (buf, sizeof buf, "/proc/%d/fd/%s", pid, annex);
-  fd = gdb_open_cloexec (buf, writebuf? O_WRONLY : O_RDONLY, 0);
-  if (fd <= 0)
-    return TARGET_XFER_E_IO;
-
-  if (offset != 0
-      && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
-    {
-      close (fd);
-      return TARGET_XFER_EOF;
-    }
-
-  if (writebuf)
-    ret = write (fd, writebuf, (size_t) len);
-  else if (readbuf)
-    ret = read (fd, readbuf, (size_t) len);
-
-  close (fd);
-
-  if (ret < 0)
-    return TARGET_XFER_E_IO;
-  else if (ret == 0)
-    return TARGET_XFER_EOF;
-  else
-    {
-      *xfered_len = (ULONGEST) ret;
-      return TARGET_XFER_OK;
-    }
-}
-
-
 /* Parse LINE as a signal set and add its set bits to SIGS.  */
 
 static void
index 63a9bd32dfd3f066640d947e1fb57e30e4fd07c9..567b01c5d15cf1b9576f370a6548f06824b8bc4a 100644 (file)
@@ -1413,73 +1413,6 @@ find_signalled_thread (struct thread_info *info, void *data)
   return 0;
 }
 
-/* Generate corefile notes for SPU contexts.  */
-
-static char *
-linux_spu_make_corefile_notes (bfd *obfd, char *note_data, int *note_size)
-{
-  static const char *spu_files[] =
-    {
-      "object-id",
-      "mem",
-      "regs",
-      "fpcr",
-      "lslr",
-      "decr",
-      "decr_status",
-      "signal1",
-      "signal1_type",
-      "signal2",
-      "signal2_type",
-      "event_mask",
-      "event_status",
-      "mbox_info",
-      "ibox_info",
-      "wbox_info",
-      "dma_info",
-      "proxydma_info",
-   };
-
-  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
-
-  /* Determine list of SPU ids.  */
-  gdb::optional<gdb::byte_vector>
-    spu_ids = target_read_alloc (current_top_target (),
-                                TARGET_OBJECT_SPU, NULL);
-
-  if (!spu_ids)
-    return note_data;
-
-  /* Generate corefile notes for each SPU file.  */
-  for (size_t i = 0; i < spu_ids->size (); i += 4)
-    {
-      int fd = extract_unsigned_integer (spu_ids->data () + i, 4, byte_order);
-
-      for (size_t j = 0; j < sizeof (spu_files) / sizeof (spu_files[0]); j++)
-       {
-         char annex[32], note_name[32];
-
-         xsnprintf (annex, sizeof annex, "%d/%s", fd, spu_files[j]);
-         gdb::optional<gdb::byte_vector> spu_data
-           = target_read_alloc (current_top_target (), TARGET_OBJECT_SPU, annex);
-
-         if (spu_data && !spu_data->empty ())
-           {
-             xsnprintf (note_name, sizeof note_name, "SPU/%s", annex);
-             note_data = elfcore_write_note (obfd, note_data, note_size,
-                                             note_name, NT_SPU,
-                                             spu_data->data (),
-                                             spu_data->size ());
-
-             if (!note_data)
-               return nullptr;
-           }
-       }
-    }
-
-  return note_data;
-}
-
 /* This is used to pass information from
    linux_make_mappings_corefile_notes through
    linux_find_memory_regions_full.  */
@@ -2008,11 +1941,6 @@ linux_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
        return NULL;
     }
 
-  /* SPU information.  */
-  note_data = linux_spu_make_corefile_notes (obfd, note_data, note_size);
-  if (!note_data)
-    return NULL;
-
   /* File mappings.  */
   note_data = linux_make_mappings_corefile_notes (gdbarch, obfd,
                                                  note_data, note_size);
index f1561b3b357675e62d517c26735a123342307340..508395cdb2d6a0071d9c2cf3667a3087bc8523d1 100644 (file)
@@ -33,9 +33,6 @@
    If they aren't, we can provide them ourselves (their values are fixed
    because they are part of the kernel ABI).  They are used in the AT_HWCAP
    entry of the AUXV.  */
-#ifndef PPC_FEATURE_CELL
-#define PPC_FEATURE_CELL 0x00010000
-#endif
 #ifndef PPC_FEATURE_BOOKE
 #define PPC_FEATURE_BOOKE 0x00008000
 #endif
index deb31d49890c7bee2e55ad373fbbeaa40649a109..53406f61c8ed806c926503b8c56e44ea492577f2 100644 (file)
@@ -2646,9 +2646,6 @@ ppc_linux_nat_target::read_description ()
        perror_with_name (_("Unable to fetch AltiVec registers"));
     }
 
-  if (hwcap & PPC_FEATURE_CELL)
-    features.cell = true;
-
   features.isa205 = ppc_linux_has_isa205 (hwcap);
 
   if ((hwcap2 & PPC_FEATURE2_DSCR)
index c6181c9dd489164dfb2a8ea9c5f85e595c4d498a..ce3c727371f07f7e7d79751001ca32337ae20334 100644 (file)
@@ -31,7 +31,6 @@
 #include "osabi.h"
 #include "regset.h"
 #include "solib-svr4.h"
-#include "solib-spu.h"
 #include "solib.h"
 #include "solist.h"
 #include "ppc-tdep.h"
@@ -48,7 +47,6 @@
 #include "elf/common.h"
 #include "elf/ppc64.h"
 #include "arch-utils.h"
-#include "spu-tdep.h"
 #include "xml-syscall.h"
 #include "linux-tdep.h"
 #include "linux-record.h"
@@ -66,7 +64,6 @@
 
 #include "features/rs6000/powerpc-32l.c"
 #include "features/rs6000/powerpc-altivec32l.c"
-#include "features/rs6000/powerpc-cell32l.c"
 #include "features/rs6000/powerpc-vsx32l.c"
 #include "features/rs6000/powerpc-isa205-32l.c"
 #include "features/rs6000/powerpc-isa205-altivec32l.c"
@@ -76,7 +73,6 @@
 #include "features/rs6000/powerpc-isa207-htm-vsx32l.c"
 #include "features/rs6000/powerpc-64l.c"
 #include "features/rs6000/powerpc-altivec64l.c"
-#include "features/rs6000/powerpc-cell64l.c"
 #include "features/rs6000/powerpc-vsx64l.c"
 #include "features/rs6000/powerpc-isa205-64l.c"
 #include "features/rs6000/powerpc-isa205-altivec64l.c"
@@ -1555,19 +1551,12 @@ ppc_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
     regcache_cooked_write_unsigned (regcache, PPC_TRAP_REGNUM, -1);
 }
 
-static int
-ppc_linux_spu_section (bfd *abfd, asection *asect, void *user_data)
-{
-  return startswith (bfd_section_name (asect), "SPU/");
-}
-
 static const struct target_desc *
 ppc_linux_core_read_description (struct gdbarch *gdbarch,
                                 struct target_ops *target,
                                 bfd *abfd)
 {
   struct ppc_linux_features features = ppc_linux_no_features;
-  asection *cell = bfd_sections_find_if (abfd, ppc_linux_spu_section, NULL);
   asection *altivec = bfd_get_section_by_name (abfd, ".reg-ppc-vmx");
   asection *vsx = bfd_get_section_by_name (abfd, ".reg-ppc-vsx");
   asection *section = bfd_get_section_by_name (abfd, ".reg");
@@ -1592,9 +1581,6 @@ ppc_linux_core_read_description (struct gdbarch *gdbarch,
       return NULL;
     }
 
-  if (cell)
-    features.cell = true;
-
   if (altivec)
     features.altivec = true;
 
@@ -1743,287 +1729,6 @@ ppc_stap_parse_special_token (struct gdbarch *gdbarch,
   return 1;
 }
 
-/* Cell/B.E. active SPE context tracking support.  */
-
-static struct objfile *spe_context_objfile = NULL;
-static CORE_ADDR spe_context_lm_addr = 0;
-static CORE_ADDR spe_context_offset = 0;
-
-static ptid_t spe_context_cache_ptid;
-static CORE_ADDR spe_context_cache_address;
-
-/* Hook into inferior_created, solib_loaded, and solib_unloaded observers
-   to track whether we've loaded a version of libspe2 (as static or dynamic
-   library) that provides the __spe_current_active_context variable.  */
-static void
-ppc_linux_spe_context_lookup (struct objfile *objfile)
-{
-  struct bound_minimal_symbol sym;
-
-  if (!objfile)
-    {
-      spe_context_objfile = NULL;
-      spe_context_lm_addr = 0;
-      spe_context_offset = 0;
-      spe_context_cache_ptid = minus_one_ptid;
-      spe_context_cache_address = 0;
-      return;
-    }
-
-  sym = lookup_minimal_symbol ("__spe_current_active_context", NULL, objfile);
-  if (sym.minsym)
-    {
-      spe_context_objfile = objfile;
-      spe_context_lm_addr = svr4_fetch_objfile_link_map (objfile);
-      spe_context_offset = MSYMBOL_VALUE_RAW_ADDRESS (sym.minsym);
-      spe_context_cache_ptid = minus_one_ptid;
-      spe_context_cache_address = 0;
-      return;
-    }
-}
-
-static void
-ppc_linux_spe_context_inferior_created (struct target_ops *t, int from_tty)
-{
-  ppc_linux_spe_context_lookup (NULL);
-  for (objfile *objfile : current_program_space->objfiles ())
-    ppc_linux_spe_context_lookup (objfile);
-}
-
-static void
-ppc_linux_spe_context_solib_loaded (struct so_list *so)
-{
-  if (strstr (so->so_original_name, "/libspe") != NULL)
-    {
-      solib_read_symbols (so, 0);
-      ppc_linux_spe_context_lookup (so->objfile);
-    }
-}
-
-static void
-ppc_linux_spe_context_solib_unloaded (struct so_list *so)
-{
-  if (so->objfile == spe_context_objfile)
-    ppc_linux_spe_context_lookup (NULL);
-}
-
-/* Retrieve contents of the N'th element in the current thread's
-   linked SPE context list into ID and NPC.  Return the address of
-   said context element, or 0 if not found.  */
-static CORE_ADDR
-ppc_linux_spe_context (int wordsize, enum bfd_endian byte_order,
-                      int n, int *id, unsigned int *npc)
-{
-  CORE_ADDR spe_context = 0;
-  gdb_byte buf[16];
-  int i;
-
-  /* Quick exit if we have not found __spe_current_active_context.  */
-  if (!spe_context_objfile)
-    return 0;
-
-  /* Look up cached address of thread-local variable.  */
-  if (spe_context_cache_ptid != inferior_ptid)
-    {
-      struct target_ops *target = current_top_target ();
-
-      try
-       {
-         /* We do not call target_translate_tls_address here, because
-            svr4_fetch_objfile_link_map may invalidate the frame chain,
-            which must not do while inside a frame sniffer.
-
-            Instead, we have cached the lm_addr value, and use that to
-            directly call the target's to_get_thread_local_address.  */
-         spe_context_cache_address
-           = target->get_thread_local_address (inferior_ptid,
-                                               spe_context_lm_addr,
-                                               spe_context_offset);
-         spe_context_cache_ptid = inferior_ptid;
-       }
-
-      catch (const gdb_exception_error &ex)
-       {
-         return 0;
-       }
-    }
-
-  /* Read variable value.  */
-  if (target_read_memory (spe_context_cache_address, buf, wordsize) == 0)
-    spe_context = extract_unsigned_integer (buf, wordsize, byte_order);
-
-  /* Cyle through to N'th linked list element.  */
-  for (i = 0; i < n && spe_context; i++)
-    if (target_read_memory (spe_context + align_up (12, wordsize),
-                           buf, wordsize) == 0)
-      spe_context = extract_unsigned_integer (buf, wordsize, byte_order);
-    else
-      spe_context = 0;
-
-  /* Read current context.  */
-  if (spe_context
-      && target_read_memory (spe_context, buf, 12) != 0)
-    spe_context = 0;
-
-  /* Extract data elements.  */
-  if (spe_context)
-    {
-      if (id)
-       *id = extract_signed_integer (buf, 4, byte_order);
-      if (npc)
-       *npc = extract_unsigned_integer (buf + 4, 4, byte_order);
-    }
-
-  return spe_context;
-}
-
-
-/* Cell/B.E. cross-architecture unwinder support.  */
-
-struct ppu2spu_cache
-{
-  struct frame_id frame_id;
-  readonly_detached_regcache *regcache;
-};
-
-static struct gdbarch *
-ppu2spu_prev_arch (struct frame_info *this_frame, void **this_cache)
-{
-  struct ppu2spu_cache *cache = (struct ppu2spu_cache *) *this_cache;
-  return cache->regcache->arch ();
-}
-
-static void
-ppu2spu_this_id (struct frame_info *this_frame,
-                void **this_cache, struct frame_id *this_id)
-{
-  struct ppu2spu_cache *cache = (struct ppu2spu_cache *) *this_cache;
-  *this_id = cache->frame_id;
-}
-
-static struct value *
-ppu2spu_prev_register (struct frame_info *this_frame,
-                      void **this_cache, int regnum)
-{
-  struct ppu2spu_cache *cache = (struct ppu2spu_cache *) *this_cache;
-  struct gdbarch *gdbarch = cache->regcache->arch ();
-  gdb_byte *buf;
-
-  buf = (gdb_byte *) alloca (register_size (gdbarch, regnum));
-
-  cache->regcache->cooked_read (regnum, buf);
-  return frame_unwind_got_bytes (this_frame, regnum, buf);
-}
-
-struct ppu2spu_data
-{
-  struct gdbarch *gdbarch;
-  int id;
-  unsigned int npc;
-  gdb_byte gprs[128*16];
-};
-
-static enum register_status
-ppu2spu_unwind_register (ppu2spu_data *data, int regnum, gdb_byte *buf)
-{
-  enum bfd_endian byte_order = gdbarch_byte_order (data->gdbarch);
-
-  if (regnum >= 0 && regnum < SPU_NUM_GPRS)
-    memcpy (buf, data->gprs + 16*regnum, 16);
-  else if (regnum == SPU_ID_REGNUM)
-    store_unsigned_integer (buf, 4, byte_order, data->id);
-  else if (regnum == SPU_PC_REGNUM)
-    store_unsigned_integer (buf, 4, byte_order, data->npc);
-  else
-    return REG_UNAVAILABLE;
-
-  return REG_VALID;
-}
-
-static int
-ppu2spu_sniffer (const struct frame_unwind *self,
-                struct frame_info *this_frame, void **this_prologue_cache)
-{
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  struct ppu2spu_data data;
-  struct frame_info *fi;
-  CORE_ADDR base, func, backchain, spe_context;
-  gdb_byte buf[8];
-  int n = 0;
-
-  /* Count the number of SPU contexts already in the frame chain.  */
-  for (fi = get_next_frame (this_frame); fi; fi = get_next_frame (fi))
-    if (get_frame_type (fi) == ARCH_FRAME
-       && gdbarch_bfd_arch_info (get_frame_arch (fi))->arch == bfd_arch_spu)
-      n++;
-
-  base = get_frame_sp (this_frame);
-  func = get_frame_pc (this_frame);
-  if (target_read_memory (base, buf, tdep->wordsize))
-    return 0;
-  backchain = extract_unsigned_integer (buf, tdep->wordsize, byte_order);
-
-  spe_context = ppc_linux_spe_context (tdep->wordsize, byte_order,
-                                      n, &data.id, &data.npc);
-  if (spe_context && base <= spe_context && spe_context < backchain)
-    {
-      char annex[32];
-
-      /* Find gdbarch for SPU.  */
-      struct gdbarch_info info;
-      gdbarch_info_init (&info);
-      info.bfd_arch_info = bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu);
-      info.byte_order = BFD_ENDIAN_BIG;
-      info.osabi = GDB_OSABI_LINUX;
-      info.id = &data.id;
-      data.gdbarch = gdbarch_find_by_info (info);
-      if (!data.gdbarch)
-       return 0;
-
-      xsnprintf (annex, sizeof annex, "%d/regs", data.id);
-      if (target_read (current_top_target (), TARGET_OBJECT_SPU, annex,
-                      data.gprs, 0, sizeof data.gprs)
-         == sizeof data.gprs)
-       {
-         auto cooked_read = [&data] (int regnum, gdb_byte *out_buf)
-           {
-             return ppu2spu_unwind_register (&data, regnum, out_buf);
-           };
-         struct ppu2spu_cache *cache
-           = FRAME_OBSTACK_CALLOC (1, struct ppu2spu_cache);
-         std::unique_ptr<readonly_detached_regcache> regcache
-           (new readonly_detached_regcache (data.gdbarch, cooked_read));
-
-         cache->frame_id = frame_id_build (base, func);
-         cache->regcache = regcache.release ();
-         *this_prologue_cache = cache;
-         return 1;
-       }
-    }
-
-  return 0;
-}
-
-static void
-ppu2spu_dealloc_cache (struct frame_info *self, void *this_cache)
-{
-  struct ppu2spu_cache *cache = (struct ppu2spu_cache *) this_cache;
-  delete cache->regcache;
-}
-
-static const struct frame_unwind ppu2spu_unwind = {
-  ARCH_FRAME,
-  default_frame_unwind_stop_reason,
-  ppu2spu_this_id,
-  ppu2spu_prev_register,
-  NULL,
-  ppu2spu_sniffer,
-  ppu2spu_dealloc_cache,
-  ppu2spu_prev_arch,
-};
-
 /* Initialize linux_record_tdep if not initialized yet.
    WORDSIZE is 4 or 8 for 32- or 64-bit PowerPC Linux respectively.
    Sizes of data structures are initialized accordingly.  */
@@ -2439,21 +2144,6 @@ ppc_linux_init_abi (struct gdbarch_info info,
        }
     }
 
-  /* Enable Cell/B.E. if supported by the target.  */
-  if (tdesc_compatible_p (info.target_desc,
-                         bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu)))
-    {
-      /* Cell/B.E. multi-architecture support.  */
-      set_spu_solib_ops (gdbarch);
-
-      /* Cell/B.E. cross-architecture unwinder support.  */
-      frame_unwind_prepend_unwinder (gdbarch, &ppu2spu_unwind);
-
-      /* We need to support more than "addr_bit" significant address bits
-         in order to support SPUADDR_ADDR encoded values.  */
-      set_gdbarch_significant_addr_bit (gdbarch, 64);
-    }
-
   set_gdbarch_displaced_step_location (gdbarch,
                                       linux_displaced_step_location);
 
@@ -2478,15 +2168,9 @@ _initialize_ppc_linux_tdep (void)
   gdbarch_register_osabi (bfd_arch_rs6000, bfd_mach_rs6k, GDB_OSABI_LINUX,
                          ppc_linux_init_abi);
 
-  /* Attach to observers to track __spe_current_active_context.  */
-  gdb::observers::inferior_created.attach (ppc_linux_spe_context_inferior_created);
-  gdb::observers::solib_loaded.attach (ppc_linux_spe_context_solib_loaded);
-  gdb::observers::solib_unloaded.attach (ppc_linux_spe_context_solib_unloaded);
-
   /* Initialize the Linux target descriptions.  */
   initialize_tdesc_powerpc_32l ();
   initialize_tdesc_powerpc_altivec32l ();
-  initialize_tdesc_powerpc_cell32l ();
   initialize_tdesc_powerpc_vsx32l ();
   initialize_tdesc_powerpc_isa205_32l ();
   initialize_tdesc_powerpc_isa205_altivec32l ();
@@ -2496,7 +2180,6 @@ _initialize_ppc_linux_tdep (void)
   initialize_tdesc_powerpc_isa207_htm_vsx32l ();
   initialize_tdesc_powerpc_64l ();
   initialize_tdesc_powerpc_altivec64l ();
-  initialize_tdesc_powerpc_cell64l ();
   initialize_tdesc_powerpc_vsx64l ();
   initialize_tdesc_powerpc_isa205_64l ();
   initialize_tdesc_powerpc_isa205_altivec64l ();
index 7184c748427bc4bceff5d2f085020d81438829d6..2e8b52ee751e2e80025b4f1880326415ce737e19 100644 (file)
@@ -1605,10 +1605,7 @@ cooked_read_test (struct gdbarch *gdbarch)
 
       SELF_CHECK (mock_target.fetch_registers_called == 0);
       SELF_CHECK (mock_target.store_registers_called == 0);
-
-      /* Some SPU pseudo registers are got via TARGET_OBJECT_SPU.  */
-      if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
-       SELF_CHECK (mock_target.xfer_partial_called == 0);
+      SELF_CHECK (mock_target.xfer_partial_called == 0);
 
       mock_target.reset ();
     }
@@ -1724,16 +1721,12 @@ cooked_write_test (struct gdbarch *gdbarch)
 
       auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
 
-      if ((bfd_arch == bfd_arch_sparc
-          /* SPARC64_CWP_REGNUM, SPARC64_PSTATE_REGNUM,
-             SPARC64_ASI_REGNUM and SPARC64_CCR_REGNUM are hard to test.  */
-          && gdbarch_ptr_bit (gdbarch) == 64
-          && (regnum >= gdbarch_num_regs (gdbarch)
-              && regnum <= gdbarch_num_regs (gdbarch) + 4))
-         || (bfd_arch == bfd_arch_spu
-             /* SPU pseudo registers except SPU_SP_REGNUM are got by
-                TARGET_OBJECT_SPU.  */
-             && regnum >= gdbarch_num_regs (gdbarch) && regnum != 130))
+      if (bfd_arch == bfd_arch_sparc
+         /* SPARC64_CWP_REGNUM, SPARC64_PSTATE_REGNUM,
+            SPARC64_ASI_REGNUM and SPARC64_CCR_REGNUM are hard to test.  */
+         && gdbarch_ptr_bit (gdbarch) == 64
+         && (regnum >= gdbarch_num_regs (gdbarch)
+             && regnum <= gdbarch_num_regs (gdbarch) + 4))
        continue;
 
       std::vector<gdb_byte> expected (register_size (gdbarch, regnum), 0);
diff --git a/gdb/regformats/reg-spu.dat b/gdb/regformats/reg-spu.dat
deleted file mode 100644 (file)
index fb69119..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-name:spu
-xmlarch:spu
-expedite:r0,r1,npc
-128:r0
-128:r1
-128:r2
-128:r3
-128:r4
-128:r5
-128:r6
-128:r7
-128:r8
-128:r9
-128:r10
-128:r11
-128:r12
-128:r13
-128:r14
-128:r15
-128:r16
-128:r17
-128:r18
-128:r19
-128:r20
-128:r21
-128:r22
-128:r23
-128:r24
-128:r25
-128:r26
-128:r27
-128:r28
-128:r29
-128:r30
-128:r31
-128:r32
-128:r33
-128:r34
-128:r35
-128:r36
-128:r37
-128:r38
-128:r39
-128:r40
-128:r41
-128:r42
-128:r43
-128:r44
-128:r45
-128:r46
-128:r47
-128:r48
-128:r49
-128:r50
-128:r51
-128:r52
-128:r53
-128:r54
-128:r55
-128:r56
-128:r57
-128:r58
-128:r59
-128:r60
-128:r61
-128:r62
-128:r63
-128:r64
-128:r65
-128:r66
-128:r67
-128:r68
-128:r69
-128:r70
-128:r71
-128:r72
-128:r73
-128:r74
-128:r75
-128:r76
-128:r77
-128:r78
-128:r79
-128:r80
-128:r81
-128:r82
-128:r83
-128:r84
-128:r85
-128:r86
-128:r87
-128:r88
-128:r89
-128:r90
-128:r91
-128:r92
-128:r93
-128:r94
-128:r95
-128:r96
-128:r97
-128:r98
-128:r99
-128:r100
-128:r101
-128:r102
-128:r103
-128:r104
-128:r105
-128:r106
-128:r107
-128:r108
-128:r109
-128:r110
-128:r111
-128:r112
-128:r113
-128:r114
-128:r115
-128:r116
-128:r117
-128:r118
-128:r119
-128:r120
-128:r121
-128:r122
-128:r123
-128:r124
-128:r125
-128:r126
-128:r127
-32:id
-32:npc
diff --git a/gdb/regformats/rs6000/powerpc-cell32l.dat b/gdb/regformats/rs6000/powerpc-cell32l.dat
deleted file mode 100644 (file)
index bd28505..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-# THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi :set ro:
-# Generated from: rs6000/powerpc-cell32l.xml
-name:powerpc_cell32l
-xmltarget:powerpc-cell32l.xml
-expedite:r1,pc,r0,orig_r3,r4
-32:r0
-32:r1
-32:r2
-32:r3
-32:r4
-32:r5
-32:r6
-32:r7
-32:r8
-32:r9
-32:r10
-32:r11
-32:r12
-32:r13
-32:r14
-32:r15
-32:r16
-32:r17
-32:r18
-32:r19
-32:r20
-32:r21
-32:r22
-32:r23
-32:r24
-32:r25
-32:r26
-32:r27
-32:r28
-32:r29
-32:r30
-32:r31
-64:f0
-64:f1
-64:f2
-64:f3
-64:f4
-64:f5
-64:f6
-64:f7
-64:f8
-64:f9
-64:f10
-64:f11
-64:f12
-64:f13
-64:f14
-64:f15
-64:f16
-64:f17
-64:f18
-64:f19
-64:f20
-64:f21
-64:f22
-64:f23
-64:f24
-64:f25
-64:f26
-64:f27
-64:f28
-64:f29
-64:f30
-64:f31
-32:pc
-32:msr
-32:cr
-32:lr
-32:ctr
-32:xer
-32:fpscr
-32:orig_r3
-32:trap
-128:vr0
-128:vr1
-128:vr2
-128:vr3
-128:vr4
-128:vr5
-128:vr6
-128:vr7
-128:vr8
-128:vr9
-128:vr10
-128:vr11
-128:vr12
-128:vr13
-128:vr14
-128:vr15
-128:vr16
-128:vr17
-128:vr18
-128:vr19
-128:vr20
-128:vr21
-128:vr22
-128:vr23
-128:vr24
-128:vr25
-128:vr26
-128:vr27
-128:vr28
-128:vr29
-128:vr30
-128:vr31
-32:vscr
-32:vrsave
diff --git a/gdb/regformats/rs6000/powerpc-cell64l.dat b/gdb/regformats/rs6000/powerpc-cell64l.dat
deleted file mode 100644 (file)
index b5b162e..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-# THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi :set ro:
-# Generated from: rs6000/powerpc-cell64l.xml
-name:powerpc_cell64l
-xmltarget:powerpc-cell64l.xml
-expedite:r1,pc,r0,orig_r3,r4
-64:r0
-64:r1
-64:r2
-64:r3
-64:r4
-64:r5
-64:r6
-64:r7
-64:r8
-64:r9
-64:r10
-64:r11
-64:r12
-64:r13
-64:r14
-64:r15
-64:r16
-64:r17
-64:r18
-64:r19
-64:r20
-64:r21
-64:r22
-64:r23
-64:r24
-64:r25
-64:r26
-64:r27
-64:r28
-64:r29
-64:r30
-64:r31
-64:f0
-64:f1
-64:f2
-64:f3
-64:f4
-64:f5
-64:f6
-64:f7
-64:f8
-64:f9
-64:f10
-64:f11
-64:f12
-64:f13
-64:f14
-64:f15
-64:f16
-64:f17
-64:f18
-64:f19
-64:f20
-64:f21
-64:f22
-64:f23
-64:f24
-64:f25
-64:f26
-64:f27
-64:f28
-64:f29
-64:f30
-64:f31
-64:pc
-64:msr
-32:cr
-64:lr
-64:ctr
-32:xer
-32:fpscr
-64:orig_r3
-64:trap
-128:vr0
-128:vr1
-128:vr2
-128:vr3
-128:vr4
-128:vr5
-128:vr6
-128:vr7
-128:vr8
-128:vr9
-128:vr10
-128:vr11
-128:vr12
-128:vr13
-128:vr14
-128:vr15
-128:vr16
-128:vr17
-128:vr18
-128:vr19
-128:vr20
-128:vr21
-128:vr22
-128:vr23
-128:vr24
-128:vr25
-128:vr26
-128:vr27
-128:vr28
-128:vr29
-128:vr30
-128:vr31
-32:vscr
-32:vrsave
index 980864e0707351f26d99f1d007ecda141782d238..21160e13acc4b57743c69f164810da74032daa62 100644 (file)
@@ -1970,8 +1970,6 @@ enum {
   PACKET_qXfer_libraries,
   PACKET_qXfer_libraries_svr4,
   PACKET_qXfer_memory_map,
-  PACKET_qXfer_spu_read,
-  PACKET_qXfer_spu_write,
   PACKET_qXfer_osdata,
   PACKET_qXfer_threads,
   PACKET_qXfer_statictrace_read,
@@ -5083,10 +5081,6 @@ static const struct protocol_feature remote_protocol_features[] = {
     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
     PACKET_qXfer_memory_map },
-  { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
-    PACKET_qXfer_spu_read },
-  { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
-    PACKET_qXfer_spu_write },
   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
     PACKET_qXfer_osdata },
   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
@@ -10858,19 +10852,6 @@ remote_target::xfer_partial (enum target_object object,
                                  xfered_len);
     }
 
-  /* Handle SPU memory using qxfer packets.  */
-  if (object == TARGET_OBJECT_SPU)
-    {
-      if (readbuf)
-       return remote_read_qxfer ("spu", annex, readbuf, offset, len,
-                                 xfered_len, &remote_protocol_packets
-                                 [PACKET_qXfer_spu_read]);
-      else
-       return remote_write_qxfer ("spu", annex, writebuf, offset, len,
-                                  xfered_len, &remote_protocol_packets
-                                  [PACKET_qXfer_spu_write]);
-    }
-
   /* Handle extra signal info using qxfer packets.  */
   if (object == TARGET_OBJECT_SIGNAL_INFO)
     {
@@ -14481,12 +14462,6 @@ Show the maximum size of the address (in bits) in a memory packet."), NULL,
   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
                         "qXfer:memory-map:read", "memory-map", 0);
 
-  add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
-                         "qXfer:spu:read", "read-spu-object", 0);
-
-  add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
-                         "qXfer:spu:write", "write-spu-object", 0);
-
   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
                         "qXfer:osdata:read", "osdata", 0);
 
index 47a232f6c6ad8e81655f222bb8aabe284cd87a9a..9123a3dc33ac88642d4525dd444fd85925c73ca2 100644 (file)
@@ -6141,16 +6141,6 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   int num_pseudoregs = 0;
   int cur_reg;
 
-  /* INFO may refer to a binary that is not of the PowerPC architecture,
-     e.g. when debugging a stand-alone SPE executable on a Cell/B.E. system.
-     In this case, we must not attempt to infer properties of the (PowerPC
-     side) of the target system from properties of that executable.  Trust
-     the target description instead.  */
-  if (info.abfd
-      && bfd_get_arch (info.abfd) != bfd_arch_powerpc
-      && bfd_get_arch (info.abfd) != bfd_arch_rs6000)
-    info.abfd = NULL;
-
   from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
     bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
 
diff --git a/gdb/solib-spu.c b/gdb/solib-spu.c
deleted file mode 100644 (file)
index 49e470a..0000000
+++ /dev/null
@@ -1,547 +0,0 @@
-/* Cell SPU GNU/Linux support -- shared library handling.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
-
-   Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "solib-spu.h"
-#include "gdbcore.h"
-#include <sys/stat.h>
-#include "arch-utils.h"
-#include "bfd.h"
-#include "symtab.h"
-#include "solib.h"
-#include "solib-svr4.h"
-#include "solist.h"
-#include "inferior.h"
-#include "objfiles.h"
-#include "observable.h"
-#include "breakpoint.h"
-#include "gdbthread.h"
-#include "gdb_bfd.h"
-
-#include "spu-tdep.h"
-
-/* Highest SPE id (file handle) the inferior may have.  */
-#define MAX_SPE_FD 1024
-
-/* Stand-alone SPE executable?  */
-#define spu_standalone_p() \
-  (symfile_objfile && symfile_objfile->obfd \
-   && bfd_get_arch (symfile_objfile->obfd) == bfd_arch_spu)
-
-
-/* Relocate main SPE executable.  */
-static void
-spu_relocate_main_executable (int spufs_fd)
-{
-  struct section_offsets *new_offsets;
-  int i;
-
-  if (symfile_objfile == NULL)
-    return;
-
-  new_offsets = XALLOCAVEC (struct section_offsets,
-                           symfile_objfile->num_sections);
-
-  for (i = 0; i < symfile_objfile->num_sections; i++)
-    new_offsets->offsets[i] = SPUADDR (spufs_fd, 0);
-
-  objfile_relocate (symfile_objfile, new_offsets);
-}
-
-/* When running a stand-alone SPE executable, we may need to skip one more
-   exec event on startup, to get past the binfmt_misc loader.  */
-static void
-spu_skip_standalone_loader (void)
-{
-  if (target_has_execution && !current_inferior ()->attach_flag)
-    {
-      struct target_waitstatus ws;
-
-      /* Only some kernels report an extra SIGTRAP with the binfmt_misc
-        loader; others do not.  In addition, if we have attached to an
-        already running inferior instead of starting a new one, we will
-        not see the extra SIGTRAP -- and we cannot readily distinguish
-        the two cases, in particular with the extended-remote target.
-
-        Thus we issue a single-step here.  If no extra SIGTRAP was pending,
-        this will step past the first instruction of the stand-alone SPE
-        executable loader, but we don't care about that.  */
-
-      inferior_thread ()->control.in_infcall = 1; /* Suppress MI messages.  */
-
-      target_resume (inferior_ptid, 1, GDB_SIGNAL_0);
-      target_wait (minus_one_ptid, &ws, 0);
-      set_executing (minus_one_ptid, 0);
-
-      inferior_thread ()->control.in_infcall = 0;
-    }
-}
-
-static objfile_key<CORE_ADDR, gdb::noop_deleter<CORE_ADDR>>
-  ocl_program_data_key;
-
-/* Appends OpenCL programs to the list of `struct so_list' objects.  */
-static void
-append_ocl_sos (struct so_list **link_ptr)
-{
-  CORE_ADDR *ocl_program_addr_base;
-
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      ocl_program_addr_base = ocl_program_data_key.get (objfile);
-      if (ocl_program_addr_base != NULL)
-        {
-         enum bfd_endian byte_order = bfd_big_endian (objfile->obfd)?
-                                        BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
-         try
-           {
-             CORE_ADDR data =
-               read_memory_unsigned_integer (*ocl_program_addr_base,
-                                             sizeof (CORE_ADDR),
-                                             byte_order);
-             if (data != 0x0)
-               {
-                 struct so_list *newobj;
-
-                 /* Allocate so_list structure.  */
-                 newobj = XCNEW (struct so_list);
-
-                 /* Encode FD and object ID in path name.  */
-                 xsnprintf (newobj->so_name, sizeof newobj->so_name, "@%s <%d>",
-                            hex_string (data),
-                            SPUADDR_SPU (*ocl_program_addr_base));
-                 strcpy (newobj->so_original_name, newobj->so_name);
-
-                 *link_ptr = newobj;
-                 link_ptr = &newobj->next;
-               }
-           }
-         catch (const gdb_exception &ex)
-           {
-             /* Ignore memory errors.  */
-             switch (ex.error)
-               {
-               case MEMORY_ERROR:
-                 break;
-               default:
-                 throw;
-                 break;
-               }
-           }
-       }
-    }
-}
-
-/* Build a list of `struct so_list' objects describing the shared
-   objects currently loaded in the inferior.  */
-static struct so_list *
-spu_current_sos (void)
-{
-  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
-  struct so_list *head;
-  struct so_list **link_ptr;
-
-  gdb_byte buf[MAX_SPE_FD * 4];
-  int i, size;
-
-  /* First, retrieve the SVR4 shared library list.  */
-  head = svr4_so_ops.current_sos ();
-
-  /* Append our libraries to the end of the list.  */
-  for (link_ptr = &head; *link_ptr; link_ptr = &(*link_ptr)->next)
-    ;
-
-  /* Determine list of SPU ids.  */
-  size = target_read (current_top_target (), TARGET_OBJECT_SPU, NULL,
-                     buf, 0, sizeof buf);
-
-  /* Do not add stand-alone SPE executable context as shared library,
-     but relocate main SPE executable objfile.  */
-  if (spu_standalone_p ())
-    {
-      if (size == 4)
-       {
-         int fd = extract_unsigned_integer (buf, 4, byte_order);
-
-         spu_relocate_main_executable (fd);
-
-         /* Re-enable breakpoints after main SPU context was established;
-            see also comments in spu_solib_create_inferior_hook.  */
-         enable_breakpoints_after_startup ();
-       }
-
-      return head;
-    }
-
-  /* Create an so_list entry for each SPU id.  */
-  for (i = 0; i < size; i += 4)
-    {
-      int fd = extract_unsigned_integer (buf + i, 4, byte_order);
-      struct so_list *newobj;
-
-      unsigned long long addr;
-      char annex[32], id[100];
-      int len;
-
-      /* Read object ID.  There's a race window where the inferior may have
-        already created the SPE context, but not installed the object-id
-        yet.  Skip such entries; we'll be back for them later.  */
-      xsnprintf (annex, sizeof annex, "%d/object-id", fd);
-      len = target_read (current_top_target (), TARGET_OBJECT_SPU, annex,
-                        (gdb_byte *) id, 0, sizeof id);
-      if (len <= 0 || len >= sizeof id)
-       continue;
-      id[len] = 0;
-      if (sscanf (id, "0x%llx", &addr) != 1 || !addr)
-       continue;
-
-      /* Allocate so_list structure.  */
-      newobj = XCNEW (struct so_list);
-
-      /* Encode FD and object ID in path name.  Choose the name so as not
-        to conflict with any (normal) SVR4 library path name.  */
-      xsnprintf (newobj->so_name, sizeof newobj->so_name, "@%s <%d>",
-                hex_string (addr), fd);
-      strcpy (newobj->so_original_name, newobj->so_name);
-
-      *link_ptr = newobj;
-      link_ptr = &newobj->next;
-    }
-
-  /* Append OpenCL sos.  */
-  append_ocl_sos (link_ptr);
-
-  return head;
-}
-
-/* Free so_list information.  */
-static void
-spu_free_so (struct so_list *so)
-{
-  if (so->so_original_name[0] != '@')
-    svr4_so_ops.free_so (so);
-}
-
-/* Relocate section addresses.  */
-static void
-spu_relocate_section_addresses (struct so_list *so,
-                               struct target_section *sec)
-{
-  if (so->so_original_name[0] != '@')
-    svr4_so_ops.relocate_section_addresses (so, sec);
-  else
-    {
-      unsigned long long addr;
-      int fd;
-
-      /* Set addr_low/high to just LS offset for display.  */
-      if (so->addr_low == 0 && so->addr_high == 0
-          && strcmp (sec->the_bfd_section->name, ".text") == 0)
-        {
-          so->addr_low = sec->addr;
-          so->addr_high = sec->endaddr;
-        }
-
-      /* Decode object ID.  */
-      if (sscanf (so->so_original_name, "@0x%llx <%d>", &addr, &fd) != 2)
-       internal_error (__FILE__, __LINE__, "bad object ID");
-
-      sec->addr = SPUADDR (fd, sec->addr);
-      sec->endaddr = SPUADDR (fd, sec->endaddr);
-    }
-}
-
-
-/* Inferior memory should contain an SPE executable image at location ADDR.
-   Allocate a BFD representing that executable.  Return NULL on error.  */
-
-static void *
-spu_bfd_iovec_open (bfd *nbfd, void *open_closure)
-{
-  return open_closure;
-}
-
-static int
-spu_bfd_iovec_close (bfd *nbfd, void *stream)
-{
-  xfree (stream);
-
-  /* Zero means success.  */
-  return 0;
-}
-
-static file_ptr
-spu_bfd_iovec_pread (bfd *abfd, void *stream, void *buf,
-                     file_ptr nbytes, file_ptr offset)
-{
-  CORE_ADDR addr = *(CORE_ADDR *)stream;
-  int ret;
-
-  ret = target_read_memory (addr + offset, (gdb_byte *) buf, nbytes);
-  if (ret != 0)
-    {
-      bfd_set_error (bfd_error_invalid_operation);
-      return -1;
-    }
-
-  return nbytes;
-}
-
-static int
-spu_bfd_iovec_stat (bfd *abfd, void *stream, struct stat *sb)
-{
-  /* We don't have an easy way of finding the size of embedded spu
-     images.  We could parse the in-memory ELF header and section
-     table to find the extent of the last section but that seems
-     pointless when the size is needed only for checks of other
-     parsed values in dbxread.c.  */
-  memset (sb, 0, sizeof (struct stat));
-  sb->st_size = INT_MAX;
-  return 0;
-}
-
-static gdb_bfd_ref_ptr
-spu_bfd_fopen (const char *name, CORE_ADDR addr)
-{
-  CORE_ADDR *open_closure = XNEW (CORE_ADDR);
-
-  *open_closure = addr;
-
-  gdb_bfd_ref_ptr nbfd (gdb_bfd_openr_iovec (name, "elf32-spu",
-                                            spu_bfd_iovec_open, open_closure,
-                                            spu_bfd_iovec_pread,
-                                            spu_bfd_iovec_close,
-                                            spu_bfd_iovec_stat));
-  if (nbfd == NULL)
-    return NULL;
-
-  if (!bfd_check_format (nbfd.get (), bfd_object))
-    return NULL;
-
-  return nbfd;
-}
-
-/* Open shared library BFD.  */
-static gdb_bfd_ref_ptr
-spu_bfd_open (const char *pathname)
-{
-  const char *original_name = strrchr (pathname, '@');
-  asection *spu_name;
-  unsigned long long addr;
-  int fd;
-
-  /* Handle regular SVR4 libraries.  */
-  if (!original_name)
-    return svr4_so_ops.bfd_open (pathname);
-
-  /* Decode object ID.  */
-  if (sscanf (original_name, "@0x%llx <%d>", &addr, &fd) != 2)
-    internal_error (__FILE__, __LINE__, "bad object ID");
-
-  /* Open BFD representing SPE executable.  */
-  gdb_bfd_ref_ptr abfd (spu_bfd_fopen (original_name, (CORE_ADDR) addr));
-  if (abfd == NULL)
-    error (_("Cannot read SPE executable at %s"), original_name);
-
-  /* Retrieve SPU name note.  */
-  spu_name = bfd_get_section_by_name (abfd.get (), ".note.spu_name");
-  if (spu_name)
-    {
-      int sect_size = bfd_section_size (spu_name);
-
-      if (sect_size > 20)
-       {
-         char *buf
-           = (char *) alloca (sect_size - 20 + strlen (original_name) + 1);
-
-         bfd_get_section_contents (abfd.get (), spu_name, buf, 20,
-                                   sect_size - 20);
-         buf[sect_size - 20] = '\0';
-
-         strcat (buf, original_name);
-
-         bfd_set_filename (abfd.get (), xstrdup (buf));
-       }
-    }
-
-  return abfd;
-}
-
-/* Lookup global symbol in a SPE executable.  */
-static struct block_symbol
-spu_lookup_lib_symbol (struct objfile *objfile,
-                      const char *name,
-                      const domain_enum domain)
-{
-  if (bfd_get_arch (objfile->obfd) == bfd_arch_spu)
-    return lookup_global_symbol_from_objfile (objfile, GLOBAL_BLOCK, name,
-                                             domain);
-
-  if (svr4_so_ops.lookup_lib_global_symbol != NULL)
-    return svr4_so_ops.lookup_lib_global_symbol (objfile, name, domain);
-  return {};
-}
-
-/* Enable shared library breakpoint.  */
-static int
-spu_enable_break (struct objfile *objfile)
-{
-  struct bound_minimal_symbol spe_event_sym;
-
-  /* The libspe library will call __spe_context_update_event whenever any
-     SPE context is allocated or destroyed.  */
-  spe_event_sym = lookup_minimal_symbol ("__spe_context_update_event",
-                                        NULL, objfile);
-
-  /* Place a solib_event breakpoint on the symbol.  */
-  if (spe_event_sym.minsym)
-    {
-      CORE_ADDR addr = BMSYMBOL_VALUE_ADDRESS (spe_event_sym);
-
-      addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (), addr,
-                                                current_top_target ());
-      create_solib_event_breakpoint (target_gdbarch (), addr);
-      return 1;
-    }
-
-  return 0;
-}
-
-/* Enable shared library breakpoint for the
-   OpenCL runtime running on the SPU.  */
-static void
-ocl_enable_break (struct objfile *objfile)
-{
-  struct bound_minimal_symbol event_sym;
-  struct bound_minimal_symbol addr_sym;
-
-  /* The OpenCL runtime on the SPU will call __opencl_program_update_event
-     whenever an OpenCL program is loaded.  */
-  event_sym = lookup_minimal_symbol ("__opencl_program_update_event", NULL,
-                                    objfile);
-  /* The PPU address of the OpenCL program can be found
-     at opencl_elf_image_address.  */
-  addr_sym = lookup_minimal_symbol ("opencl_elf_image_address", NULL, objfile);
-
-  if (event_sym.minsym && addr_sym.minsym)
-    {
-      /* Place a solib_event breakpoint on the symbol.  */
-      CORE_ADDR event_addr = BMSYMBOL_VALUE_ADDRESS (event_sym);
-      create_solib_event_breakpoint (get_objfile_arch (objfile), event_addr);
-
-      /* Store the address of the symbol that will point to OpenCL program
-         using the per-objfile private data mechanism.  */
-      if (ocl_program_data_key.get (objfile) == NULL)
-        {
-          CORE_ADDR *ocl_program_addr_base = OBSTACK_CALLOC (
-                 &objfile->objfile_obstack,
-                 objfile->sections_end - objfile->sections,
-                 CORE_ADDR);
-         *ocl_program_addr_base = BMSYMBOL_VALUE_ADDRESS (addr_sym);
-         ocl_program_data_key.set (objfile, ocl_program_addr_base);
-        }
-    }
-}
-
-/* Create inferior hook.  */
-static void
-spu_solib_create_inferior_hook (int from_tty)
-{
-  /* Handle SPE stand-alone executables.  */
-  if (spu_standalone_p ())
-    {
-      /* After an SPE stand-alone executable was loaded, we'll receive
-        an additional trap due to the binfmt_misc handler.  Make sure
-        to skip that trap.  */
-      spu_skip_standalone_loader ();
-
-      /* If the user established breakpoints before starting the inferior, GDB
-        would attempt to insert those now.  This would fail because the SPU
-        context has not yet been created and the SPU executable has not yet
-        been loaded.  To prevent such failures, we disable all user-created
-        breakpoints now; they will be re-enabled in spu_current_sos once the
-        main SPU context has been detected.  */
-      disable_breakpoints_before_startup ();
-
-      /* A special case arises when re-starting an executable, because at
-        this point it still resides at the relocated address range that was
-        determined during its last execution.  We need to undo the relocation
-        so that that multi-architecture target recognizes the stand-alone
-        initialization special case.  */
-      spu_relocate_main_executable (-1);
-    }
-
-  /* Call SVR4 hook -- this will re-insert the SVR4 solib breakpoints.  */
-  svr4_so_ops.solib_create_inferior_hook (from_tty);
-
-  /* If the inferior is statically linked against libspe, we need to install
-     our own solib breakpoint right now.  Otherwise, it will be installed by
-     the solib_loaded observer below as soon as libspe is loaded.  */
-  spu_enable_break (NULL);
-}
-
-/* Install SPE "shared library" handling.  This is called by -tdep code
-   that wants to support SPU as a secondary architecture.  */
-void
-set_spu_solib_ops (struct gdbarch *gdbarch)
-{
-  static struct target_so_ops spu_so_ops;
-
-  /* Initialize this lazily, to avoid an initialization order
-     dependency on solib-svr4.c's _initialize routine.  */
-  if (spu_so_ops.current_sos == NULL)
-    {
-      spu_so_ops = svr4_so_ops;
-      spu_so_ops.solib_create_inferior_hook = spu_solib_create_inferior_hook;
-      spu_so_ops.relocate_section_addresses = spu_relocate_section_addresses;
-      spu_so_ops.free_so = spu_free_so;
-      spu_so_ops.current_sos = spu_current_sos;
-      spu_so_ops.bfd_open = spu_bfd_open;
-      spu_so_ops.lookup_lib_global_symbol = spu_lookup_lib_symbol;
-    }
-
-  set_solib_ops (gdbarch, &spu_so_ops);
-}
-
-/* Observer for the solib_loaded event.  Used to install our breakpoint
-   if libspe is a shared library.  */
-static void
-spu_solib_loaded (struct so_list *so)
-{
-  if (strstr (so->so_original_name, "/libspe") != NULL)
-    {
-      solib_read_symbols (so, 0);
-      spu_enable_break (so->objfile);
-    }
-  /* In case the OpenCL runtime is loaded we install a breakpoint
-     to get notified whenever an OpenCL program gets loaded.  */
-  if (strstr (so->so_name, "CLRuntimeAccelCellSPU@") != NULL)
-    {
-      solib_read_symbols (so, 0);
-      ocl_enable_break (so->objfile);
-    }
-}
-
-void
-_initialize_spu_solib (void)
-{
-  gdb::observers::solib_loaded.attach (spu_solib_loaded);
-}
-
diff --git a/gdb/solib-spu.h b/gdb/solib-spu.h
deleted file mode 100644 (file)
index a7a6533..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Cell SPU GNU/Linux support -- shared library handling.
-
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef SOLIB_SPU_H
-#define SOLIB_SPU_H
-
-extern void set_spu_solib_ops (struct gdbarch *gdbarch);
-
-#endif
diff --git a/gdb/spu-linux-nat.c b/gdb/spu-linux-nat.c
deleted file mode 100644 (file)
index 635366b..0000000
+++ /dev/null
@@ -1,661 +0,0 @@
-/* SPU native-dependent code for GDB, the GNU debugger.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
-
-   Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "gdbcore.h"
-#include "target.h"
-#include "inferior.h"
-#include "inf-child.h"
-#include "inf-ptrace.h"
-#include "regcache.h"
-#include "symfile.h"
-#include "gdbsupport/gdb_wait.h"
-#include "gdbthread.h"
-#include "gdb_bfd.h"
-
-#include "nat/gdb_ptrace.h"
-#include <asm/ptrace.h>
-#include <sys/types.h>
-
-#include "spu-tdep.h"
-
-/* PPU side system calls.  */
-#define INSTR_SC       0x44000002
-#define NR_spu_run     0x0116
-
-class spu_linux_nat_target final : public inf_ptrace_target
-{
-public:
-  void fetch_registers (struct regcache *regcache, int regnum) override;
-  void store_registers (struct regcache *regcache, int regnum) override;
-
-  void post_attach (int) override;
-  void post_startup_inferior (ptid_t) override;
-
-  ptid_t wait (ptid_t, struct target_waitstatus *, int options) override;
-
-  enum target_xfer_status xfer_partial (enum target_object object,
-                                       const char *annex,
-                                       gdb_byte *readbuf,
-                                       const gdb_byte *writebuf,
-                                       ULONGEST offset, ULONGEST len,
-                                       ULONGEST *xfered_len) override;
-
-  int can_use_hw_breakpoint (enum bptype, int, int) override;
-};
-
-static spu_linux_nat_target the_spu_linux_nat_target;
-
-/* Fetch PPU register REGNO.  */
-static ULONGEST
-fetch_ppc_register (int regno)
-{
-  PTRACE_TYPE_RET res;
-
-  int tid = inferior_ptid.lwp ();
-  if (tid == 0)
-    tid = inferior_ptid.pid ();
-
-#ifndef __powerpc64__
-  /* If running as a 32-bit process on a 64-bit system, we attempt
-     to get the full 64-bit register content of the target process.
-     If the PPC special ptrace call fails, we're on a 32-bit system;
-     just fall through to the regular ptrace call in that case.  */
-  {
-    gdb_byte buf[8];
-
-    errno = 0;
-    ptrace (PPC_PTRACE_PEEKUSR_3264, tid,
-           (PTRACE_TYPE_ARG3) (regno * 8), buf);
-    if (errno == 0)
-      ptrace (PPC_PTRACE_PEEKUSR_3264, tid,
-             (PTRACE_TYPE_ARG3) (regno * 8 + 4), buf + 4);
-    if (errno == 0)
-      return (ULONGEST) *(uint64_t *)buf;
-  }
-#endif
-
-  errno = 0;
-  res = ptrace (PT_READ_U, tid,
-               (PTRACE_TYPE_ARG3) (regno * sizeof (PTRACE_TYPE_RET)), 0);
-  if (errno != 0)
-    {
-      char mess[128];
-      xsnprintf (mess, sizeof mess, "reading PPC register #%d", regno);
-      perror_with_name (_(mess));
-    }
-
-  return (ULONGEST) (unsigned long) res;
-}
-
-/* Fetch WORD from PPU memory at (aligned) MEMADDR in thread TID.  */
-static int
-fetch_ppc_memory_1 (int tid, ULONGEST memaddr, PTRACE_TYPE_RET *word)
-{
-  errno = 0;
-
-#ifndef __powerpc64__
-  if (memaddr >> 32)
-    {
-      uint64_t addr_8 = (uint64_t) memaddr;
-      ptrace (PPC_PTRACE_PEEKTEXT_3264, tid, (PTRACE_TYPE_ARG3) &addr_8, word);
-    }
-  else
-#endif
-    *word = ptrace (PT_READ_I, tid, (PTRACE_TYPE_ARG3) (size_t) memaddr, 0);
-
-  return errno;
-}
-
-/* Store WORD into PPU memory at (aligned) MEMADDR in thread TID.  */
-static int
-store_ppc_memory_1 (int tid, ULONGEST memaddr, PTRACE_TYPE_RET word)
-{
-  errno = 0;
-
-#ifndef __powerpc64__
-  if (memaddr >> 32)
-    {
-      uint64_t addr_8 = (uint64_t) memaddr;
-      ptrace (PPC_PTRACE_POKEDATA_3264, tid, (PTRACE_TYPE_ARG3) &addr_8, word);
-    }
-  else
-#endif
-    ptrace (PT_WRITE_D, tid, (PTRACE_TYPE_ARG3) (size_t) memaddr, word);
-
-  return errno;
-}
-
-/* Fetch LEN bytes of PPU memory at MEMADDR to MYADDR.  */
-static int
-fetch_ppc_memory (ULONGEST memaddr, gdb_byte *myaddr, int len)
-{
-  int i, ret;
-
-  ULONGEST addr = memaddr & -(ULONGEST) sizeof (PTRACE_TYPE_RET);
-  int count = ((((memaddr + len) - addr) + sizeof (PTRACE_TYPE_RET) - 1)
-              / sizeof (PTRACE_TYPE_RET));
-  PTRACE_TYPE_RET *buffer;
-
-  int tid = inferior_ptid.lwp ();
-  if (tid == 0)
-    tid = inferior_ptid.pid ();
-
-  buffer = (PTRACE_TYPE_RET *) alloca (count * sizeof (PTRACE_TYPE_RET));
-  for (i = 0; i < count; i++, addr += sizeof (PTRACE_TYPE_RET))
-    {
-      ret = fetch_ppc_memory_1 (tid, addr, &buffer[i]);
-      if (ret)
-       return ret;
-    }
-
-  memcpy (myaddr,
-         (char *) buffer + (memaddr & (sizeof (PTRACE_TYPE_RET) - 1)),
-         len);
-
-  return 0;
-}
-
-/* Store LEN bytes from MYADDR to PPU memory at MEMADDR.  */
-static int
-store_ppc_memory (ULONGEST memaddr, const gdb_byte *myaddr, int len)
-{
-  int i, ret;
-
-  ULONGEST addr = memaddr & -(ULONGEST) sizeof (PTRACE_TYPE_RET);
-  int count = ((((memaddr + len) - addr) + sizeof (PTRACE_TYPE_RET) - 1)
-              / sizeof (PTRACE_TYPE_RET));
-  PTRACE_TYPE_RET *buffer;
-
-  int tid = inferior_ptid.lwp ();
-  if (tid == 0)
-    tid = inferior_ptid.pid ();
-
-  buffer = (PTRACE_TYPE_RET *) alloca (count * sizeof (PTRACE_TYPE_RET));
-
-  if (addr != memaddr || len < (int) sizeof (PTRACE_TYPE_RET))
-    {
-      ret = fetch_ppc_memory_1 (tid, addr, &buffer[0]);
-      if (ret)
-       return ret;
-    }
-
-  if (count > 1)
-    {
-      ret = fetch_ppc_memory_1 (tid, addr + (count - 1)
-                                              * sizeof (PTRACE_TYPE_RET),
-                               &buffer[count - 1]);
-      if (ret)
-       return ret;
-    }
-
-  memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_TYPE_RET) - 1)),
-          myaddr, len);
-
-  for (i = 0; i < count; i++, addr += sizeof (PTRACE_TYPE_RET))
-    {
-      ret = store_ppc_memory_1 (tid, addr, buffer[i]);
-      if (ret)
-       return ret;
-    }
-
-  return 0;
-}
-
-
-/* If the PPU thread is currently stopped on a spu_run system call,
-   return to FD and ADDR the file handle and NPC parameter address
-   used with the system call.  Return non-zero if successful.  */
-static int 
-parse_spufs_run (int *fd, ULONGEST *addr)
-{
-  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
-  gdb_byte buf[4];
-  ULONGEST pc = fetch_ppc_register (32);  /* nip */
-
-  /* Fetch instruction preceding current NIP.  */
-  if (fetch_ppc_memory (pc-4, buf, 4) != 0)
-    return 0;
-  /* It should be a "sc" instruction.  */
-  if (extract_unsigned_integer (buf, 4, byte_order) != INSTR_SC)
-    return 0;
-  /* System call number should be NR_spu_run.  */
-  if (fetch_ppc_register (0) != NR_spu_run)
-    return 0;
-
-  /* Register 3 contains fd, register 4 the NPC param pointer.  */
-  *fd = fetch_ppc_register (34);  /* orig_gpr3 */
-  *addr = fetch_ppc_register (4);
-  return 1;
-}
-
-
-/* Implement the to_xfer_partial target_ops method for TARGET_OBJECT_SPU.
-   Copy LEN bytes at OFFSET in spufs file ANNEX into/from READBUF or WRITEBUF,
-   using the /proc file system.  */
-
-static enum target_xfer_status
-spu_proc_xfer_spu (const char *annex, gdb_byte *readbuf,
-                  const gdb_byte *writebuf,
-                  ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
-{
-  char buf[128];
-  int fd = 0;
-  int ret = -1;
-  int pid = inferior_ptid.pid ();
-
-  if (!annex)
-    return TARGET_XFER_EOF;
-
-  xsnprintf (buf, sizeof buf, "/proc/%d/fd/%s", pid, annex);
-  fd = open (buf, writebuf? O_WRONLY : O_RDONLY);
-  if (fd <= 0)
-    return TARGET_XFER_E_IO;
-
-  if (offset != 0
-      && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
-    {
-      close (fd);
-      return TARGET_XFER_EOF;
-    }
-
-  if (writebuf)
-    ret = write (fd, writebuf, (size_t) len);
-  else if (readbuf)
-    ret = read (fd, readbuf, (size_t) len);
-
-  close (fd);
-  if (ret < 0)
-    return TARGET_XFER_E_IO;
-  else if (ret == 0)
-    return TARGET_XFER_EOF;
-  else
-    {
-      *xfered_len = (ULONGEST) ret;
-      return TARGET_XFER_OK;
-    }
-}
-
-
-/* Inferior memory should contain an SPE executable image at location ADDR.
-   Allocate a BFD representing that executable.  Return NULL on error.  */
-
-static void *
-spu_bfd_iovec_open (struct bfd *nbfd, void *open_closure)
-{
-  return open_closure;
-}
-
-static int
-spu_bfd_iovec_close (struct bfd *nbfd, void *stream)
-{
-  xfree (stream);
-
-  /* Zero means success.  */
-  return 0;
-}
-
-static file_ptr
-spu_bfd_iovec_pread (struct bfd *abfd, void *stream, void *buf,
-                    file_ptr nbytes, file_ptr offset)
-{
-  ULONGEST addr = *(ULONGEST *)stream;
-
-  if (fetch_ppc_memory (addr + offset, (gdb_byte *)buf, nbytes) != 0)
-    {
-      bfd_set_error (bfd_error_invalid_operation);
-      return -1;
-    }
-
-  return nbytes;
-}
-
-static int
-spu_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
-{
-  /* We don't have an easy way of finding the size of embedded spu
-     images.  We could parse the in-memory ELF header and section
-     table to find the extent of the last section but that seems
-     pointless when the size is needed only for checks of other
-     parsed values in dbxread.c.  */
-  memset (sb, 0, sizeof (struct stat));
-  sb->st_size = INT_MAX;
-  return 0;
-}
-
-static gdb_bfd_ref_ptr
-spu_bfd_open (ULONGEST addr)
-{
-  asection *spu_name;
-
-  ULONGEST *open_closure = XNEW (ULONGEST);
-  *open_closure = addr;
-
-  gdb_bfd_ref_ptr nbfd (gdb_bfd_openr_iovec ("<in-memory>", "elf32-spu",
-                                            spu_bfd_iovec_open, open_closure,
-                                            spu_bfd_iovec_pread,
-                                            spu_bfd_iovec_close,
-                                            spu_bfd_iovec_stat));
-  if (nbfd == NULL)
-    return NULL;
-
-  if (!bfd_check_format (nbfd.get (), bfd_object))
-    return NULL;
-
-  /* Retrieve SPU name note and update BFD name.  */
-  spu_name = bfd_get_section_by_name (nbfd.get (), ".note.spu_name");
-  if (spu_name)
-    {
-      int sect_size = bfd_section_size (spu_name);
-      if (sect_size > 20)
-       {
-         char *buf = (char *)alloca (sect_size - 20 + 1);
-         bfd_get_section_contents (nbfd.get (), spu_name, buf, 20,
-                                   sect_size - 20);
-         buf[sect_size - 20] = '\0';
-
-         bfd_set_filename (nbfd.get (), xstrdup (buf));
-       }
-    }
-
-  return nbfd;
-}
-
-/* INFERIOR_FD is a file handle passed by the inferior to the
-   spu_run system call.  Assuming the SPE context was allocated
-   by the libspe library, try to retrieve the main SPE executable
-   file from its copy within the target process.  */
-static void
-spu_symbol_file_add_from_memory (int inferior_fd)
-{
-  ULONGEST addr;
-
-  gdb_byte id[128];
-  char annex[32];
-  ULONGEST len;
-  enum target_xfer_status status;
-
-  /* Read object ID.  */
-  xsnprintf (annex, sizeof annex, "%d/object-id", inferior_fd);
-  status = spu_proc_xfer_spu (annex, id, NULL, 0, sizeof id, &len);
-  if (status != TARGET_XFER_OK || len >= sizeof id)
-    return;
-  id[len] = 0;
-  addr = strtoulst ((const char *) id, NULL, 16);
-  if (!addr)
-    return;
-
-  /* Open BFD representing SPE executable and read its symbols.  */
-  gdb_bfd_ref_ptr nbfd (spu_bfd_open (addr));
-  if (nbfd != NULL)
-    {
-      symbol_file_add_from_bfd (nbfd.get (), bfd_get_filename (nbfd),
-                               SYMFILE_VERBOSE | SYMFILE_MAINLINE,
-                               NULL, 0, NULL);
-    }
-}
-
-
-/* Override the post_startup_inferior routine to continue running
-   the inferior until the first spu_run system call.  */
-void
-spu_linux_nat_target::post_startup_inferior (ptid_t ptid)
-{
-  int fd;
-  ULONGEST addr;
-
-  int tid = ptid.lwp ();
-  if (tid == 0)
-    tid = ptid.pid ();
-  
-  while (!parse_spufs_run (&fd, &addr))
-    {
-      ptrace (PT_SYSCALL, tid, (PTRACE_TYPE_ARG3) 0, 0);
-      waitpid (tid, NULL, __WALL | __WNOTHREAD);
-    }
-}
-
-/* Override the post_attach routine to try load the SPE executable
-   file image from its copy inside the target process.  */
-void
-spu_linux_nat_target::post_attach (int pid)
-{
-  int fd;
-  ULONGEST addr;
-
-  /* Like child_post_startup_inferior, if we happened to attach to
-     the inferior while it wasn't currently in spu_run, continue 
-     running it until we get back there.  */
-  while (!parse_spufs_run (&fd, &addr))
-    {
-      ptrace (PT_SYSCALL, pid, (PTRACE_TYPE_ARG3) 0, 0);
-      waitpid (pid, NULL, __WALL | __WNOTHREAD);
-    }
-
-  /* If the user has not provided an executable file, try to extract
-     the image from inside the target process.  */
-  if (!get_exec_file (0))
-    spu_symbol_file_add_from_memory (fd);
-}
-
-/* Wait for child PTID to do something.  Return id of the child,
-   minus_one_ptid in case of error; store status into *OURSTATUS.  */
-ptid_t
-spu_linux_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
-                           int options)
-{
-  int save_errno;
-  int status;
-  pid_t pid;
-
-  do
-    {
-      set_sigint_trap ();      /* Causes SIGINT to be passed on to the
-                                  attached process.  */
-
-      pid = waitpid (ptid.pid (), &status, 0);
-      if (pid == -1 && errno == ECHILD)
-       /* Try again with __WCLONE to check cloned processes.  */
-       pid = waitpid (ptid.pid (), &status, __WCLONE);
-
-      save_errno = errno;
-
-      /* Make sure we don't report an event for the exit of the
-         original program, if we've detached from it.  */
-      if (pid != -1 && !WIFSTOPPED (status)
-         && pid != inferior_ptid.pid ())
-       {
-         pid = -1;
-         save_errno = EINTR;
-       }
-
-      clear_sigint_trap ();
-    }
-  while (pid == -1 && save_errno == EINTR);
-
-  if (pid == -1)
-    {
-      warning (_("Child process unexpectedly missing: %s"),
-              safe_strerror (save_errno));
-
-      /* Claim it exited with unknown signal.  */
-      ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
-      ourstatus->value.sig = GDB_SIGNAL_UNKNOWN;
-      return inferior_ptid;
-    }
-
-  store_waitstatus (ourstatus, status);
-  return ptid_t (pid);
-}
-
-/* Override the fetch_inferior_register routine.  */
-void
-spu_linux_nat_target::fetch_registers (struct regcache *regcache, int regno)
-{
-  int fd;
-  ULONGEST addr;
-
-  /* Since we use functions that rely on inferior_ptid, we need to set and
-     restore it.  */
-  scoped_restore save_ptid
-    = make_scoped_restore (&inferior_ptid, regcache->ptid ());
-
-  /* We must be stopped on a spu_run system call.  */
-  if (!parse_spufs_run (&fd, &addr))
-    return;
-
-  /* The ID register holds the spufs file handle.  */
-  if (regno == -1 || regno == SPU_ID_REGNUM)
-    {
-      struct gdbarch *gdbarch = regcache->arch ();
-      enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-      gdb_byte buf[4];
-      store_unsigned_integer (buf, 4, byte_order, fd);
-      regcache->raw_supply (SPU_ID_REGNUM, buf);
-    }
-
-  /* The NPC register is found at ADDR.  */
-  if (regno == -1 || regno == SPU_PC_REGNUM)
-    {
-      gdb_byte buf[4];
-      if (fetch_ppc_memory (addr, buf, 4) == 0)
-       regcache->raw_supply (SPU_PC_REGNUM, buf);
-    }
-
-  /* The GPRs are found in the "regs" spufs file.  */
-  if (regno == -1 || (regno >= 0 && regno < SPU_NUM_GPRS))
-    {
-      gdb_byte buf[16 * SPU_NUM_GPRS];
-      char annex[32];
-      int i;
-      ULONGEST len;
-
-      xsnprintf (annex, sizeof annex, "%d/regs", fd);
-      if ((spu_proc_xfer_spu (annex, buf, NULL, 0, sizeof buf, &len)
-          == TARGET_XFER_OK)
-         && len == sizeof buf)
-       for (i = 0; i < SPU_NUM_GPRS; i++)
-         regcache->raw_supply (i, buf + i*16);
-    }
-}
-
-/* Override the store_inferior_register routine.  */
-void
-spu_linux_nat_target::store_registers (struct regcache *regcache, int regno)
-{
-  int fd;
-  ULONGEST addr;
-
-  /* Since we use functions that rely on inferior_ptid, we need to set and
-     restore it.  */
-  scoped_restore save_ptid
-    = make_scoped_restore (&inferior_ptid, regcache->ptid ());
-
-  /* We must be stopped on a spu_run system call.  */
-  if (!parse_spufs_run (&fd, &addr))
-    return;
-
-  /* The NPC register is found at ADDR.  */
-  if (regno == -1 || regno == SPU_PC_REGNUM)
-    {
-      gdb_byte buf[4];
-      regcache->raw_collect (SPU_PC_REGNUM, buf);
-      store_ppc_memory (addr, buf, 4);
-    }
-
-  /* The GPRs are found in the "regs" spufs file.  */
-  if (regno == -1 || (regno >= 0 && regno < SPU_NUM_GPRS))
-    {
-      gdb_byte buf[16 * SPU_NUM_GPRS];
-      char annex[32];
-      int i;
-      ULONGEST len;
-
-      for (i = 0; i < SPU_NUM_GPRS; i++)
-       regcache->raw_collect (i, buf + i*16);
-
-      xsnprintf (annex, sizeof annex, "%d/regs", fd);
-      spu_proc_xfer_spu (annex, NULL, buf, 0, sizeof buf, &len);
-    }
-}
-
-/* Override the to_xfer_partial routine.  */
-enum target_xfer_status
-spu_linux_nat_target::xfer_partial (enum target_object object, const char *annex,
-                                   gdb_byte *readbuf, const gdb_byte *writebuf,
-                                   ULONGEST offset, ULONGEST len,
-                                   ULONGEST *xfered_len)
-{
-  if (object == TARGET_OBJECT_SPU)
-    return spu_proc_xfer_spu (annex, readbuf, writebuf, offset, len,
-                             xfered_len);
-
-  if (object == TARGET_OBJECT_MEMORY)
-    {
-      int fd;
-      ULONGEST addr;
-      char mem_annex[32], lslr_annex[32];
-      gdb_byte buf[32];
-      ULONGEST lslr;
-      enum target_xfer_status ret;
-
-      /* We must be stopped on a spu_run system call.  */
-      if (!parse_spufs_run (&fd, &addr))
-       return TARGET_XFER_EOF;
-
-      /* Use the "mem" spufs file to access SPU local store.  */
-      xsnprintf (mem_annex, sizeof mem_annex, "%d/mem", fd);
-      ret = spu_proc_xfer_spu (mem_annex, readbuf, writebuf, offset, len,
-                              xfered_len);
-      if (ret == TARGET_XFER_OK)
-       return ret;
-
-      /* SPU local store access wraps the address around at the
-        local store limit.  We emulate this here.  To avoid needing
-        an extra access to retrieve the LSLR, we only do that after
-        trying the original address first, and getting end-of-file.  */
-      xsnprintf (lslr_annex, sizeof lslr_annex, "%d/lslr", fd);
-      memset (buf, 0, sizeof buf);
-      if (spu_proc_xfer_spu (lslr_annex, buf, NULL, 0, sizeof buf, xfered_len)
-         != TARGET_XFER_OK)
-       return ret;
-
-      lslr = strtoulst ((const char *) buf, NULL, 16);
-      return spu_proc_xfer_spu (mem_annex, readbuf, writebuf,
-                               offset & lslr, len, xfered_len);
-    }
-
-  return TARGET_XFER_E_IO;
-}
-
-/* Override the to_can_use_hw_breakpoint routine.  */
-int
-spu_linux_nat_target::can_use_hw_breakpoint (enum bptype type,
-                                            int cnt, int othertype)
-{
-  return 0;
-}
-
-/* Initialize SPU native target.  */
-void 
-_initialize_spu_nat (void)
-{
-  add_inf_child_target (&the_spu_linux_nat_target);
-}
diff --git a/gdb/spu-multiarch.c b/gdb/spu-multiarch.c
deleted file mode 100644 (file)
index 88ad291..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-/* Cell SPU GNU/Linux multi-architecture debugging support.
-   Copyright (C) 2009-2019 Free Software Foundation, Inc.
-
-   Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "gdbcore.h"
-#include "gdbcmd.h"
-#include "arch-utils.h"
-#include "observable.h"
-#include "inferior.h"
-#include "regcache.h"
-#include "symfile.h"
-#include "objfiles.h"
-#include "solib.h"
-#include "solist.h"
-
-#include "ppc-tdep.h"
-#include "ppc-linux-tdep.h"
-#include "spu-tdep.h"
-
-/* The SPU multi-architecture support target.  */
-
-static const target_info spu_multiarch_target_info = {
-  "spu",
-  N_("SPU multi-architecture support."),
-  N_("SPU multi-architecture support.")
-};
-
-struct spu_multiarch_target final : public target_ops
-{
-  const target_info &info () const override
-  { return spu_multiarch_target_info; }
-
-  strata stratum () const override { return arch_stratum; }
-
-  void mourn_inferior () override;
-
-  void fetch_registers (struct regcache *, int) override;
-  void store_registers (struct regcache *, int) override;
-
-  enum target_xfer_status xfer_partial (enum target_object object,
-                                       const char *annex,
-                                       gdb_byte *readbuf,
-                                       const gdb_byte *writebuf,
-                                       ULONGEST offset, ULONGEST len,
-                                       ULONGEST *xfered_len) override;
-
-  int search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
-                    const gdb_byte *pattern, ULONGEST pattern_len,
-                    CORE_ADDR *found_addrp) override;
-
-  int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
-
-  struct gdbarch *thread_architecture (ptid_t) override;
-};
-
-static spu_multiarch_target spu_ops;
-
-/* Number of SPE objects loaded into the current inferior.  */
-static int spu_nr_solib;
-
-/* Stand-alone SPE executable?  */
-#define spu_standalone_p() \
-  (symfile_objfile && symfile_objfile->obfd \
-   && bfd_get_arch (symfile_objfile->obfd) == bfd_arch_spu)
-
-/* PPU side system calls.  */
-#define INSTR_SC       0x44000002
-#define NR_spu_run     0x0116
-
-/* If the PPU thread is currently stopped on a spu_run system call,
-   return to FD and ADDR the file handle and NPC parameter address
-   used with the system call.  Return non-zero if successful.  */
-static int
-parse_spufs_run (ptid_t ptid, int *fd, CORE_ADDR *addr)
-{
-  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
-  struct gdbarch_tdep *tdep;
-  struct regcache *regcache;
-  gdb_byte buf[4];
-  ULONGEST regval;
-
-  /* If we're not on PPU, there's nothing to detect.  */
-  if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_powerpc)
-    return 0;
-
-  /* If we're called too early (e.g. after fork), we cannot
-     access the inferior yet.  */
-  if (find_inferior_ptid (ptid) == NULL)
-    return 0;
-
-  /* Get PPU-side registers.  */
-  regcache = get_thread_arch_regcache (ptid, target_gdbarch ());
-  tdep = gdbarch_tdep (target_gdbarch ());
-
-  /* Fetch instruction preceding current NIP.  */
-  {
-    scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
-    inferior_ptid = ptid;
-    regval = target_read_memory (regcache_read_pc (regcache) - 4, buf, 4);
-  }
-  if (regval != 0)
-    return 0;
-  /* It should be a "sc" instruction.  */
-  if (extract_unsigned_integer (buf, 4, byte_order) != INSTR_SC)
-    return 0;
-  /* System call number should be NR_spu_run.  */
-  regcache_cooked_read_unsigned (regcache, tdep->ppc_gp0_regnum, &regval);
-  if (regval != NR_spu_run)
-    return 0;
-
-  /* Register 3 contains fd, register 4 the NPC param pointer.  */
-  regcache_cooked_read_unsigned (regcache, PPC_ORIG_R3_REGNUM, &regval);
-  *fd = (int) regval;
-  regcache_cooked_read_unsigned (regcache, tdep->ppc_gp0_regnum + 4, &regval);
-  *addr = (CORE_ADDR) regval;
-  return 1;
-}
-
-/* Find gdbarch for SPU context SPUFS_FD.  */
-static struct gdbarch *
-spu_gdbarch (int spufs_fd)
-{
-  struct gdbarch_info info;
-  gdbarch_info_init (&info);
-  info.bfd_arch_info = bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu);
-  info.byte_order = BFD_ENDIAN_BIG;
-  info.osabi = GDB_OSABI_LINUX;
-  info.id = &spufs_fd;
-  return gdbarch_find_by_info (info);
-}
-
-/* Override the to_thread_architecture routine.  */
-struct gdbarch *
-spu_multiarch_target::thread_architecture (ptid_t ptid)
-{
-  int spufs_fd;
-  CORE_ADDR spufs_addr;
-
-  if (parse_spufs_run (ptid, &spufs_fd, &spufs_addr))
-    return spu_gdbarch (spufs_fd);
-
-  return beneath ()->thread_architecture (ptid);
-}
-
-/* Override the to_region_ok_for_hw_watchpoint routine.  */
-
-int
-spu_multiarch_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
-{
-  /* We cannot watch SPU local store.  */
-  if (SPUADDR_SPU (addr) != -1)
-    return 0;
-
-  return beneath ()->region_ok_for_hw_watchpoint (addr, len);
-}
-
-/* Override the to_fetch_registers routine.  */
-
-void
-spu_multiarch_target::fetch_registers (struct regcache *regcache, int regno)
-{
-  struct gdbarch *gdbarch = regcache->arch ();
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  int spufs_fd;
-  CORE_ADDR spufs_addr;
-
-  /* Since we use functions that rely on inferior_ptid, we need to set and
-     restore it.  */
-  scoped_restore save_ptid
-    = make_scoped_restore (&inferior_ptid, regcache->ptid ());
-
-  /* This version applies only if we're currently in spu_run.  */
-  if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
-    {
-      beneath ()->fetch_registers (regcache, regno);
-      return;
-    }
-
-  /* We must be stopped on a spu_run system call.  */
-  if (!parse_spufs_run (inferior_ptid, &spufs_fd, &spufs_addr))
-    return;
-
-  /* The ID register holds the spufs file handle.  */
-  if (regno == -1 || regno == SPU_ID_REGNUM)
-    {
-      gdb_byte buf[4];
-      store_unsigned_integer (buf, 4, byte_order, spufs_fd);
-      regcache->raw_supply (SPU_ID_REGNUM, buf);
-    }
-
-  /* The NPC register is found in PPC memory at SPUFS_ADDR.  */
-  if (regno == -1 || regno == SPU_PC_REGNUM)
-    {
-      gdb_byte buf[4];
-
-      if (target_read (beneath (), TARGET_OBJECT_MEMORY, NULL,
-                      buf, spufs_addr, sizeof buf) == sizeof buf)
-       regcache->raw_supply (SPU_PC_REGNUM, buf);
-    }
-
-  /* The GPRs are found in the "regs" spufs file.  */
-  if (regno == -1 || (regno >= 0 && regno < SPU_NUM_GPRS))
-    {
-      gdb_byte buf[16 * SPU_NUM_GPRS];
-      char annex[32];
-      int i;
-
-      xsnprintf (annex, sizeof annex, "%d/regs", spufs_fd);
-      if (target_read (beneath (), TARGET_OBJECT_SPU, annex,
-                      buf, 0, sizeof buf) == sizeof buf)
-       for (i = 0; i < SPU_NUM_GPRS; i++)
-         regcache->raw_supply (i, buf + i*16);
-    }
-}
-
-/* Override the to_store_registers routine.  */
-
-void
-spu_multiarch_target::store_registers (struct regcache *regcache, int regno)
-{
-  struct gdbarch *gdbarch = regcache->arch ();
-  int spufs_fd;
-  CORE_ADDR spufs_addr;
-
-  /* Since we use functions that rely on inferior_ptid, we need to set and
-     restore it.  */
-  scoped_restore save_ptid
-    = make_scoped_restore (&inferior_ptid, regcache->ptid ());
-
-  /* This version applies only if we're currently in spu_run.  */
-  if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
-    {
-      beneath ()->store_registers (regcache, regno);
-      return;
-    }
-
-  /* We must be stopped on a spu_run system call.  */
-  if (!parse_spufs_run (inferior_ptid, &spufs_fd, &spufs_addr))
-    return;
-
-  /* The NPC register is found in PPC memory at SPUFS_ADDR.  */
-  if (regno == -1 || regno == SPU_PC_REGNUM)
-    {
-      gdb_byte buf[4];
-      regcache->raw_collect (SPU_PC_REGNUM, buf);
-
-      target_write (beneath (), TARGET_OBJECT_MEMORY, NULL,
-                   buf, spufs_addr, sizeof buf);
-    }
-
-  /* The GPRs are found in the "regs" spufs file.  */
-  if (regno == -1 || (regno >= 0 && regno < SPU_NUM_GPRS))
-    {
-      gdb_byte buf[16 * SPU_NUM_GPRS];
-      char annex[32];
-      int i;
-
-      for (i = 0; i < SPU_NUM_GPRS; i++)
-       regcache->raw_collect (i, buf + i*16);
-
-      xsnprintf (annex, sizeof annex, "%d/regs", spufs_fd);
-      target_write (beneath (), TARGET_OBJECT_SPU, annex,
-                   buf, 0, sizeof buf);
-    }
-}
-
-/* Override the to_xfer_partial routine.  */
-
-enum target_xfer_status
-spu_multiarch_target::xfer_partial (enum target_object object,
-                                   const char *annex, gdb_byte *readbuf,
-                                   const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
-                                   ULONGEST *xfered_len)
-{
-  struct target_ops *ops_beneath = this->beneath ();
-
-  /* Use the "mem" spufs file to access SPU local store.  */
-  if (object == TARGET_OBJECT_MEMORY)
-    {
-      int fd = SPUADDR_SPU (offset);
-      CORE_ADDR addr = SPUADDR_ADDR (offset);
-      char mem_annex[32], lslr_annex[32];
-      gdb_byte buf[32];
-      ULONGEST lslr;
-      enum target_xfer_status ret;
-
-      if (fd >= 0)
-       {
-         xsnprintf (mem_annex, sizeof mem_annex, "%d/mem", fd);
-         ret = ops_beneath->xfer_partial (TARGET_OBJECT_SPU,
-                                          mem_annex, readbuf, writebuf,
-                                          addr, len, xfered_len);
-         if (ret == TARGET_XFER_OK)
-           return ret;
-
-         /* SPU local store access wraps the address around at the
-            local store limit.  We emulate this here.  To avoid needing
-            an extra access to retrieve the LSLR, we only do that after
-            trying the original address first, and getting end-of-file.  */
-         xsnprintf (lslr_annex, sizeof lslr_annex, "%d/lslr", fd);
-         memset (buf, 0, sizeof buf);
-         if (ops_beneath->xfer_partial (TARGET_OBJECT_SPU,
-                                        lslr_annex, buf, NULL,
-                                        0, sizeof buf, xfered_len)
-             != TARGET_XFER_OK)
-           return ret;
-
-         lslr = strtoulst ((char *) buf, NULL, 16);
-         return ops_beneath->xfer_partial (TARGET_OBJECT_SPU,
-                                           mem_annex, readbuf, writebuf,
-                                           addr & lslr, len, xfered_len);
-       }
-    }
-
-  return ops_beneath->xfer_partial (object, annex,
-                                   readbuf, writebuf, offset, len, xfered_len);
-}
-
-/* Override the to_search_memory routine.  */
-int
-spu_multiarch_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
-                                    const gdb_byte *pattern, ULONGEST pattern_len,
-                                    CORE_ADDR *found_addrp)
-{
-  /* For SPU local store, always fall back to the simple method.  */
-  if (SPUADDR_SPU (start_addr) >= 0)
-    return simple_search_memory (this, start_addr, search_space_len,
-                                pattern, pattern_len, found_addrp);
-
-  return beneath ()->search_memory (start_addr, search_space_len,
-                                   pattern, pattern_len, found_addrp);
-}
-
-
-/* Push and pop the SPU multi-architecture support target.  */
-
-static void
-spu_multiarch_activate (void)
-{
-  /* If GDB was configured without SPU architecture support,
-     we cannot install SPU multi-architecture support either.  */
-  if (spu_gdbarch (-1) == NULL)
-    return;
-
-  push_target (&spu_ops);
-
-  /* Make sure the thread architecture is re-evaluated.  */
-  registers_changed ();
-}
-
-static void
-spu_multiarch_deactivate (void)
-{
-  unpush_target (&spu_ops);
-
-  /* Make sure the thread architecture is re-evaluated.  */
-  registers_changed ();
-}
-
-static void
-spu_multiarch_inferior_created (struct target_ops *ops, int from_tty)
-{
-  if (spu_standalone_p ())
-    spu_multiarch_activate ();
-}
-
-static void
-spu_multiarch_solib_loaded (struct so_list *so)
-{
-  if (!spu_standalone_p ())
-    if (so->abfd && bfd_get_arch (so->abfd) == bfd_arch_spu)
-      if (spu_nr_solib++ == 0)
-       spu_multiarch_activate ();
-}
-
-static void
-spu_multiarch_solib_unloaded (struct so_list *so)
-{
-  if (!spu_standalone_p ())
-    if (so->abfd && bfd_get_arch (so->abfd) == bfd_arch_spu)
-      if (--spu_nr_solib == 0)
-       spu_multiarch_deactivate ();
-}
-
-void
-spu_multiarch_target::mourn_inferior ()
-{
-  beneath ()->mourn_inferior ();
-  spu_multiarch_deactivate ();
-}
-
-void
-_initialize_spu_multiarch (void)
-{
-  /* Install observers to watch for SPU objects.  */
-  gdb::observers::inferior_created.attach (spu_multiarch_inferior_created);
-  gdb::observers::solib_loaded.attach (spu_multiarch_solib_loaded);
-  gdb::observers::solib_unloaded.attach (spu_multiarch_solib_unloaded);
-}
-
diff --git a/gdb/spu-tdep.c b/gdb/spu-tdep.c
deleted file mode 100644 (file)
index 5360efb..0000000
+++ /dev/null
@@ -1,2835 +0,0 @@
-/* SPU target-dependent code for GDB, the GNU debugger.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
-
-   Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
-   Based on a port by Sid Manning <sid@us.ibm.com>.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "arch-utils.h"
-#include "gdbtypes.h"
-#include "gdbcmd.h"
-#include "gdbcore.h"
-#include "frame.h"
-#include "frame-unwind.h"
-#include "frame-base.h"
-#include "trad-frame.h"
-#include "symtab.h"
-#include "symfile.h"
-#include "value.h"
-#include "inferior.h"
-#include "dis-asm.h"
-#include "disasm.h"
-#include "objfiles.h"
-#include "language.h"
-#include "regcache.h"
-#include "reggroups.h"
-#include "block.h"
-#include "observable.h"
-#include "infcall.h"
-#include "dwarf2.h"
-#include "dwarf2-frame.h"
-#include "ax.h"
-#include "spu-tdep.h"
-#include "location.h"
-
-/* The list of available "set spu " and "show spu " commands.  */
-static struct cmd_list_element *setspucmdlist = NULL;
-static struct cmd_list_element *showspucmdlist = NULL;
-
-/* Whether to stop for new SPE contexts.  */
-static bool spu_stop_on_load_p = false;
-/* Whether to automatically flush the SW-managed cache.  */
-static bool spu_auto_flush_cache_p = true;
-
-
-/* The tdep structure.  */
-struct gdbarch_tdep
-{
-  /* The spufs ID identifying our address space.  */
-  int id;
-
-  /* SPU-specific vector type.  */
-  struct type *spu_builtin_type_vec128;
-};
-
-
-/* SPU-specific vector type.  */
-static struct type *
-spu_builtin_type_vec128 (struct gdbarch *gdbarch)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  if (!tdep->spu_builtin_type_vec128)
-    {
-      const struct builtin_type *bt = builtin_type (gdbarch);
-      struct type *t;
-
-      t = arch_composite_type (gdbarch,
-                              "__spu_builtin_type_vec128", TYPE_CODE_UNION);
-      append_composite_type_field (t, "uint128", bt->builtin_int128);
-      append_composite_type_field (t, "v2_int64",
-                                  init_vector_type (bt->builtin_int64, 2));
-      append_composite_type_field (t, "v4_int32",
-                                  init_vector_type (bt->builtin_int32, 4));
-      append_composite_type_field (t, "v8_int16",
-                                  init_vector_type (bt->builtin_int16, 8));
-      append_composite_type_field (t, "v16_int8",
-                                  init_vector_type (bt->builtin_int8, 16));
-      append_composite_type_field (t, "v2_double",
-                                  init_vector_type (bt->builtin_double, 2));
-      append_composite_type_field (t, "v4_float",
-                                  init_vector_type (bt->builtin_float, 4));
-
-      TYPE_VECTOR (t) = 1;
-      TYPE_NAME (t) = "spu_builtin_type_vec128";
-
-      tdep->spu_builtin_type_vec128 = t;
-    }
-
-  return tdep->spu_builtin_type_vec128;
-}
-
-
-/* The list of available "info spu " commands.  */
-static struct cmd_list_element *infospucmdlist = NULL;
-
-/* Registers.  */
-
-static const char *
-spu_register_name (struct gdbarch *gdbarch, int reg_nr)
-{
-  static const char *register_names[] =
-    {
-      "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
-      "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
-      "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
-      "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
-      "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39",
-      "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47",
-      "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55",
-      "r56", "r57", "r58", "r59", "r60", "r61", "r62", "r63",
-      "r64", "r65", "r66", "r67", "r68", "r69", "r70", "r71",
-      "r72", "r73", "r74", "r75", "r76", "r77", "r78", "r79",
-      "r80", "r81", "r82", "r83", "r84", "r85", "r86", "r87",
-      "r88", "r89", "r90", "r91", "r92", "r93", "r94", "r95",
-      "r96", "r97", "r98", "r99", "r100", "r101", "r102", "r103",
-      "r104", "r105", "r106", "r107", "r108", "r109", "r110", "r111",
-      "r112", "r113", "r114", "r115", "r116", "r117", "r118", "r119",
-      "r120", "r121", "r122", "r123", "r124", "r125", "r126", "r127",
-      "id", "pc", "sp", "fpscr", "srr0", "lslr", "decr", "decr_status"
-    };
-
-  if (reg_nr < 0)
-    return NULL;
-  if (reg_nr >= sizeof register_names / sizeof *register_names)
-    return NULL;
-
-  return register_names[reg_nr];
-}
-
-static struct type *
-spu_register_type (struct gdbarch *gdbarch, int reg_nr)
-{
-  if (reg_nr < SPU_NUM_GPRS)
-    return spu_builtin_type_vec128 (gdbarch);
-
-  switch (reg_nr)
-    {
-    case SPU_ID_REGNUM:
-      return builtin_type (gdbarch)->builtin_uint32;
-
-    case SPU_PC_REGNUM:
-      return builtin_type (gdbarch)->builtin_func_ptr;
-
-    case SPU_SP_REGNUM:
-      return builtin_type (gdbarch)->builtin_data_ptr;
-
-    case SPU_FPSCR_REGNUM:
-      return builtin_type (gdbarch)->builtin_uint128;
-
-    case SPU_SRR0_REGNUM:
-      return builtin_type (gdbarch)->builtin_uint32;
-
-    case SPU_LSLR_REGNUM:
-      return builtin_type (gdbarch)->builtin_uint32;
-
-    case SPU_DECR_REGNUM:
-      return builtin_type (gdbarch)->builtin_uint32;
-
-    case SPU_DECR_STATUS_REGNUM:
-      return builtin_type (gdbarch)->builtin_uint32;
-
-    default:
-      internal_error (__FILE__, __LINE__, _("invalid regnum"));
-    }
-}
-
-/* Pseudo registers for preferred slots - stack pointer.  */
-
-static enum register_status
-spu_pseudo_register_read_spu (readable_regcache *regcache, const char *regname,
-                             gdb_byte *buf)
-{
-  struct gdbarch *gdbarch = regcache->arch ();
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  enum register_status status;
-  gdb_byte reg[32];
-  char annex[32];
-  ULONGEST id;
-  ULONGEST ul;
-
-  status = regcache->raw_read (SPU_ID_REGNUM, &id);
-  if (status != REG_VALID)
-    return status;
-  xsnprintf (annex, sizeof annex, "%d/%s", (int) id, regname);
-  memset (reg, 0, sizeof reg);
-  target_read (current_top_target (), TARGET_OBJECT_SPU, annex,
-              reg, 0, sizeof reg);
-
-  ul = strtoulst ((char *) reg, NULL, 16);
-  store_unsigned_integer (buf, 4, byte_order, ul);
-  return REG_VALID;
-}
-
-static enum register_status
-spu_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
-                          int regnum, gdb_byte *buf)
-{
-  gdb_byte reg[16];
-  char annex[32];
-  ULONGEST id;
-  enum register_status status;
-
-  switch (regnum)
-    {
-    case SPU_SP_REGNUM:
-      status = regcache->raw_read (SPU_RAW_SP_REGNUM, reg);
-      if (status != REG_VALID)
-       return status;
-      memcpy (buf, reg, 4);
-      return status;
-
-    case SPU_FPSCR_REGNUM:
-      status = regcache->raw_read (SPU_ID_REGNUM, &id);
-      if (status != REG_VALID)
-       return status;
-      xsnprintf (annex, sizeof annex, "%d/fpcr", (int) id);
-      target_read (current_top_target (), TARGET_OBJECT_SPU, annex, buf, 0, 16);
-      return status;
-
-    case SPU_SRR0_REGNUM:
-      return spu_pseudo_register_read_spu (regcache, "srr0", buf);
-
-    case SPU_LSLR_REGNUM:
-      return spu_pseudo_register_read_spu (regcache, "lslr", buf);
-
-    case SPU_DECR_REGNUM:
-      return spu_pseudo_register_read_spu (regcache, "decr", buf);
-
-    case SPU_DECR_STATUS_REGNUM:
-      return spu_pseudo_register_read_spu (regcache, "decr_status", buf);
-
-    default:
-      internal_error (__FILE__, __LINE__, _("invalid regnum"));
-    }
-}
-
-static void
-spu_pseudo_register_write_spu (struct regcache *regcache, const char *regname,
-                              const gdb_byte *buf)
-{
-  struct gdbarch *gdbarch = regcache->arch ();
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  char reg[32];
-  char annex[32];
-  ULONGEST id;
-
-  regcache_raw_read_unsigned (regcache, SPU_ID_REGNUM, &id);
-  xsnprintf (annex, sizeof annex, "%d/%s", (int) id, regname);
-  xsnprintf (reg, sizeof reg, "0x%s",
-            phex_nz (extract_unsigned_integer (buf, 4, byte_order), 4));
-  target_write (current_top_target (), TARGET_OBJECT_SPU, annex,
-               (gdb_byte *) reg, 0, strlen (reg));
-}
-
-static void
-spu_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
-                           int regnum, const gdb_byte *buf)
-{
-  gdb_byte reg[16];
-  char annex[32];
-  ULONGEST id;
-
-  switch (regnum)
-    {
-    case SPU_SP_REGNUM:
-      regcache->raw_read (SPU_RAW_SP_REGNUM, reg);
-      memcpy (reg, buf, 4);
-      regcache->raw_write (SPU_RAW_SP_REGNUM, reg);
-      break;
-
-    case SPU_FPSCR_REGNUM:
-      regcache_raw_read_unsigned (regcache, SPU_ID_REGNUM, &id);
-      xsnprintf (annex, sizeof annex, "%d/fpcr", (int) id);
-      target_write (current_top_target (), TARGET_OBJECT_SPU, annex, buf, 0, 16);
-      break;
-
-    case SPU_SRR0_REGNUM:
-      spu_pseudo_register_write_spu (regcache, "srr0", buf);
-      break;
-
-    case SPU_LSLR_REGNUM:
-      spu_pseudo_register_write_spu (regcache, "lslr", buf);
-      break;
-
-    case SPU_DECR_REGNUM:
-      spu_pseudo_register_write_spu (regcache, "decr", buf);
-      break;
-
-    case SPU_DECR_STATUS_REGNUM:
-      spu_pseudo_register_write_spu (regcache, "decr_status", buf);
-      break;
-
-    default:
-      internal_error (__FILE__, __LINE__, _("invalid regnum"));
-    }
-}
-
-static int
-spu_ax_pseudo_register_collect (struct gdbarch *gdbarch,
-                               struct agent_expr *ax, int regnum)
-{
-  switch (regnum)
-    {
-    case SPU_SP_REGNUM:
-      ax_reg_mask (ax, SPU_RAW_SP_REGNUM);
-      return 0;
-
-    case SPU_FPSCR_REGNUM:
-    case SPU_SRR0_REGNUM:
-    case SPU_LSLR_REGNUM:
-    case SPU_DECR_REGNUM:
-    case SPU_DECR_STATUS_REGNUM:
-      return -1;
-
-    default:
-      internal_error (__FILE__, __LINE__, _("invalid regnum"));
-    }
-}
-
-static int
-spu_ax_pseudo_register_push_stack (struct gdbarch *gdbarch,
-                                  struct agent_expr *ax, int regnum)
-{
-  switch (regnum)
-    {
-    case SPU_SP_REGNUM:
-      ax_reg (ax, SPU_RAW_SP_REGNUM);
-      return 0;
-
-    case SPU_FPSCR_REGNUM:
-    case SPU_SRR0_REGNUM:
-    case SPU_LSLR_REGNUM:
-    case SPU_DECR_REGNUM:
-    case SPU_DECR_STATUS_REGNUM:
-      return -1;
-
-    default:
-      internal_error (__FILE__, __LINE__, _("invalid regnum"));
-    }
-}
-
-
-/* Value conversion -- access scalar values at the preferred slot.  */
-
-static struct value *
-spu_value_from_register (struct gdbarch *gdbarch, struct type *type,
-                        int regnum, struct frame_id frame_id)
-{
-  struct value *value = default_value_from_register (gdbarch, type,
-                                                    regnum, frame_id);
-  LONGEST len = TYPE_LENGTH (type);
-
-  if (regnum < SPU_NUM_GPRS && len < 16)
-    {
-      int preferred_slot = len < 4 ? 4 - len : 0;
-      set_value_offset (value, preferred_slot);
-    }
-
-  return value;
-}
-
-/* Register groups.  */
-
-static int
-spu_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
-                        struct reggroup *group)
-{
-  /* Registers displayed via 'info regs'.  */
-  if (group == general_reggroup)
-    return 1;
-
-  /* Registers displayed via 'info float'.  */
-  if (group == float_reggroup)
-    return 0;
-
-  /* Registers that need to be saved/restored in order to
-     push or pop frames.  */
-  if (group == save_reggroup || group == restore_reggroup)
-    return 1;
-
-  return default_register_reggroup_p (gdbarch, regnum, group);
-}
-
-/* DWARF-2 register numbers.  */
-
-static int
-spu_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
-{
-  /* Use cooked instead of raw SP.  */
-  return (reg == SPU_RAW_SP_REGNUM)? SPU_SP_REGNUM : reg;
-}
-
-
-/* Address handling.  */
-
-static int
-spu_gdbarch_id (struct gdbarch *gdbarch)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  int id = tdep->id;
-
-  /* The objfile architecture of a standalone SPU executable does not
-     provide an SPU ID.  Retrieve it from the objfile's relocated
-     address range in this special case.  */
-  if (id == -1
-      && symfile_objfile && symfile_objfile->obfd
-      && bfd_get_arch (symfile_objfile->obfd) == bfd_arch_spu
-      && symfile_objfile->sections != symfile_objfile->sections_end)
-    id = SPUADDR_SPU (obj_section_addr (symfile_objfile->sections));
-
-  return id;
-}
-
-static int
-spu_address_class_type_flags (int byte_size, int dwarf2_addr_class)
-{
-  if (dwarf2_addr_class == 1)
-    return TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
-  else
-    return 0;
-}
-
-static const char *
-spu_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags)
-{
-  if (type_flags & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
-    return "__ea";
-  else
-    return NULL;
-}
-
-static int
-spu_address_class_name_to_type_flags (struct gdbarch *gdbarch,
-                                     const char *name, int *type_flags_ptr)
-{
-  if (strcmp (name, "__ea") == 0)
-    {
-      *type_flags_ptr = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
-      return 1;
-    }
-  else
-   return 0;
-}
-
-static void
-spu_address_to_pointer (struct gdbarch *gdbarch,
-                       struct type *type, gdb_byte *buf, CORE_ADDR addr)
-{
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  store_unsigned_integer (buf, TYPE_LENGTH (type), byte_order,
-                         SPUADDR_ADDR (addr));
-}
-
-static CORE_ADDR
-spu_pointer_to_address (struct gdbarch *gdbarch,
-                       struct type *type, const gdb_byte *buf)
-{
-  int id = spu_gdbarch_id (gdbarch);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  ULONGEST addr
-    = extract_unsigned_integer (buf, TYPE_LENGTH (type), byte_order);
-
-  /* Do not convert __ea pointers.  */
-  if (TYPE_ADDRESS_CLASS_1 (type))
-    return addr;
-
-  return addr? SPUADDR (id, addr) : 0;
-}
-
-static CORE_ADDR
-spu_integer_to_address (struct gdbarch *gdbarch,
-                       struct type *type, const gdb_byte *buf)
-{
-  int id = spu_gdbarch_id (gdbarch);
-  ULONGEST addr = unpack_long (type, buf);
-
-  return SPUADDR (id, addr);
-}
-
-
-/* Decoding SPU instructions.  */
-
-enum
-  {
-    op_lqd   = 0x34,
-    op_lqx   = 0x3c4,
-    op_lqa   = 0x61,
-    op_lqr   = 0x67,
-    op_stqd  = 0x24,
-    op_stqx  = 0x144,
-    op_stqa  = 0x41,
-    op_stqr  = 0x47,
-
-    op_il    = 0x081,
-    op_ila   = 0x21,
-    op_a     = 0x0c0,
-    op_ai    = 0x1c,
-
-    op_selb  = 0x8,
-
-    op_br    = 0x64,
-    op_bra   = 0x60,
-    op_brsl  = 0x66,
-    op_brasl = 0x62,
-    op_brnz  = 0x42,
-    op_brz   = 0x40,
-    op_brhnz = 0x46,
-    op_brhz  = 0x44,
-    op_bi    = 0x1a8,
-    op_bisl  = 0x1a9,
-    op_biz   = 0x128,
-    op_binz  = 0x129,
-    op_bihz  = 0x12a,
-    op_bihnz = 0x12b,
-  };
-
-static int
-is_rr (unsigned int insn, int op, int *rt, int *ra, int *rb)
-{
-  if ((insn >> 21) == op)
-    {
-      *rt = insn & 127;
-      *ra = (insn >> 7) & 127;
-      *rb = (insn >> 14) & 127;
-      return 1;
-    }
-
-  return 0;
-}
-
-static int
-is_rrr (unsigned int insn, int op, int *rt, int *ra, int *rb, int *rc)
-{
-  if ((insn >> 28) == op)
-    {
-      *rt = (insn >> 21) & 127;
-      *ra = (insn >> 7) & 127;
-      *rb = (insn >> 14) & 127;
-      *rc = insn & 127;
-      return 1;
-    }
-
-  return 0;
-}
-
-static int
-is_ri7 (unsigned int insn, int op, int *rt, int *ra, int *i7)
-{
-  if ((insn >> 21) == op)
-    {
-      *rt = insn & 127;
-      *ra = (insn >> 7) & 127;
-      *i7 = (((insn >> 14) & 127) ^ 0x40) - 0x40;
-      return 1;
-    }
-
-  return 0;
-}
-
-static int
-is_ri10 (unsigned int insn, int op, int *rt, int *ra, int *i10)
-{
-  if ((insn >> 24) == op)
-    {
-      *rt = insn & 127;
-      *ra = (insn >> 7) & 127;
-      *i10 = (((insn >> 14) & 0x3ff) ^ 0x200) - 0x200;
-      return 1;
-    }
-
-  return 0;
-}
-
-static int
-is_ri16 (unsigned int insn, int op, int *rt, int *i16)
-{
-  if ((insn >> 23) == op)
-    {
-      *rt = insn & 127;
-      *i16 = (((insn >> 7) & 0xffff) ^ 0x8000) - 0x8000;
-      return 1;
-    }
-
-  return 0;
-}
-
-static int
-is_ri18 (unsigned int insn, int op, int *rt, int *i18)
-{
-  if ((insn >> 25) == op)
-    {
-      *rt = insn & 127;
-      *i18 = (((insn >> 7) & 0x3ffff) ^ 0x20000) - 0x20000;
-      return 1;
-    }
-
-  return 0;
-}
-
-static int
-is_branch (unsigned int insn, int *offset, int *reg)
-{
-  int rt, i7, i16;
-
-  if (is_ri16 (insn, op_br, &rt, &i16)
-      || is_ri16 (insn, op_brsl, &rt, &i16)
-      || is_ri16 (insn, op_brnz, &rt, &i16)
-      || is_ri16 (insn, op_brz, &rt, &i16)
-      || is_ri16 (insn, op_brhnz, &rt, &i16)
-      || is_ri16 (insn, op_brhz, &rt, &i16))
-    {
-      *reg = SPU_PC_REGNUM;
-      *offset = i16 << 2;
-      return 1;
-    }
-
-  if (is_ri16 (insn, op_bra, &rt, &i16)
-      || is_ri16 (insn, op_brasl, &rt, &i16))
-    {
-      *reg = -1;
-      *offset = i16 << 2;
-      return 1;
-    }
-
-  if (is_ri7 (insn, op_bi, &rt, reg, &i7)
-      || is_ri7 (insn, op_bisl, &rt, reg, &i7)
-      || is_ri7 (insn, op_biz, &rt, reg, &i7)
-      || is_ri7 (insn, op_binz, &rt, reg, &i7)
-      || is_ri7 (insn, op_bihz, &rt, reg, &i7)
-      || is_ri7 (insn, op_bihnz, &rt, reg, &i7))
-    {
-      *offset = 0;
-      return 1;
-    }
-
-  return 0;
-}
-
-
-/* Prolog parsing.  */
-
-struct spu_prologue_data
-  {
-    /* Stack frame size.  -1 if analysis was unsuccessful.  */
-    int size;
-
-    /* How to find the CFA.  The CFA is equal to SP at function entry.  */
-    int cfa_reg;
-    int cfa_offset;
-
-    /* Offset relative to CFA where a register is saved.  -1 if invalid.  */
-    int reg_offset[SPU_NUM_GPRS];
-  };
-
-static CORE_ADDR
-spu_analyze_prologue (struct gdbarch *gdbarch,
-                     CORE_ADDR start_pc, CORE_ADDR end_pc,
-                      struct spu_prologue_data *data)
-{
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  int found_sp = 0;
-  int found_fp = 0;
-  int found_lr = 0;
-  int found_bc = 0;
-  int reg_immed[SPU_NUM_GPRS];
-  gdb_byte buf[16];
-  CORE_ADDR prolog_pc = start_pc;
-  CORE_ADDR pc;
-  int i;
-
-
-  /* Initialize DATA to default values.  */
-  data->size = -1;
-
-  data->cfa_reg = SPU_RAW_SP_REGNUM;
-  data->cfa_offset = 0;
-
-  for (i = 0; i < SPU_NUM_GPRS; i++)
-    data->reg_offset[i] = -1;
-
-  /* Set up REG_IMMED array.  This is non-zero for a register if we know its
-     preferred slot currently holds this immediate value.  */
-  for (i = 0; i < SPU_NUM_GPRS; i++)
-      reg_immed[i] = 0;
-
-  /* Scan instructions until the first branch.
-
-     The following instructions are important prolog components:
-
-       - The first instruction to set up the stack pointer.
-       - The first instruction to set up the frame pointer.
-       - The first instruction to save the link register.
-       - The first instruction to save the backchain.
-
-     We return the instruction after the latest of these four,
-     or the incoming PC if none is found.  The first instruction
-     to set up the stack pointer also defines the frame size.
-
-     Note that instructions saving incoming arguments to their stack
-     slots are not counted as important, because they are hard to
-     identify with certainty.  This should not matter much, because
-     arguments are relevant only in code compiled with debug data,
-     and in such code the GDB core will advance until the first source
-     line anyway, using SAL data.
-
-     For purposes of stack unwinding, we analyze the following types
-     of instructions in addition:
-
-      - Any instruction adding to the current frame pointer.
-      - Any instruction loading an immediate constant into a register.
-      - Any instruction storing a register onto the stack.
-
-     These are used to compute the CFA and REG_OFFSET output.  */
-
-  for (pc = start_pc; pc < end_pc; pc += 4)
-    {
-      unsigned int insn;
-      int rt, ra, rb, rc, immed;
-
-      if (target_read_memory (pc, buf, 4))
-       break;
-      insn = extract_unsigned_integer (buf, 4, byte_order);
-
-      /* AI is the typical instruction to set up a stack frame.
-         It is also used to initialize the frame pointer.  */
-      if (is_ri10 (insn, op_ai, &rt, &ra, &immed))
-       {
-         if (rt == data->cfa_reg && ra == data->cfa_reg)
-           data->cfa_offset -= immed;
-
-         if (rt == SPU_RAW_SP_REGNUM && ra == SPU_RAW_SP_REGNUM
-             && !found_sp)
-           {
-             found_sp = 1;
-             prolog_pc = pc + 4;
-
-             data->size = -immed;
-           }
-         else if (rt == SPU_FP_REGNUM && ra == SPU_RAW_SP_REGNUM
-                  && !found_fp)
-           {
-             found_fp = 1;
-             prolog_pc = pc + 4;
-
-             data->cfa_reg = SPU_FP_REGNUM;
-             data->cfa_offset -= immed;
-           }
-       }
-
-      /* A is used to set up stack frames of size >= 512 bytes.
-         If we have tracked the contents of the addend register,
-         we can handle this as well.  */
-      else if (is_rr (insn, op_a, &rt, &ra, &rb))
-       {
-         if (rt == data->cfa_reg && ra == data->cfa_reg)
-           {
-             if (reg_immed[rb] != 0)
-               data->cfa_offset -= reg_immed[rb];
-             else
-               data->cfa_reg = -1;  /* We don't know the CFA any more.  */
-           }
-
-         if (rt == SPU_RAW_SP_REGNUM && ra == SPU_RAW_SP_REGNUM
-             && !found_sp)
-           {
-             found_sp = 1;
-             prolog_pc = pc + 4;
-
-             if (reg_immed[rb] != 0)
-               data->size = -reg_immed[rb];
-           }
-       }
-
-      /* We need to track IL and ILA used to load immediate constants
-         in case they are later used as input to an A instruction.  */
-      else if (is_ri16 (insn, op_il, &rt, &immed))
-       {
-         reg_immed[rt] = immed;
-
-         if (rt == SPU_RAW_SP_REGNUM && !found_sp)
-           found_sp = 1;
-       }
-
-      else if (is_ri18 (insn, op_ila, &rt, &immed))
-       {
-         reg_immed[rt] = immed & 0x3ffff;
-
-         if (rt == SPU_RAW_SP_REGNUM && !found_sp)
-           found_sp = 1;
-       }
-
-      /* STQD is used to save registers to the stack.  */
-      else if (is_ri10 (insn, op_stqd, &rt, &ra, &immed))
-       {
-         if (ra == data->cfa_reg)
-           data->reg_offset[rt] = data->cfa_offset - (immed << 4);
-
-         if (ra == data->cfa_reg && rt == SPU_LR_REGNUM
-              && !found_lr)
-           {
-             found_lr = 1;
-             prolog_pc = pc + 4;
-           }
-
-         if (ra == SPU_RAW_SP_REGNUM
-             && (found_sp? immed == 0 : rt == SPU_RAW_SP_REGNUM)
-             && !found_bc)
-           {
-             found_bc = 1;
-             prolog_pc = pc + 4;
-           }
-       }
-
-      /* _start uses SELB to set up the stack pointer.  */
-      else if (is_rrr (insn, op_selb, &rt, &ra, &rb, &rc))
-       {
-         if (rt == SPU_RAW_SP_REGNUM && !found_sp)
-           found_sp = 1;
-       }
-
-      /* We terminate if we find a branch.  */
-      else if (is_branch (insn, &immed, &ra))
-       break;
-    }
-
-
-  /* If we successfully parsed until here, and didn't find any instruction
-     modifying SP, we assume we have a frameless function.  */
-  if (!found_sp)
-    data->size = 0;
-
-  /* Return cooked instead of raw SP.  */
-  if (data->cfa_reg == SPU_RAW_SP_REGNUM)
-    data->cfa_reg = SPU_SP_REGNUM;
-
-  return prolog_pc;
-}
-
-/* Return the first instruction after the prologue starting at PC.  */
-static CORE_ADDR
-spu_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
-{
-  struct spu_prologue_data data;
-  return spu_analyze_prologue (gdbarch, pc, (CORE_ADDR)-1, &data);
-}
-
-/* Return the frame pointer in use at address PC.  */
-static void
-spu_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc,
-                          int *reg, LONGEST *offset)
-{
-  struct spu_prologue_data data;
-  spu_analyze_prologue (gdbarch, pc, (CORE_ADDR)-1, &data);
-
-  if (data.size != -1 && data.cfa_reg != -1)
-    {
-      /* The 'frame pointer' address is CFA minus frame size.  */
-      *reg = data.cfa_reg;
-      *offset = data.cfa_offset - data.size;
-    }
-  else
-    {
-      /* ??? We don't really know ...  */
-      *reg = SPU_SP_REGNUM;
-      *offset = 0;
-    }
-}
-
-/* Implement the stack_frame_destroyed_p gdbarch method.
-
-   1) scan forward from the point of execution:
-       a) If you find an instruction that modifies the stack pointer
-          or transfers control (except a return), execution is not in
-          an epilogue, return.
-       b) Stop scanning if you find a return instruction or reach the
-          end of the function or reach the hard limit for the size of
-          an epilogue.
-   2) scan backward from the point of execution:
-        a) If you find an instruction that modifies the stack pointer,
-            execution *is* in an epilogue, return.
-        b) Stop scanning if you reach an instruction that transfers
-           control or the beginning of the function or reach the hard
-           limit for the size of an epilogue.  */
-
-static int
-spu_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
-{
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  CORE_ADDR scan_pc, func_start, func_end, epilogue_start, epilogue_end;
-  bfd_byte buf[4];
-  unsigned int insn;
-  int rt, ra, rb, immed;
-
-  /* Find the search limits based on function boundaries and hard limit.
-     We assume the epilogue can be up to 64 instructions long.  */
-
-  const int spu_max_epilogue_size = 64 * 4;
-
-  if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
-    return 0;
-
-  if (pc - func_start < spu_max_epilogue_size)
-    epilogue_start = func_start;
-  else
-    epilogue_start = pc - spu_max_epilogue_size;
-
-  if (func_end - pc < spu_max_epilogue_size)
-    epilogue_end = func_end;
-  else
-    epilogue_end = pc + spu_max_epilogue_size;
-
-  /* Scan forward until next 'bi $0'.  */
-
-  for (scan_pc = pc; scan_pc < epilogue_end; scan_pc += 4)
-    {
-      if (target_read_memory (scan_pc, buf, 4))
-       return 0;
-      insn = extract_unsigned_integer (buf, 4, byte_order);
-
-      if (is_branch (insn, &immed, &ra))
-       {
-         if (immed == 0 && ra == SPU_LR_REGNUM)
-           break;
-
-         return 0;
-       }
-
-      if (is_ri10 (insn, op_ai, &rt, &ra, &immed)
-         || is_rr (insn, op_a, &rt, &ra, &rb)
-         || is_ri10 (insn, op_lqd, &rt, &ra, &immed))
-       {
-         if (rt == SPU_RAW_SP_REGNUM)
-           return 0;
-       }
-    }
-
-  if (scan_pc >= epilogue_end)
-    return 0;
-
-  /* Scan backward until adjustment to stack pointer (R1).  */
-
-  for (scan_pc = pc - 4; scan_pc >= epilogue_start; scan_pc -= 4)
-    {
-      if (target_read_memory (scan_pc, buf, 4))
-       return 0;
-      insn = extract_unsigned_integer (buf, 4, byte_order);
-
-      if (is_branch (insn, &immed, &ra))
-       return 0;
-
-      if (is_ri10 (insn, op_ai, &rt, &ra, &immed)
-         || is_rr (insn, op_a, &rt, &ra, &rb)
-         || is_ri10 (insn, op_lqd, &rt, &ra, &immed))
-       {
-         if (rt == SPU_RAW_SP_REGNUM)
-           return 1;
-       }
-    }
-
-  return 0;
-}
-
-
-/* Normal stack frames.  */
-
-struct spu_unwind_cache
-{
-  CORE_ADDR func;
-  CORE_ADDR frame_base;
-  CORE_ADDR local_base;
-
-  struct trad_frame_saved_reg *saved_regs;
-};
-
-static struct spu_unwind_cache *
-spu_frame_unwind_cache (struct frame_info *this_frame,
-                       void **this_prologue_cache)
-{
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  struct spu_unwind_cache *info;
-  struct spu_prologue_data data;
-  CORE_ADDR id = tdep->id;
-  gdb_byte buf[16];
-
-  if (*this_prologue_cache)
-    return (struct spu_unwind_cache *) *this_prologue_cache;
-
-  info = FRAME_OBSTACK_ZALLOC (struct spu_unwind_cache);
-  *this_prologue_cache = info;
-  info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
-  info->frame_base = 0;
-  info->local_base = 0;
-
-  /* Find the start of the current function, and analyze its prologue.  */
-  info->func = get_frame_func (this_frame);
-  if (info->func == 0)
-    {
-      /* Fall back to using the current PC as frame ID.  */
-      info->func = get_frame_pc (this_frame);
-      data.size = -1;
-    }
-  else
-    spu_analyze_prologue (gdbarch, info->func, get_frame_pc (this_frame),
-                         &data);
-
-  /* If successful, use prologue analysis data.  */
-  if (data.size != -1 && data.cfa_reg != -1)
-    {
-      CORE_ADDR cfa;
-      int i;
-
-      /* Determine CFA via unwound CFA_REG plus CFA_OFFSET.  */
-      get_frame_register (this_frame, data.cfa_reg, buf);
-      cfa = extract_unsigned_integer (buf, 4, byte_order) + data.cfa_offset;
-      cfa = SPUADDR (id, cfa);
-
-      /* Call-saved register slots.  */
-      for (i = 0; i < SPU_NUM_GPRS; i++)
-       if (i == SPU_LR_REGNUM
-           || (i >= SPU_SAVED1_REGNUM && i <= SPU_SAVEDN_REGNUM))
-         if (data.reg_offset[i] != -1)
-           info->saved_regs[i].addr = cfa - data.reg_offset[i];
-
-      /* Frame bases.  */
-      info->frame_base = cfa;
-      info->local_base = cfa - data.size;
-    }
-
-  /* Otherwise, fall back to reading the backchain link.  */
-  else
-    {
-      CORE_ADDR reg;
-      LONGEST backchain;
-      ULONGEST lslr;
-      int status;
-
-      /* Get local store limit.  */
-      lslr = get_frame_register_unsigned (this_frame, SPU_LSLR_REGNUM);
-      if (!lslr)
-       lslr = (ULONGEST) -1;
-
-      /* Get the backchain.  */
-      reg = get_frame_register_unsigned (this_frame, SPU_SP_REGNUM);
-      status = safe_read_memory_integer (SPUADDR (id, reg), 4, byte_order,
-                                        &backchain);
-
-      /* A zero backchain terminates the frame chain.  Also, sanity
-         check against the local store size limit.  */
-      if (status && backchain > 0 && backchain <= lslr)
-       {
-         /* Assume the link register is saved into its slot.  */
-         if (backchain + 16 <= lslr)
-           info->saved_regs[SPU_LR_REGNUM].addr = SPUADDR (id,
-                                                           backchain + 16);
-
-          /* Frame bases.  */
-         info->frame_base = SPUADDR (id, backchain);
-         info->local_base = SPUADDR (id, reg);
-       }
-    }
-
-  /* If we didn't find a frame, we cannot determine SP / return address.  */
-  if (info->frame_base == 0)
-    return info;
-
-  /* The previous SP is equal to the CFA.  */
-  trad_frame_set_value (info->saved_regs, SPU_SP_REGNUM,
-                       SPUADDR_ADDR (info->frame_base));
-
-  /* Read full contents of the unwound link register in order to
-     be able to determine the return address.  */
-  if (trad_frame_addr_p (info->saved_regs, SPU_LR_REGNUM))
-    target_read_memory (info->saved_regs[SPU_LR_REGNUM].addr, buf, 16);
-  else
-    get_frame_register (this_frame, SPU_LR_REGNUM, buf);
-
-  /* Normally, the return address is contained in the slot 0 of the
-     link register, and slots 1-3 are zero.  For an overlay return,
-     slot 0 contains the address of the overlay manager return stub,
-     slot 1 contains the partition number of the overlay section to
-     be returned to, and slot 2 contains the return address within
-     that section.  Return the latter address in that case.  */
-  if (extract_unsigned_integer (buf + 8, 4, byte_order) != 0)
-    trad_frame_set_value (info->saved_regs, SPU_PC_REGNUM,
-                         extract_unsigned_integer (buf + 8, 4, byte_order));
-  else
-    trad_frame_set_value (info->saved_regs, SPU_PC_REGNUM,
-                         extract_unsigned_integer (buf, 4, byte_order));
-  return info;
-}
-
-static void
-spu_frame_this_id (struct frame_info *this_frame,
-                  void **this_prologue_cache, struct frame_id *this_id)
-{
-  struct spu_unwind_cache *info =
-    spu_frame_unwind_cache (this_frame, this_prologue_cache);
-
-  if (info->frame_base == 0)
-    return;
-
-  *this_id = frame_id_build (info->frame_base, info->func);
-}
-
-static struct value *
-spu_frame_prev_register (struct frame_info *this_frame,
-                        void **this_prologue_cache, int regnum)
-{
-  struct spu_unwind_cache *info
-    = spu_frame_unwind_cache (this_frame, this_prologue_cache);
-
-  /* Special-case the stack pointer.  */
-  if (regnum == SPU_RAW_SP_REGNUM)
-    regnum = SPU_SP_REGNUM;
-
-  return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
-}
-
-static const struct frame_unwind spu_frame_unwind = {
-  NORMAL_FRAME,
-  default_frame_unwind_stop_reason,
-  spu_frame_this_id,
-  spu_frame_prev_register,
-  NULL,
-  default_frame_sniffer
-};
-
-static CORE_ADDR
-spu_frame_base_address (struct frame_info *this_frame, void **this_cache)
-{
-  struct spu_unwind_cache *info
-    = spu_frame_unwind_cache (this_frame, this_cache);
-  return info->local_base;
-}
-
-static const struct frame_base spu_frame_base = {
-  &spu_frame_unwind,
-  spu_frame_base_address,
-  spu_frame_base_address,
-  spu_frame_base_address
-};
-
-static CORE_ADDR
-spu_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  CORE_ADDR pc = frame_unwind_register_unsigned (next_frame, SPU_PC_REGNUM);
-  /* Mask off interrupt enable bit.  */
-  return SPUADDR (tdep->id, pc & -4);
-}
-
-static CORE_ADDR
-spu_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  CORE_ADDR sp = frame_unwind_register_unsigned (next_frame, SPU_SP_REGNUM);
-  return SPUADDR (tdep->id, sp);
-}
-
-static CORE_ADDR
-spu_read_pc (readable_regcache *regcache)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
-  ULONGEST pc;
-
-  regcache->cooked_read (SPU_PC_REGNUM, &pc);
-  /* Mask off interrupt enable bit.  */
-  return SPUADDR (tdep->id, pc & -4);
-}
-
-static void
-spu_write_pc (struct regcache *regcache, CORE_ADDR pc)
-{
-  /* Keep interrupt enabled state unchanged.  */
-  ULONGEST old_pc;
-
-  regcache_cooked_read_unsigned (regcache, SPU_PC_REGNUM, &old_pc);
-  regcache_cooked_write_unsigned (regcache, SPU_PC_REGNUM,
-                                 (SPUADDR_ADDR (pc) & -4) | (old_pc & 3));
-}
-
-
-/* Cell/B.E. cross-architecture unwinder support.  */
-
-struct spu2ppu_cache
-{
-  struct frame_id frame_id;
-  readonly_detached_regcache *regcache;
-};
-
-static struct gdbarch *
-spu2ppu_prev_arch (struct frame_info *this_frame, void **this_cache)
-{
-  struct spu2ppu_cache *cache = (struct spu2ppu_cache *) *this_cache;
-  return cache->regcache->arch ();
-}
-
-static void
-spu2ppu_this_id (struct frame_info *this_frame,
-                void **this_cache, struct frame_id *this_id)
-{
-  struct spu2ppu_cache *cache = (struct spu2ppu_cache *) *this_cache;
-  *this_id = cache->frame_id;
-}
-
-static struct value *
-spu2ppu_prev_register (struct frame_info *this_frame,
-                      void **this_cache, int regnum)
-{
-  struct spu2ppu_cache *cache = (struct spu2ppu_cache *) *this_cache;
-  struct gdbarch *gdbarch = cache->regcache->arch ();
-  gdb_byte *buf;
-
-  buf = (gdb_byte *) alloca (register_size (gdbarch, regnum));
-  cache->regcache->cooked_read (regnum, buf);
-  return frame_unwind_got_bytes (this_frame, regnum, buf);
-}
-
-static int
-spu2ppu_sniffer (const struct frame_unwind *self,
-                struct frame_info *this_frame, void **this_prologue_cache)
-{
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  CORE_ADDR base, func, backchain;
-  gdb_byte buf[4];
-
-  if (gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_spu)
-    return 0;
-
-  base = get_frame_sp (this_frame);
-  func = get_frame_pc (this_frame);
-  if (target_read_memory (base, buf, 4))
-    return 0;
-  backchain = extract_unsigned_integer (buf, 4, byte_order);
-
-  if (!backchain)
-    {
-      struct frame_info *fi;
-
-      struct spu2ppu_cache *cache
-       = FRAME_OBSTACK_CALLOC (1, struct spu2ppu_cache);
-
-      cache->frame_id = frame_id_build (base + 16, func);
-
-      for (fi = get_next_frame (this_frame); fi; fi = get_next_frame (fi))
-       if (gdbarch_bfd_arch_info (get_frame_arch (fi))->arch != bfd_arch_spu)
-         break;
-
-      if (fi)
-       {
-         cache->regcache = frame_save_as_regcache (fi).release ();
-         *this_prologue_cache = cache;
-         return 1;
-       }
-      else
-       {
-         struct regcache *regcache;
-         regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
-         cache->regcache = new readonly_detached_regcache (*regcache);
-         *this_prologue_cache = cache;
-         return 1;
-       }
-    }
-
-  return 0;
-}
-
-static void
-spu2ppu_dealloc_cache (struct frame_info *self, void *this_cache)
-{
-  struct spu2ppu_cache *cache = (struct spu2ppu_cache *) this_cache;
-  delete cache->regcache;
-}
-
-static const struct frame_unwind spu2ppu_unwind = {
-  ARCH_FRAME,
-  default_frame_unwind_stop_reason,
-  spu2ppu_this_id,
-  spu2ppu_prev_register,
-  NULL,
-  spu2ppu_sniffer,
-  spu2ppu_dealloc_cache,
-  spu2ppu_prev_arch,
-};
-
-
-/* Function calling convention.  */
-
-static CORE_ADDR
-spu_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
-{
-  return sp & ~15;
-}
-
-static CORE_ADDR
-spu_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr,
-                    struct value **args, int nargs, struct type *value_type,
-                    CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
-                    struct regcache *regcache)
-{
-  /* Allocate space sufficient for a breakpoint, keeping the stack aligned.  */
-  sp = (sp - 4) & ~15;
-  /* Store the address of that breakpoint */
-  *bp_addr = sp;
-  /* The call starts at the callee's entry point.  */
-  *real_pc = funaddr;
-
-  return sp;
-}
-
-static int
-spu_scalar_value_p (struct type *type)
-{
-  switch (TYPE_CODE (type))
-    {
-    case TYPE_CODE_INT:
-    case TYPE_CODE_ENUM:
-    case TYPE_CODE_RANGE:
-    case TYPE_CODE_CHAR:
-    case TYPE_CODE_BOOL:
-    case TYPE_CODE_PTR:
-    case TYPE_CODE_REF:
-    case TYPE_CODE_RVALUE_REF:
-      return TYPE_LENGTH (type) <= 16;
-
-    default:
-      return 0;
-    }
-}
-
-static void
-spu_value_to_regcache (struct regcache *regcache, int regnum,
-                      struct type *type, const gdb_byte *in)
-{
-  int len = TYPE_LENGTH (type);
-
-  if (spu_scalar_value_p (type))
-    {
-      int preferred_slot = len < 4 ? 4 - len : 0;
-      regcache->cooked_write_part (regnum, preferred_slot, len, in);
-    }
-  else
-    {
-      while (len >= 16)
-       {
-         regcache->cooked_write (regnum++, in);
-         in += 16;
-         len -= 16;
-       }
-
-      if (len > 0)
-       regcache->cooked_write_part (regnum, 0, len, in);
-    }
-}
-
-static void
-spu_regcache_to_value (struct regcache *regcache, int regnum,
-                      struct type *type, gdb_byte *out)
-{
-  int len = TYPE_LENGTH (type);
-
-  if (spu_scalar_value_p (type))
-    {
-      int preferred_slot = len < 4 ? 4 - len : 0;
-      regcache->cooked_read_part (regnum, preferred_slot, len, out);
-    }
-  else
-    {
-      while (len >= 16)
-       {
-         regcache->cooked_read (regnum++, out);
-         out += 16;
-         len -= 16;
-       }
-
-      if (len > 0)
-       regcache->cooked_read_part (regnum, 0, len, out);
-    }
-}
-
-static CORE_ADDR
-spu_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
-                    struct regcache *regcache, CORE_ADDR bp_addr,
-                    int nargs, struct value **args, CORE_ADDR sp,
-                    function_call_return_method return_method,
-                    CORE_ADDR struct_addr)
-{
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  CORE_ADDR sp_delta;
-  int i;
-  int regnum = SPU_ARG1_REGNUM;
-  int stack_arg = -1;
-  gdb_byte buf[16];
-
-  /* Set the return address.  */
-  memset (buf, 0, sizeof buf);
-  store_unsigned_integer (buf, 4, byte_order, SPUADDR_ADDR (bp_addr));
-  regcache->cooked_write (SPU_LR_REGNUM, buf);
-
-  /* If STRUCT_RETURN is true, then the struct return address (in
-     STRUCT_ADDR) will consume the first argument-passing register.
-     Both adjust the register count and store that value.  */
-  if (return_method == return_method_struct)
-    {
-      memset (buf, 0, sizeof buf);
-      store_unsigned_integer (buf, 4, byte_order, SPUADDR_ADDR (struct_addr));
-      regcache->cooked_write (regnum++, buf);
-    }
-
-  /* Fill in argument registers.  */
-  for (i = 0; i < nargs; i++)
-    {
-      struct value *arg = args[i];
-      struct type *type = check_typedef (value_type (arg));
-      const gdb_byte *contents = value_contents (arg);
-      int n_regs = align_up (TYPE_LENGTH (type), 16) / 16;
-
-      /* If the argument doesn't wholly fit into registers, it and
-        all subsequent arguments go to the stack.  */
-      if (regnum + n_regs - 1 > SPU_ARGN_REGNUM)
-       {
-         stack_arg = i;
-         break;
-       }
-
-      spu_value_to_regcache (regcache, regnum, type, contents);
-      regnum += n_regs;
-    }
-
-  /* Overflow arguments go to the stack.  */
-  if (stack_arg != -1)
-    {
-      CORE_ADDR ap;
-
-      /* Allocate all required stack size.  */
-      for (i = stack_arg; i < nargs; i++)
-       {
-         struct type *type = check_typedef (value_type (args[i]));
-         sp -= align_up (TYPE_LENGTH (type), 16);
-       }
-
-      /* Fill in stack arguments.  */
-      ap = sp;
-      for (i = stack_arg; i < nargs; i++)
-       {
-         struct value *arg = args[i];
-         struct type *type = check_typedef (value_type (arg));
-         int len = TYPE_LENGTH (type);
-         int preferred_slot;
-         
-         if (spu_scalar_value_p (type))
-           preferred_slot = len < 4 ? 4 - len : 0;
-         else
-           preferred_slot = 0;
-
-         target_write_memory (ap + preferred_slot, value_contents (arg), len);
-         ap += align_up (TYPE_LENGTH (type), 16);
-       }
-    }
-
-  /* Allocate stack frame header.  */
-  sp -= 32;
-
-  /* Store stack back chain.  */
-  regcache->cooked_read (SPU_RAW_SP_REGNUM, buf);
-  target_write_memory (sp, buf, 16);
-
-  /* Finally, update all slots of the SP register.  */
-  sp_delta = sp - extract_unsigned_integer (buf, 4, byte_order);
-  for (i = 0; i < 4; i++)
-    {
-      CORE_ADDR sp_slot = extract_unsigned_integer (buf + 4*i, 4, byte_order);
-      store_unsigned_integer (buf + 4*i, 4, byte_order, sp_slot + sp_delta);
-    }
-  regcache->cooked_write (SPU_RAW_SP_REGNUM, buf);
-
-  return sp;
-}
-
-static struct frame_id
-spu_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  CORE_ADDR pc = get_frame_register_unsigned (this_frame, SPU_PC_REGNUM);
-  CORE_ADDR sp = get_frame_register_unsigned (this_frame, SPU_SP_REGNUM);
-  return frame_id_build (SPUADDR (tdep->id, sp), SPUADDR (tdep->id, pc & -4));
-}
-
-/* Function return value access.  */
-
-static enum return_value_convention
-spu_return_value (struct gdbarch *gdbarch, struct value *function,
-                 struct type *type, struct regcache *regcache,
-                 gdb_byte *out, const gdb_byte *in)
-{
-  struct type *func_type = function ? value_type (function) : NULL;
-  enum return_value_convention rvc;
-  int opencl_vector = 0;
-
-  if (func_type)
-    {
-      func_type = check_typedef (func_type);
-
-      if (TYPE_CODE (func_type) == TYPE_CODE_PTR)
-       func_type = check_typedef (TYPE_TARGET_TYPE (func_type));
-
-      if (TYPE_CODE (func_type) == TYPE_CODE_FUNC
-         && TYPE_CALLING_CONVENTION (func_type) == DW_CC_GDB_IBM_OpenCL
-         && TYPE_CODE (type) == TYPE_CODE_ARRAY
-         && TYPE_VECTOR (type))
-       opencl_vector = 1;
-    }
-
-  if (TYPE_LENGTH (type) <= (SPU_ARGN_REGNUM - SPU_ARG1_REGNUM + 1) * 16)
-    rvc = RETURN_VALUE_REGISTER_CONVENTION;
-  else
-    rvc = RETURN_VALUE_STRUCT_CONVENTION;
-
-  if (in)
-    {
-      switch (rvc)
-       {
-       case RETURN_VALUE_REGISTER_CONVENTION:
-         if (opencl_vector && TYPE_LENGTH (type) == 2)
-           regcache->cooked_write_part (SPU_ARG1_REGNUM, 2, 2, in);
-         else
-           spu_value_to_regcache (regcache, SPU_ARG1_REGNUM, type, in);
-         break;
-
-       case RETURN_VALUE_STRUCT_CONVENTION:
-         error (_("Cannot set function return value."));
-         break;
-       }
-    }
-  else if (out)
-    {
-      switch (rvc)
-       {
-       case RETURN_VALUE_REGISTER_CONVENTION:
-         if (opencl_vector && TYPE_LENGTH (type) == 2)
-           regcache->cooked_read_part (SPU_ARG1_REGNUM, 2, 2, out);
-         else
-           spu_regcache_to_value (regcache, SPU_ARG1_REGNUM, type, out);
-         break;
-
-       case RETURN_VALUE_STRUCT_CONVENTION:
-         error (_("Function return value unknown."));
-         break;
-       }
-    }
-
-  return rvc;
-}
-
-
-/* Breakpoints.  */
-constexpr gdb_byte spu_break_insn[] = { 0x00, 0x00, 0x3f, 0xff };
-
-typedef BP_MANIPULATION (spu_break_insn) spu_breakpoint;
-
-static int
-spu_memory_remove_breakpoint (struct gdbarch *gdbarch,
-                             struct bp_target_info *bp_tgt)
-{
-  /* We work around a problem in combined Cell/B.E. debugging here.  Consider
-     that in a combined application, we have some breakpoints inserted in SPU
-     code, and now the application forks (on the PPU side).  GDB common code
-     will assume that the fork system call copied all breakpoints into the new
-     process' address space, and that all those copies now need to be removed
-     (see breakpoint.c:detach_breakpoints).
-
-     While this is certainly true for PPU side breakpoints, it is not true
-     for SPU side breakpoints.  fork will clone the SPU context file
-     descriptors, so that all the existing SPU contexts are in accessible
-     in the new process.  However, the contents of the SPU contexts themselves
-     are *not* cloned.  Therefore the effect of detach_breakpoints is to
-     remove SPU breakpoints from the *original* SPU context's local store
-     -- this is not the correct behaviour.
-
-     The workaround is to check whether the PID we are asked to remove this
-     breakpoint from (i.e. inferior_ptid.pid ()) is different from the
-     PID of the current inferior (i.e. current_inferior ()->pid).  This is only
-     true in the context of detach_breakpoints.  If so, we simply do nothing.
-     [ Note that for the fork child process, it does not matter if breakpoints
-     remain inserted, because those SPU contexts are not runnable anyway --
-     the Linux kernel allows only the original process to invoke spu_run.  */
-
-  if (inferior_ptid.pid () != current_inferior ()->pid) 
-    return 0;
-
-  return default_memory_remove_breakpoint (gdbarch, bp_tgt);
-}
-
-
-/* Software single-stepping support.  */
-
-static std::vector<CORE_ADDR>
-spu_software_single_step (struct regcache *regcache)
-{
-  struct gdbarch *gdbarch = regcache->arch ();
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  CORE_ADDR pc, next_pc;
-  unsigned int insn;
-  int offset, reg;
-  gdb_byte buf[4];
-  ULONGEST lslr;
-  std::vector<CORE_ADDR> next_pcs;
-
-  pc = regcache_read_pc (regcache);
-
-  if (target_read_memory (pc, buf, 4))
-    throw_error (MEMORY_ERROR, _("Could not read instruction at %s."),
-                paddress (gdbarch, pc));
-
-  insn = extract_unsigned_integer (buf, 4, byte_order);
-
-  /* Get local store limit.  */
-  if ((regcache_cooked_read_unsigned (regcache, SPU_LSLR_REGNUM, &lslr)
-       != REG_VALID) || !lslr)
-    lslr = (ULONGEST) -1;
-
-  /* Next sequential instruction is at PC + 4, except if the current
-     instruction is a PPE-assisted call, in which case it is at PC + 8.
-     Wrap around LS limit to be on the safe side.  */
-  if ((insn & 0xffffff00) == 0x00002100)
-    next_pc = (SPUADDR_ADDR (pc) + 8) & lslr;
-  else
-    next_pc = (SPUADDR_ADDR (pc) + 4) & lslr;
-
-  next_pcs.push_back (SPUADDR (SPUADDR_SPU (pc), next_pc));
-
-  if (is_branch (insn, &offset, &reg))
-    {
-      CORE_ADDR target = offset;
-
-      if (reg == SPU_PC_REGNUM)
-       target += SPUADDR_ADDR (pc);
-      else if (reg != -1)
-      {
-       regcache->raw_read_part (reg, 0, 4, buf);
-       target += extract_unsigned_integer (buf, 4, byte_order) & -4;
-      }
-
-      target = target & lslr;
-      if (target != next_pc)
-       next_pcs.push_back (SPUADDR (SPUADDR_SPU (pc), target));
-    }
-
-  return next_pcs;
-}
-
-
-/* Longjmp support.  */
-
-static int
-spu_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
-{
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  gdb_byte buf[4];
-  CORE_ADDR jb_addr;
-  int optim, unavail;
-
-  /* Jump buffer is pointed to by the argument register $r3.  */
-  if (!get_frame_register_bytes (frame, SPU_ARG1_REGNUM, 0, 4, buf,
-                                &optim, &unavail))
-    return 0;
-
-  jb_addr = extract_unsigned_integer (buf, 4, byte_order);
-  if (target_read_memory (SPUADDR (tdep->id, jb_addr), buf, 4))
-    return 0;
-
-  *pc = extract_unsigned_integer (buf, 4, byte_order);
-  *pc = SPUADDR (tdep->id, *pc);
-  return 1;
-}
-
-
-/* Disassembler.  */
-
-struct spu_dis_asm_info : disassemble_info
-{
-  int id;
-};
-
-static void
-spu_dis_asm_print_address (bfd_vma addr, struct disassemble_info *info)
-{
-  struct spu_dis_asm_info *data = (struct spu_dis_asm_info *) info;
-  gdb_disassembler *di
-    = static_cast<gdb_disassembler *>(info->application_data);
-
-  print_address (di->arch (), SPUADDR (data->id, addr),
-                (struct ui_file *) info->stream);
-}
-
-static int
-gdb_print_insn_spu (bfd_vma memaddr, struct disassemble_info *info)
-{
-  /* The opcodes disassembler does 18-bit address arithmetic.  Make
-     sure the SPU ID encoded in the high bits is added back when we
-     call print_address.  */
-  struct spu_dis_asm_info spu_info;
-
-  memcpy (&spu_info, info, sizeof (*info));
-  spu_info.id = SPUADDR_SPU (memaddr);
-  spu_info.print_address_func = spu_dis_asm_print_address;
-  return default_print_insn (memaddr, &spu_info);
-}
-
-
-/* Target overlays for the SPU overlay manager.
-
-   See the documentation of simple_overlay_update for how the
-   interface is supposed to work.
-
-   Data structures used by the overlay manager:
-
-   struct ovly_table
-     {
-        u32 vma;
-        u32 size;
-        u32 pos;
-        u32 buf;
-     } _ovly_table[];   -- one entry per overlay section
-
-   struct ovly_buf_table
-     {
-        u32 mapped;
-     } _ovly_buf_table[];  -- one entry per overlay buffer
-
-   _ovly_table should never change.
-
-   Both tables are aligned to a 16-byte boundary, the symbols
-   _ovly_table and _ovly_buf_table are of type STT_OBJECT and their
-   size set to the size of the respective array. buf in _ovly_table is
-   an index into _ovly_buf_table.
-
-   mapped is an index into _ovly_table.  Both the mapped and buf indices start
-   from one to reference the first entry in their respective tables.  */
-
-/* Using the per-objfile private data mechanism, we store for each
-   objfile an array of "struct spu_overlay_table" structures, one
-   for each obj_section of the objfile.  This structure holds two
-   fields, MAPPED_PTR and MAPPED_VAL.  If MAPPED_PTR is zero, this
-   is *not* an overlay section.  If it is non-zero, it represents
-   a target address.  The overlay section is mapped iff the target
-   integer at this location equals MAPPED_VAL.  */
-
-struct spu_overlay_table
-  {
-    CORE_ADDR mapped_ptr;
-    CORE_ADDR mapped_val;
-  };
-
-static objfile_key<spu_overlay_table,
-                  gdb::noop_deleter<spu_overlay_table>> spu_overlay_data;
-
-/* Retrieve the overlay table for OBJFILE.  If not already cached, read
-   the _ovly_table data structure from the target and initialize the
-   spu_overlay_table data structure from it.  */
-static struct spu_overlay_table *
-spu_get_overlay_table (struct objfile *objfile)
-{
-  enum bfd_endian byte_order = bfd_big_endian (objfile->obfd)?
-                  BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
-  struct bound_minimal_symbol ovly_table_msym, ovly_buf_table_msym;
-  CORE_ADDR ovly_table_base, ovly_buf_table_base;
-  unsigned ovly_table_size, ovly_buf_table_size;
-  struct spu_overlay_table *tbl;
-  struct obj_section *osect;
-  gdb_byte *ovly_table;
-  int i;
-
-  tbl = spu_overlay_data.get (objfile);
-  if (tbl)
-    return tbl;
-
-  ovly_table_msym = lookup_minimal_symbol ("_ovly_table", NULL, objfile);
-  if (!ovly_table_msym.minsym)
-    return NULL;
-
-  ovly_buf_table_msym = lookup_minimal_symbol ("_ovly_buf_table",
-                                              NULL, objfile);
-  if (!ovly_buf_table_msym.minsym)
-    return NULL;
-
-  ovly_table_base = BMSYMBOL_VALUE_ADDRESS (ovly_table_msym);
-  ovly_table_size = MSYMBOL_SIZE (ovly_table_msym.minsym);
-
-  ovly_buf_table_base = BMSYMBOL_VALUE_ADDRESS (ovly_buf_table_msym);
-  ovly_buf_table_size = MSYMBOL_SIZE (ovly_buf_table_msym.minsym);
-
-  ovly_table = (gdb_byte *) xmalloc (ovly_table_size);
-  read_memory (ovly_table_base, ovly_table, ovly_table_size);
-
-  tbl = OBSTACK_CALLOC (&objfile->objfile_obstack,
-                       objfile->sections_end - objfile->sections,
-                       struct spu_overlay_table);
-
-  for (i = 0; i < ovly_table_size / 16; i++)
-    {
-      CORE_ADDR vma  = extract_unsigned_integer (ovly_table + 16*i + 0,
-                                                4, byte_order);
-      /* Note that this skips the "size" entry, which is at offset
-        4.  */
-      CORE_ADDR pos  = extract_unsigned_integer (ovly_table + 16*i + 8,
-                                                4, byte_order);
-      CORE_ADDR buf  = extract_unsigned_integer (ovly_table + 16*i + 12,
-                                                4, byte_order);
-
-      if (buf == 0 || (buf - 1) * 4 >= ovly_buf_table_size)
-       continue;
-
-      ALL_OBJFILE_OSECTIONS (objfile, osect)
-       if (vma == bfd_section_vma (osect->the_bfd_section)
-           && pos == osect->the_bfd_section->filepos)
-         {
-           int ndx = osect - objfile->sections;
-           tbl[ndx].mapped_ptr = ovly_buf_table_base + (buf - 1) * 4;
-           tbl[ndx].mapped_val = i + 1;
-           break;
-         }
-    }
-
-  xfree (ovly_table);
-  spu_overlay_data.set (objfile, tbl);
-  return tbl;
-}
-
-/* Read _ovly_buf_table entry from the target to dermine whether
-   OSECT is currently mapped, and update the mapped state.  */
-static void
-spu_overlay_update_osect (struct obj_section *osect)
-{
-  enum bfd_endian byte_order = bfd_big_endian (osect->objfile->obfd)?
-                  BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
-  struct spu_overlay_table *ovly_table;
-  CORE_ADDR id, val;
-
-  ovly_table = spu_get_overlay_table (osect->objfile);
-  if (!ovly_table)
-    return;
-
-  ovly_table += osect - osect->objfile->sections;
-  if (ovly_table->mapped_ptr == 0)
-    return;
-
-  id = SPUADDR_SPU (obj_section_addr (osect));
-  val = read_memory_unsigned_integer (SPUADDR (id, ovly_table->mapped_ptr),
-                                     4, byte_order);
-  osect->ovly_mapped = (val == ovly_table->mapped_val);
-}
-
-/* If OSECT is NULL, then update all sections' mapped state.
-   If OSECT is non-NULL, then update only OSECT's mapped state.  */
-static void
-spu_overlay_update (struct obj_section *osect)
-{
-  /* Just one section.  */
-  if (osect)
-    spu_overlay_update_osect (osect);
-
-  /* All sections.  */
-  else
-    {
-      for (objfile *objfile : current_program_space->objfiles ())
-       ALL_OBJFILE_OSECTIONS (objfile, osect)
-         if (section_is_overlay (osect))
-           spu_overlay_update_osect (osect);
-    }
-}
-
-/* Whenever a new objfile is loaded, read the target's _ovly_table.
-   If there is one, go through all sections and make sure for non-
-   overlay sections LMA equals VMA, while for overlay sections LMA
-   is larger than SPU_OVERLAY_LMA.  */
-static void
-spu_overlay_new_objfile (struct objfile *objfile)
-{
-  struct spu_overlay_table *ovly_table;
-  struct obj_section *osect;
-
-  /* If we've already touched this file, do nothing.  */
-  if (!objfile || spu_overlay_data.get (objfile) != NULL)
-    return;
-
-  /* Consider only SPU objfiles.  */
-  if (bfd_get_arch (objfile->obfd) != bfd_arch_spu)
-    return;
-
-  /* Check if this objfile has overlays.  */
-  ovly_table = spu_get_overlay_table (objfile);
-  if (!ovly_table)
-    return;
-
-  /* Now go and fiddle with all the LMAs.  */
-  ALL_OBJFILE_OSECTIONS (objfile, osect)
-    {
-      asection *bsect = osect->the_bfd_section;
-      int ndx = osect - objfile->sections;
-
-      if (ovly_table[ndx].mapped_ptr == 0)
-       bfd_set_section_lma (bsect, bfd_section_vma (bsect));
-      else
-       bfd_set_section_lma (bsect, SPU_OVERLAY_LMA + bsect->filepos);
-    }
-}
-
-
-/* Insert temporary breakpoint on "main" function of newly loaded
-   SPE context OBJFILE.  */
-static void
-spu_catch_start (struct objfile *objfile)
-{
-  struct bound_minimal_symbol minsym;
-  struct compunit_symtab *cust;
-  CORE_ADDR pc;
-
-  /* Do this only if requested by "set spu stop-on-load on".  */
-  if (!spu_stop_on_load_p)
-    return;
-
-  /* Consider only SPU objfiles.  */
-  if (!objfile || bfd_get_arch (objfile->obfd) != bfd_arch_spu)
-    return;
-
-  /* The main objfile is handled differently.  */
-  if (objfile == symfile_objfile)
-    return;
-
-  /* There can be multiple symbols named "main".  Search for the
-     "main" in *this* objfile.  */
-  minsym = lookup_minimal_symbol ("main", NULL, objfile);
-  if (!minsym.minsym)
-    return;
-
-  /* If we have debugging information, try to use it -- this
-     will allow us to properly skip the prologue.  */
-  pc = BMSYMBOL_VALUE_ADDRESS (minsym);
-  cust
-    = find_pc_sect_compunit_symtab (pc, MSYMBOL_OBJ_SECTION (minsym.objfile,
-                                                            minsym.minsym));
-  if (cust != NULL)
-    {
-      const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust);
-      const struct block *block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
-      struct symbol *sym;
-      struct symtab_and_line sal;
-
-      sym = block_lookup_symbol (block, "main",
-                                symbol_name_match_type::SEARCH_NAME,
-                                VAR_DOMAIN);
-      if (sym)
-       {
-         fixup_symbol_section (sym, objfile);
-         sal = find_function_start_sal (sym, 1);
-         pc = sal.pc;
-       }
-    }
-
-  /* Use a numerical address for the set_breakpoint command to avoid having
-     the breakpoint re-set incorrectly.  */
-  event_location_up location = new_address_location (pc, NULL, 0);
-  create_breakpoint (get_objfile_arch (objfile), location.get (),
-                    NULL /* cond_string */, -1 /* thread */,
-                    NULL /* extra_string */,
-                    0 /* parse_condition_and_thread */, 1 /* tempflag */,
-                    bp_breakpoint /* type_wanted */,
-                    0 /* ignore_count */,
-                    AUTO_BOOLEAN_FALSE /* pending_break_support */,
-                    &bkpt_breakpoint_ops /* ops */, 0 /* from_tty */,
-                    1 /* enabled */, 0 /* internal  */, 0);
-}
-
-
-/* Look up OBJFILE loaded into FRAME's SPU context.  */
-static struct objfile *
-spu_objfile_from_frame (struct frame_info *frame)
-{
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
-    return NULL;
-
-  for (objfile *obj : current_program_space->objfiles ())
-    {
-      if (obj->sections != obj->sections_end
-         && SPUADDR_SPU (obj_section_addr (obj->sections)) == tdep->id)
-       return obj;
-    }
-
-  return NULL;
-}
-
-/* Flush cache for ea pointer access if available.  */
-static void
-flush_ea_cache (void)
-{
-  struct bound_minimal_symbol msymbol;
-  struct objfile *obj;
-
-  if (!has_stack_frames ())
-    return;
-
-  obj = spu_objfile_from_frame (get_current_frame ());
-  if (obj == NULL)
-    return;
-
-  /* Lookup inferior function __cache_flush.  */
-  msymbol = lookup_minimal_symbol ("__cache_flush", NULL, obj);
-  if (msymbol.minsym != NULL)
-    {
-      struct type *type;
-      CORE_ADDR addr;
-
-      type = objfile_type (obj)->builtin_void;
-      type = lookup_function_type (type);
-      type = lookup_pointer_type (type);
-      addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
-
-      call_function_by_hand (value_from_pointer (type, addr), NULL, {});
-    }
-}
-
-/* This handler is called when the inferior has stopped.  If it is stopped in
-   SPU architecture then flush the ea cache if used.  */
-static void
-spu_attach_normal_stop (struct bpstats *bs, int print_frame)
-{
-  if (!spu_auto_flush_cache_p)
-    return;
-
-  /* Temporarily reset spu_auto_flush_cache_p to avoid recursively
-     re-entering this function when __cache_flush stops.  */
-  spu_auto_flush_cache_p = 0;
-  flush_ea_cache ();
-  spu_auto_flush_cache_p = 1;
-}
-
-
-/* "info spu" commands.  */
-
-static void
-info_spu_event_command (const char *args, int from_tty)
-{
-  struct frame_info *frame = get_selected_frame (NULL);
-  ULONGEST event_status = 0;
-  ULONGEST event_mask = 0;
-  gdb_byte buf[100];
-  char annex[32];
-  LONGEST len;
-  int id;
-
-  if (gdbarch_bfd_arch_info (get_frame_arch (frame))->arch != bfd_arch_spu)
-    error (_("\"info spu\" is only supported on the SPU architecture."));
-
-  id = get_frame_register_unsigned (frame, SPU_ID_REGNUM);
-
-  xsnprintf (annex, sizeof annex, "%d/event_status", id);
-  len = target_read (current_top_target (), TARGET_OBJECT_SPU, annex,
-                    buf, 0, (sizeof (buf) - 1));
-  if (len <= 0)
-    error (_("Could not read event_status."));
-  buf[len] = '\0';
-  event_status = strtoulst ((char *) buf, NULL, 16);
-  xsnprintf (annex, sizeof annex, "%d/event_mask", id);
-  len = target_read (current_top_target (), TARGET_OBJECT_SPU, annex,
-                    buf, 0, (sizeof (buf) - 1));
-  if (len <= 0)
-    error (_("Could not read event_mask."));
-  buf[len] = '\0';
-  event_mask = strtoulst ((char *) buf, NULL, 16);
-  ui_out_emit_tuple tuple_emitter (current_uiout, "SPUInfoEvent");
-
-  current_uiout->text (_("Event Status "));
-  current_uiout->field_fmt ("event_status", "0x%s", phex (event_status, 4));
-  current_uiout->text ("\n");
-  current_uiout->text (_("Event Mask   "));
-  current_uiout->field_fmt ("event_mask", "0x%s", phex (event_mask, 4));
-  current_uiout->text ("\n");
-}
-
-static void
-info_spu_signal_command (const char *args, int from_tty)
-{
-  struct frame_info *frame = get_selected_frame (NULL);
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  ULONGEST signal1 = 0;
-  ULONGEST signal1_type = 0;
-  int signal1_pending = 0;
-  ULONGEST signal2 = 0;
-  ULONGEST signal2_type = 0;
-  int signal2_pending = 0;
-  char annex[32];
-  gdb_byte buf[100];
-  LONGEST len;
-  int id;
-
-  if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
-    error (_("\"info spu\" is only supported on the SPU architecture."));
-
-  id = get_frame_register_unsigned (frame, SPU_ID_REGNUM);
-
-  xsnprintf (annex, sizeof annex, "%d/signal1", id);
-  len = target_read (current_top_target (), TARGET_OBJECT_SPU,
-                    annex, buf, 0, 4);
-  if (len < 0)
-    error (_("Could not read signal1."));
-  else if (len == 4)
-    {
-      signal1 = extract_unsigned_integer (buf, 4, byte_order);
-      signal1_pending = 1;
-    }
-    
-  xsnprintf (annex, sizeof annex, "%d/signal1_type", id);
-  len = target_read (current_top_target (), TARGET_OBJECT_SPU, annex,
-                    buf, 0, (sizeof (buf) - 1));
-  if (len <= 0)
-    error (_("Could not read signal1_type."));
-  buf[len] = '\0';
-  signal1_type = strtoulst ((char *) buf, NULL, 16);
-
-  xsnprintf (annex, sizeof annex, "%d/signal2", id);
-  len = target_read (current_top_target (), TARGET_OBJECT_SPU,
-                    annex, buf, 0, 4);
-  if (len < 0)
-    error (_("Could not read signal2."));
-  else if (len == 4)
-    {
-      signal2 = extract_unsigned_integer (buf, 4, byte_order);
-      signal2_pending = 1;
-    }
-    
-  xsnprintf (annex, sizeof annex, "%d/signal2_type", id);
-  len = target_read (current_top_target (), TARGET_OBJECT_SPU, annex,
-                    buf, 0, (sizeof (buf) - 1));
-  if (len <= 0)
-    error (_("Could not read signal2_type."));
-  buf[len] = '\0';
-  signal2_type = strtoulst ((char *) buf, NULL, 16);
-
-  ui_out_emit_tuple tuple_emitter (current_uiout, "SPUInfoSignal");
-
-  if (current_uiout->is_mi_like_p ())
-    {
-      current_uiout->field_signed ("signal1_pending", signal1_pending);
-      current_uiout->field_fmt ("signal1", "0x%s", phex_nz (signal1, 4));
-      current_uiout->field_signed ("signal1_type", signal1_type);
-      current_uiout->field_signed ("signal2_pending", signal2_pending);
-      current_uiout->field_fmt ("signal2", "0x%s", phex_nz (signal2, 4));
-      current_uiout->field_signed ("signal2_type", signal2_type);
-    }
-  else
-    {
-      if (signal1_pending)
-       printf_filtered (_("Signal 1 control word 0x%s "), phex (signal1, 4));
-      else
-       printf_filtered (_("Signal 1 not pending "));
-
-      if (signal1_type)
-       printf_filtered (_("(Type Or)\n"));
-      else
-       printf_filtered (_("(Type Overwrite)\n"));
-
-      if (signal2_pending)
-       printf_filtered (_("Signal 2 control word 0x%s "), phex (signal2, 4));
-      else
-       printf_filtered (_("Signal 2 not pending "));
-
-      if (signal2_type)
-       printf_filtered (_("(Type Or)\n"));
-      else
-       printf_filtered (_("(Type Overwrite)\n"));
-    }
-}
-
-static void
-info_spu_mailbox_list (gdb_byte *buf, int nr, enum bfd_endian byte_order,
-                      const char *field, const char *msg)
-{
-  int i;
-
-  if (nr <= 0)
-    return;
-
-  ui_out_emit_table table_emitter (current_uiout, 1, nr, "mbox");
-
-  current_uiout->table_header (32, ui_left, field, msg);
-  current_uiout->table_body ();
-
-  for (i = 0; i < nr; i++)
-    {
-      {
-       ULONGEST val;
-       ui_out_emit_tuple tuple_emitter (current_uiout, "mbox");
-       val = extract_unsigned_integer (buf + 4*i, 4, byte_order);
-       current_uiout->field_fmt (field, "0x%s", phex (val, 4));
-      }
-
-      current_uiout->text ("\n");
-    }
-}
-
-static void
-info_spu_mailbox_command (const char *args, int from_tty)
-{
-  struct frame_info *frame = get_selected_frame (NULL);
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  char annex[32];
-  gdb_byte buf[1024];
-  LONGEST len;
-  int id;
-
-  if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
-    error (_("\"info spu\" is only supported on the SPU architecture."));
-
-  id = get_frame_register_unsigned (frame, SPU_ID_REGNUM);
-
-  ui_out_emit_tuple tuple_emitter (current_uiout, "SPUInfoMailbox");
-
-  xsnprintf (annex, sizeof annex, "%d/mbox_info", id);
-  len = target_read (current_top_target (), TARGET_OBJECT_SPU, annex,
-                    buf, 0, sizeof buf);
-  if (len < 0)
-    error (_("Could not read mbox_info."));
-
-  info_spu_mailbox_list (buf, len / 4, byte_order,
-                        "mbox", "SPU Outbound Mailbox");
-
-  xsnprintf (annex, sizeof annex, "%d/ibox_info", id);
-  len = target_read (current_top_target (), TARGET_OBJECT_SPU, annex,
-                    buf, 0, sizeof buf);
-  if (len < 0)
-    error (_("Could not read ibox_info."));
-
-  info_spu_mailbox_list (buf, len / 4, byte_order,
-                        "ibox", "SPU Outbound Interrupt Mailbox");
-
-  xsnprintf (annex, sizeof annex, "%d/wbox_info", id);
-  len = target_read (current_top_target (), TARGET_OBJECT_SPU, annex,
-                    buf, 0, sizeof buf);
-  if (len < 0)
-    error (_("Could not read wbox_info."));
-
-  info_spu_mailbox_list (buf, len / 4, byte_order,
-                        "wbox", "SPU Inbound Mailbox");
-}
-
-static ULONGEST
-spu_mfc_get_bitfield (ULONGEST word, int first, int last)
-{
-  ULONGEST mask = ~(~(ULONGEST)0 << (last - first + 1));
-  return (word >> (63 - last)) & mask;
-}
-
-static void
-info_spu_dma_cmdlist (gdb_byte *buf, int nr, enum bfd_endian byte_order)
-{
-  static const char *spu_mfc_opcode[256] =
-    {
-    /* 00 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    /* 10 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    /* 20 */ "put", "putb", "putf", NULL, "putl", "putlb", "putlf", NULL,
-             "puts", "putbs", "putfs", NULL, NULL, NULL, NULL, NULL,
-    /* 30 */ "putr", "putrb", "putrf", NULL, "putrl", "putrlb", "putrlf", NULL,
-             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    /* 40 */ "get", "getb", "getf", NULL, "getl", "getlb", "getlf", NULL,
-             "gets", "getbs", "getfs", NULL, NULL, NULL, NULL, NULL,
-    /* 50 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    /* 60 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    /* 70 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    /* 80 */ "sdcrt", "sdcrtst", NULL, NULL, NULL, NULL, NULL, NULL,
-             NULL, "sdcrz", NULL, NULL, NULL, "sdcrst", NULL, "sdcrf",
-    /* 90 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    /* a0 */ "sndsig", "sndsigb", "sndsigf", NULL, NULL, NULL, NULL, NULL,
-             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    /* b0 */ "putlluc", NULL, NULL, NULL, "putllc", NULL, NULL, NULL,
-             "putqlluc", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    /* c0 */ "barrier", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-             "mfceieio", NULL, NULL, NULL, "mfcsync", NULL, NULL, NULL,
-    /* d0 */ "getllar", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    /* e0 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    /* f0 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    };
-
-  int *seq = XALLOCAVEC (int, nr);
-  int done = 0;
-  int i, j;
-
-
-  /* Determine sequence in which to display (valid) entries.  */
-  for (i = 0; i < nr; i++)
-    {
-      /* Search for the first valid entry all of whose
-        dependencies are met.  */
-      for (j = 0; j < nr; j++)
-       {
-          ULONGEST mfc_cq_dw3;
-         ULONGEST dependencies;
-
-         if (done & (1 << (nr - 1 - j)))
-           continue;
-
-         mfc_cq_dw3
-           = extract_unsigned_integer (buf + 32*j + 24,8, byte_order);
-         if (!spu_mfc_get_bitfield (mfc_cq_dw3, 16, 16))
-           continue;
-
-         dependencies = spu_mfc_get_bitfield (mfc_cq_dw3, 0, nr - 1);
-         if ((dependencies & done) != dependencies)
-           continue;
-
-         seq[i] = j;
-         done |= 1 << (nr - 1 - j);
-         break;
-       }
-
-      if (j == nr)
-       break;
-    }
-
-  nr = i;
-
-
-  ui_out_emit_table table_emitter (current_uiout, 10, nr, "dma_cmd");
-
-  current_uiout->table_header (7, ui_left, "opcode", "Opcode");
-  current_uiout->table_header (3, ui_left, "tag", "Tag");
-  current_uiout->table_header (3, ui_left, "tid", "TId");
-  current_uiout->table_header (3, ui_left, "rid", "RId");
-  current_uiout->table_header (18, ui_left, "ea", "EA");
-  current_uiout->table_header (7, ui_left, "lsa", "LSA");
-  current_uiout->table_header (7, ui_left, "size", "Size");
-  current_uiout->table_header (7, ui_left, "lstaddr", "LstAddr");
-  current_uiout->table_header (7, ui_left, "lstsize", "LstSize");
-  current_uiout->table_header (1, ui_left, "error_p", "E");
-
-  current_uiout->table_body ();
-
-  for (i = 0; i < nr; i++)
-    {
-      ULONGEST mfc_cq_dw0;
-      ULONGEST mfc_cq_dw1;
-      ULONGEST mfc_cq_dw2;
-      int mfc_cmd_opcode, mfc_cmd_tag, rclass_id, tclass_id;
-      int list_lsa, list_size, mfc_lsa, mfc_size;
-      ULONGEST mfc_ea;
-      int list_valid_p, qw_valid_p, ea_valid_p, cmd_error_p;
-
-      /* Decode contents of MFC Command Queue Context Save/Restore Registers.
-        See "Cell Broadband Engine Registers V1.3", section 3.3.2.1.  */
-
-      mfc_cq_dw0
-       = extract_unsigned_integer (buf + 32*seq[i], 8, byte_order);
-      mfc_cq_dw1
-       = extract_unsigned_integer (buf + 32*seq[i] + 8, 8, byte_order);
-      mfc_cq_dw2
-       = extract_unsigned_integer (buf + 32*seq[i] + 16, 8, byte_order);
-
-      list_lsa = spu_mfc_get_bitfield (mfc_cq_dw0, 0, 14);
-      list_size = spu_mfc_get_bitfield (mfc_cq_dw0, 15, 26);
-      mfc_cmd_opcode = spu_mfc_get_bitfield (mfc_cq_dw0, 27, 34);
-      mfc_cmd_tag = spu_mfc_get_bitfield (mfc_cq_dw0, 35, 39);
-      list_valid_p = spu_mfc_get_bitfield (mfc_cq_dw0, 40, 40);
-      rclass_id = spu_mfc_get_bitfield (mfc_cq_dw0, 41, 43);
-      tclass_id = spu_mfc_get_bitfield (mfc_cq_dw0, 44, 46);
-
-      mfc_ea = spu_mfc_get_bitfield (mfc_cq_dw1, 0, 51) << 12
-               | spu_mfc_get_bitfield (mfc_cq_dw2, 25, 36);
-
-      mfc_lsa = spu_mfc_get_bitfield (mfc_cq_dw2, 0, 13);
-      mfc_size = spu_mfc_get_bitfield (mfc_cq_dw2, 14, 24);
-      qw_valid_p = spu_mfc_get_bitfield (mfc_cq_dw2, 38, 38);
-      ea_valid_p = spu_mfc_get_bitfield (mfc_cq_dw2, 39, 39);
-      cmd_error_p = spu_mfc_get_bitfield (mfc_cq_dw2, 40, 40);
-
-      {
-       ui_out_emit_tuple tuple_emitter (current_uiout, "cmd");
-
-       if (spu_mfc_opcode[mfc_cmd_opcode])
-         current_uiout->field_string ("opcode", spu_mfc_opcode[mfc_cmd_opcode]);
-       else
-         current_uiout->field_signed ("opcode", mfc_cmd_opcode);
-
-       current_uiout->field_signed ("tag", mfc_cmd_tag);
-       current_uiout->field_signed ("tid", tclass_id);
-       current_uiout->field_signed ("rid", rclass_id);
-
-       if (ea_valid_p)
-         current_uiout->field_fmt ("ea", "0x%s", phex (mfc_ea, 8));
-       else
-         current_uiout->field_skip ("ea");
-
-       current_uiout->field_fmt ("lsa", "0x%05x", mfc_lsa << 4);
-       if (qw_valid_p)
-         current_uiout->field_fmt ("size", "0x%05x", mfc_size << 4);
-       else
-         current_uiout->field_fmt ("size", "0x%05x", mfc_size);
-
-       if (list_valid_p)
-         {
-           current_uiout->field_fmt ("lstaddr", "0x%05x", list_lsa << 3);
-           current_uiout->field_fmt ("lstsize", "0x%05x", list_size << 3);
-         }
-       else
-         {
-           current_uiout->field_skip ("lstaddr");
-           current_uiout->field_skip ("lstsize");
-         }
-
-       if (cmd_error_p)
-         current_uiout->field_string ("error_p", "*");
-       else
-         current_uiout->field_skip ("error_p");
-      }
-
-      current_uiout->text ("\n");
-    }
-}
-
-static void
-info_spu_dma_command (const char *args, int from_tty)
-{
-  struct frame_info *frame = get_selected_frame (NULL);
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  ULONGEST dma_info_type;
-  ULONGEST dma_info_mask;
-  ULONGEST dma_info_status;
-  ULONGEST dma_info_stall_and_notify;
-  ULONGEST dma_info_atomic_command_status;
-  char annex[32];
-  gdb_byte buf[1024];
-  LONGEST len;
-  int id;
-
-  if (gdbarch_bfd_arch_info (get_frame_arch (frame))->arch != bfd_arch_spu)
-    error (_("\"info spu\" is only supported on the SPU architecture."));
-
-  id = get_frame_register_unsigned (frame, SPU_ID_REGNUM);
-
-  xsnprintf (annex, sizeof annex, "%d/dma_info", id);
-  len = target_read (current_top_target (), TARGET_OBJECT_SPU, annex,
-                    buf, 0, 40 + 16 * 32);
-  if (len <= 0)
-    error (_("Could not read dma_info."));
-
-  dma_info_type
-    = extract_unsigned_integer (buf, 8, byte_order);
-  dma_info_mask
-    = extract_unsigned_integer (buf + 8, 8, byte_order);
-  dma_info_status
-    = extract_unsigned_integer (buf + 16, 8, byte_order);
-  dma_info_stall_and_notify
-    = extract_unsigned_integer (buf + 24, 8, byte_order);
-  dma_info_atomic_command_status
-    = extract_unsigned_integer (buf + 32, 8, byte_order);
-  
-  ui_out_emit_tuple tuple_emitter (current_uiout, "SPUInfoDMA");
-
-  if (current_uiout->is_mi_like_p ())
-    {
-      current_uiout->field_fmt ("dma_info_type", "0x%s",
-                               phex_nz (dma_info_type, 4));
-      current_uiout->field_fmt ("dma_info_mask", "0x%s",
-                               phex_nz (dma_info_mask, 4));
-      current_uiout->field_fmt ("dma_info_status", "0x%s",
-                               phex_nz (dma_info_status, 4));
-      current_uiout->field_fmt ("dma_info_stall_and_notify", "0x%s",
-                               phex_nz (dma_info_stall_and_notify, 4));
-      current_uiout->field_fmt ("dma_info_atomic_command_status", "0x%s",
-                               phex_nz (dma_info_atomic_command_status, 4));
-    }
-  else
-    {
-      const char *query_msg = _("no query pending");
-
-      if (dma_info_type & 4)
-       switch (dma_info_type & 3)
-         {
-           case 1: query_msg = _("'any' query pending"); break;
-           case 2: query_msg = _("'all' query pending"); break;
-           default: query_msg = _("undefined query type"); break;
-         }
-
-      printf_filtered (_("Tag-Group Status  0x%s\n"),
-                      phex (dma_info_status, 4));
-      printf_filtered (_("Tag-Group Mask    0x%s (%s)\n"),
-                      phex (dma_info_mask, 4), query_msg);
-      printf_filtered (_("Stall-and-Notify  0x%s\n"),
-                      phex (dma_info_stall_and_notify, 4));
-      printf_filtered (_("Atomic Cmd Status 0x%s\n"),
-                      phex (dma_info_atomic_command_status, 4));
-      printf_filtered ("\n");
-    }
-
-  info_spu_dma_cmdlist (buf + 40, 16, byte_order);
-}
-
-static void
-info_spu_proxydma_command (const char *args, int from_tty)
-{
-  struct frame_info *frame = get_selected_frame (NULL);
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  ULONGEST dma_info_type;
-  ULONGEST dma_info_mask;
-  ULONGEST dma_info_status;
-  char annex[32];
-  gdb_byte buf[1024];
-  LONGEST len;
-  int id;
-
-  if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
-    error (_("\"info spu\" is only supported on the SPU architecture."));
-
-  id = get_frame_register_unsigned (frame, SPU_ID_REGNUM);
-
-  xsnprintf (annex, sizeof annex, "%d/proxydma_info", id);
-  len = target_read (current_top_target (), TARGET_OBJECT_SPU, annex,
-                    buf, 0, 24 + 8 * 32);
-  if (len <= 0)
-    error (_("Could not read proxydma_info."));
-
-  dma_info_type = extract_unsigned_integer (buf, 8, byte_order);
-  dma_info_mask = extract_unsigned_integer (buf + 8, 8, byte_order);
-  dma_info_status = extract_unsigned_integer (buf + 16, 8, byte_order);
-  
-  ui_out_emit_tuple tuple_emitter (current_uiout, "SPUInfoProxyDMA");
-
-  if (current_uiout->is_mi_like_p ())
-    {
-      current_uiout->field_fmt ("proxydma_info_type", "0x%s",
-                               phex_nz (dma_info_type, 4));
-      current_uiout->field_fmt ("proxydma_info_mask", "0x%s",
-                               phex_nz (dma_info_mask, 4));
-      current_uiout->field_fmt ("proxydma_info_status", "0x%s",
-                               phex_nz (dma_info_status, 4));
-    }
-  else
-    {
-      const char *query_msg;
-
-      switch (dma_info_type & 3)
-       {
-       case 0: query_msg = _("no query pending"); break;
-       case 1: query_msg = _("'any' query pending"); break;
-       case 2: query_msg = _("'all' query pending"); break;
-       default: query_msg = _("undefined query type"); break;
-       }
-
-      printf_filtered (_("Tag-Group Status  0x%s\n"),
-                      phex (dma_info_status, 4));
-      printf_filtered (_("Tag-Group Mask    0x%s (%s)\n"),
-                      phex (dma_info_mask, 4), query_msg);
-      printf_filtered ("\n");
-    }
-
-  info_spu_dma_cmdlist (buf + 24, 8, byte_order);
-}
-
-static void
-info_spu_command (const char *args, int from_tty)
-{
-  printf_unfiltered (_("\"info spu\" must be followed by "
-                      "the name of an SPU facility.\n"));
-  help_list (infospucmdlist, "info spu ", all_commands, gdb_stdout);
-}
-
-
-/* Root of all "set spu "/"show spu " commands.  */
-
-static void
-show_spu_command (const char *args, int from_tty)
-{
-  help_list (showspucmdlist, "show spu ", all_commands, gdb_stdout);
-}
-
-static void
-set_spu_command (const char *args, int from_tty)
-{
-  help_list (setspucmdlist, "set spu ", all_commands, gdb_stdout);
-}
-
-static void
-show_spu_stop_on_load (struct ui_file *file, int from_tty,
-                       struct cmd_list_element *c, const char *value)
-{
-  fprintf_filtered (file, _("Stopping for new SPE threads is %s.\n"),
-                    value);
-}
-
-static void
-show_spu_auto_flush_cache (struct ui_file *file, int from_tty,
-                          struct cmd_list_element *c, const char *value)
-{
-  fprintf_filtered (file, _("Automatic software-cache flush is %s.\n"),
-                    value);
-}
-
-
-/* Set up gdbarch struct.  */
-
-static struct gdbarch *
-spu_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
-{
-  struct gdbarch *gdbarch;
-  struct gdbarch_tdep *tdep;
-  int id = -1;
-
-  /* Which spufs ID was requested as address space?  */
-  if (info.id)
-    id = *info.id;
-  /* For objfile architectures of SPU solibs, decode the ID from the name.
-     This assumes the filename convention employed by solib-spu.c.  */
-  else if (info.abfd)
-    {
-      const char *name = strrchr (info.abfd->filename, '@');
-      if (name)
-       sscanf (name, "@0x%*x <%d>", &id);
-    }
-
-  /* Find a candidate among extant architectures.  */
-  for (arches = gdbarch_list_lookup_by_info (arches, &info);
-       arches != NULL;
-       arches = gdbarch_list_lookup_by_info (arches->next, &info))
-    {
-      tdep = gdbarch_tdep (arches->gdbarch);
-      if (tdep && tdep->id == id)
-       return arches->gdbarch;
-    }
-
-  /* None found, so create a new architecture.  */
-  tdep = XCNEW (struct gdbarch_tdep);
-  tdep->id = id;
-  gdbarch = gdbarch_alloc (&info, tdep);
-
-  /* Disassembler.  */
-  set_gdbarch_print_insn (gdbarch, gdb_print_insn_spu);
-
-  /* Registers.  */
-  set_gdbarch_num_regs (gdbarch, SPU_NUM_REGS);
-  set_gdbarch_num_pseudo_regs (gdbarch, SPU_NUM_PSEUDO_REGS);
-  set_gdbarch_sp_regnum (gdbarch, SPU_SP_REGNUM);
-  set_gdbarch_pc_regnum (gdbarch, SPU_PC_REGNUM);
-  set_gdbarch_read_pc (gdbarch, spu_read_pc);
-  set_gdbarch_write_pc (gdbarch, spu_write_pc);
-  set_gdbarch_register_name (gdbarch, spu_register_name);
-  set_gdbarch_register_type (gdbarch, spu_register_type);
-  set_gdbarch_pseudo_register_read (gdbarch, spu_pseudo_register_read);
-  set_gdbarch_pseudo_register_write (gdbarch, spu_pseudo_register_write);
-  set_gdbarch_value_from_register (gdbarch, spu_value_from_register);
-  set_gdbarch_register_reggroup_p (gdbarch, spu_register_reggroup_p);
-  set_gdbarch_dwarf2_reg_to_regnum (gdbarch, spu_dwarf_reg_to_regnum);
-  set_gdbarch_ax_pseudo_register_collect
-    (gdbarch, spu_ax_pseudo_register_collect);
-  set_gdbarch_ax_pseudo_register_push_stack
-    (gdbarch, spu_ax_pseudo_register_push_stack);
-
-  /* Data types.  */
-  set_gdbarch_char_signed (gdbarch, 0);
-  set_gdbarch_ptr_bit (gdbarch, 32);
-  set_gdbarch_addr_bit (gdbarch, 32);
-  set_gdbarch_short_bit (gdbarch, 16);
-  set_gdbarch_int_bit (gdbarch, 32);
-  set_gdbarch_long_bit (gdbarch, 32);
-  set_gdbarch_long_long_bit (gdbarch, 64);
-  set_gdbarch_float_bit (gdbarch, 32);
-  set_gdbarch_double_bit (gdbarch, 64);
-  set_gdbarch_long_double_bit (gdbarch, 64);
-  set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
-  set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
-  set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
-
-  /* Address handling.  */
-  set_gdbarch_address_to_pointer (gdbarch, spu_address_to_pointer);
-  set_gdbarch_pointer_to_address (gdbarch, spu_pointer_to_address);
-  set_gdbarch_integer_to_address (gdbarch, spu_integer_to_address);
-  set_gdbarch_address_class_type_flags (gdbarch, spu_address_class_type_flags);
-  set_gdbarch_address_class_type_flags_to_name
-    (gdbarch, spu_address_class_type_flags_to_name);
-  set_gdbarch_address_class_name_to_type_flags
-    (gdbarch, spu_address_class_name_to_type_flags);
-
-  /* We need to support more than "addr_bit" significant address bits
-     in order to support SPUADDR_ADDR encoded values.  */
-  set_gdbarch_significant_addr_bit (gdbarch, 64);
-
-  /* Inferior function calls.  */
-  set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
-  set_gdbarch_frame_align (gdbarch, spu_frame_align);
-  set_gdbarch_frame_red_zone_size (gdbarch, 2000);
-  set_gdbarch_push_dummy_code (gdbarch, spu_push_dummy_code);
-  set_gdbarch_push_dummy_call (gdbarch, spu_push_dummy_call);
-  set_gdbarch_dummy_id (gdbarch, spu_dummy_id);
-  set_gdbarch_return_value (gdbarch, spu_return_value);
-
-  /* Frame handling.  */
-  set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
-  dwarf2_append_unwinders (gdbarch);
-  frame_unwind_append_unwinder (gdbarch, &spu_frame_unwind);
-  frame_base_set_default (gdbarch, &spu_frame_base);
-  set_gdbarch_unwind_pc (gdbarch, spu_unwind_pc);
-  set_gdbarch_unwind_sp (gdbarch, spu_unwind_sp);
-  set_gdbarch_virtual_frame_pointer (gdbarch, spu_virtual_frame_pointer);
-  set_gdbarch_frame_args_skip (gdbarch, 0);
-  set_gdbarch_skip_prologue (gdbarch, spu_skip_prologue);
-  set_gdbarch_stack_frame_destroyed_p (gdbarch, spu_stack_frame_destroyed_p);
-
-  /* Cell/B.E. cross-architecture unwinder support.  */
-  frame_unwind_prepend_unwinder (gdbarch, &spu2ppu_unwind);
-
-  /* Breakpoints.  */
-  set_gdbarch_decr_pc_after_break (gdbarch, 4);
-  set_gdbarch_breakpoint_kind_from_pc (gdbarch, spu_breakpoint::kind_from_pc);
-  set_gdbarch_sw_breakpoint_from_kind (gdbarch, spu_breakpoint::bp_from_kind);
-  set_gdbarch_memory_remove_breakpoint (gdbarch, spu_memory_remove_breakpoint);
-  set_gdbarch_software_single_step (gdbarch, spu_software_single_step);
-  set_gdbarch_get_longjmp_target (gdbarch, spu_get_longjmp_target);
-
-  /* Overlays.  */
-  set_gdbarch_overlay_update (gdbarch, spu_overlay_update);
-
-  return gdbarch;
-}
-
-void
-_initialize_spu_tdep (void)
-{
-  register_gdbarch_init (bfd_arch_spu, spu_gdbarch_init);
-
-  /* Add ourselves to objfile event chain.  */
-  gdb::observers::new_objfile.attach (spu_overlay_new_objfile);
-
-  /* Install spu stop-on-load handler.  */
-  gdb::observers::new_objfile.attach (spu_catch_start);
-
-  /* Add ourselves to normal_stop event chain.  */
-  gdb::observers::normal_stop.attach (spu_attach_normal_stop);
-
-  /* Add root prefix command for all "set spu"/"show spu" commands.  */
-  add_prefix_cmd ("spu", no_class, set_spu_command,
-                 _("Various SPU specific commands."),
-                 &setspucmdlist, "set spu ", 0, &setlist);
-  add_prefix_cmd ("spu", no_class, show_spu_command,
-                 _("Various SPU specific commands."),
-                 &showspucmdlist, "show spu ", 0, &showlist);
-
-  /* Toggle whether or not to add a temporary breakpoint at the "main"
-     function of new SPE contexts.  */
-  add_setshow_boolean_cmd ("stop-on-load", class_support,
-                          &spu_stop_on_load_p, _("\
-Set whether to stop for new SPE threads."),
-                           _("\
-Show whether to stop for new SPE threads."),
-                           _("\
-Use \"on\" to give control to the user when a new SPE thread\n\
-enters its \"main\" function.\n\
-Use \"off\" to disable stopping for new SPE threads."),
-                          NULL,
-                          show_spu_stop_on_load,
-                          &setspucmdlist, &showspucmdlist);
-
-  /* Toggle whether or not to automatically flush the software-managed
-     cache whenever SPE execution stops.  */
-  add_setshow_boolean_cmd ("auto-flush-cache", class_support,
-                          &spu_auto_flush_cache_p, _("\
-Set whether to automatically flush the software-managed cache."),
-                           _("\
-Show whether to automatically flush the software-managed cache."),
-                           _("\
-Use \"on\" to automatically flush the software-managed cache\n\
-whenever SPE execution stops.\n\
-Use \"off\" to never automatically flush the software-managed cache."),
-                          NULL,
-                          show_spu_auto_flush_cache,
-                          &setspucmdlist, &showspucmdlist);
-
-  /* Add root prefix command for all "info spu" commands.  */
-  add_prefix_cmd ("spu", class_info, info_spu_command,
-                 _("Various SPU specific commands."),
-                 &infospucmdlist, "info spu ", 0, &infolist);
-
-  /* Add various "info spu" commands.  */
-  add_cmd ("event", class_info, info_spu_event_command,
-          _("Display SPU event facility status."),
-          &infospucmdlist);
-  add_cmd ("signal", class_info, info_spu_signal_command,
-          _("Display SPU signal notification facility status."),
-          &infospucmdlist);
-  add_cmd ("mailbox", class_info, info_spu_mailbox_command,
-          _("Display SPU mailbox facility status."),
-          &infospucmdlist);
-  add_cmd ("dma", class_info, info_spu_dma_command,
-          _("Display MFC DMA status."),
-          &infospucmdlist);
-  add_cmd ("proxydma", class_info, info_spu_proxydma_command,
-          _("Display MFC Proxy-DMA status."),
-          &infospucmdlist);
-}
diff --git a/gdb/spu-tdep.h b/gdb/spu-tdep.h
deleted file mode 100644 (file)
index 255be2e..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/* SPU target-dependent code for GDB, the GNU debugger.
-   Copyright (C) 2006-2019 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef SPU_TDEP_H
-#define SPU_TDEP_H
-
-/* Number of registers.  */
-#define SPU_NUM_REGS         130
-#define SPU_NUM_PSEUDO_REGS  6
-#define SPU_NUM_GPRS        128
-
-/* Register numbers of various important registers.  */
-enum spu_regnum
-{
-  /* SPU calling convention.  */
-  SPU_LR_REGNUM = 0,           /* Link register.  */
-  SPU_RAW_SP_REGNUM = 1,       /* Stack pointer (full register).  */
-  SPU_ARG1_REGNUM = 3,         /* First argument register.  */
-  SPU_ARGN_REGNUM = 74,                /* Last argument register.  */
-  SPU_SAVED1_REGNUM = 80,      /* First call-saved register.  */
-  SPU_SAVEDN_REGNUM = 127,     /* Last call-saved register.  */
-  SPU_FP_REGNUM = 127,         /* Frame pointer.  */
-
-  /* Special registers.  */
-  SPU_ID_REGNUM = 128,         /* SPU ID register.  */
-  SPU_PC_REGNUM = 129,         /* Next program counter.  */
-  SPU_SP_REGNUM = 130,         /* Stack pointer (preferred slot).  */
-  SPU_FPSCR_REGNUM = 131,      /* Floating point status/control register.  */
-  SPU_SRR0_REGNUM = 132,       /* SRR0 register.  */
-  SPU_LSLR_REGNUM = 133,       /* Local store limit register.  */
-  SPU_DECR_REGNUM = 134,       /* Decrementer value.  */
-  SPU_DECR_STATUS_REGNUM = 135 /* Decrementer status.  */
-};
-
-/* Address conversions.
-
-   In a combined PPU/SPU debugging session, we have to consider multiple
-   address spaces: the PPU 32- or 64-bit address space, and the 32-bit
-   local store address space for each SPU context.  As it is currently
-   not yet possible to use the program_space / address_space mechanism
-   to represent this, we encode all those addresses into one single
-   64-bit address for the whole process.  For SPU programs using overlays,
-   this address space must also include separate ranges reserved for the
-   LMA of overlay sections.
-
-
-   The following combinations are supported for combined debugging:
-
-   PPU address (this relies on the fact that PPC 64-bit user space
-   addresses can never have the highest-most bit set):
-
-      +-+---------------------------------+
-      |0|              ADDR [63]          |
-      +-+---------------------------------+
-
-   SPU address for SPU context with id SPU (this assumes that SPU
-   IDs, which are file descriptors, are never larger than 2^30):
-
-      +-+-+--------------+----------------+
-      |1|0|    SPU [30]  |    ADDR [32]   |
-      +-+-+--------------+----------------+
-
-   SPU overlay section LMA for SPU context with id SPU:
-
-      +-+-+--------------+----------------+
-      |1|1|    SPU [30]  |    ADDR [32]   |
-      +-+-+--------------+----------------+
-
-
-   In SPU stand-alone debugging mode (using spu-linux-nat.c),
-   the following combinations are supported:
-
-   SPU address:
-
-      +-+-+--------------+----------------+
-      |0|0|     0        |    ADDR [32]   |
-      +-+-+--------------+----------------+
-
-   SPU overlay section LMA:
-
-      +-+-+--------------+----------------+
-      |0|1|     0        |    ADDR [32]   |
-      +-+-+--------------+----------------+
-
-
-   The following macros allow manipulation of addresses in the
-   above formats.  */
-
-#define SPUADDR(spu, addr) \
-  ((spu) != -1? (ULONGEST)1 << 63 | (ULONGEST)(spu) << 32 | (addr) : (addr))
-
-#define SPUADDR_SPU(addr) \
-  (((addr) & (ULONGEST)1 << 63) \
-   ? (int) ((ULONGEST)(addr) >> 32 & 0x3fffffff) \
-   : -1)
-
-#define SPUADDR_ADDR(addr) \
-  (((addr) & (ULONGEST)1 << 63)? (ULONGEST)(addr) & 0xffffffff : (addr))
-
-#define SPU_OVERLAY_LMA ((ULONGEST)1 << 62)
-
-#endif
index c2f62031749d46271cb1cd953a267d340c09fde1..8dbd2d62dc4b727a0d743fb20c4c31125edbc179 100644 (file)
@@ -137,8 +137,6 @@ enum target_object
 {
   /* AVR target specific transfer.  See "avr-tdep.c" and "remote.c".  */
   TARGET_OBJECT_AVR,
-  /* SPU target specific transfer.  See "spu-tdep.c".  */
-  TARGET_OBJECT_SPU,
   /* Transfer up-to LEN bytes of memory starting at OFFSET.  */
   TARGET_OBJECT_MEMORY,
   /* Memory, avoiding GDB's data cache and trusting the executable.
index e86091eee3e0cc3b90f20719522ad47f75db1f56..64c7d388619a05ec8b29509105bd915489bdd2e8 100644 (file)
@@ -1,3 +1,32 @@
+2019-09-20  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * gdb.arch/spu-info.exp: Remove file.
+       * gdb.arch/spu-info.c: Remove file.
+       * gdb.arch/spu-ls.exp: Remove file.
+       * gdb.arch/spu-ls.c: Remove file.
+
+       * gdb.asm/asm-source.exp: Remove support for spu*-*-*.
+       * gdb.asm/spu.inc: Remove file.
+
+       * gdb.base/dump.exp: Remove support for spu*-*-*.
+       * gdb.base/stack-checking.exp: Likewise.
+       * gdb.base/overlays.exp: Likewise.
+       * gdb.base/ovlymgr.c: Likewise.
+       * gdb.base/spu.ld: Remove file.
+
+       * gdb.cp/bs15503.exp: Remove support for spu*-*-*.
+       * gdb.cp/cpexprs.exp: Likewise.
+       * gdb.cp/exception.exp: Likewise.
+       * gdb.cp/gdb2495.exp: Likewise.
+       * gdb.cp/mb-templates.exp: Likewise.
+       * gdb.cp/pr9167.exp: Likewise.
+       * gdb.cp/userdef.exp: Likewise.
+
+       * gdb.xml/tdesc-regs.exp: Remove support for spu*-*-*.
+
+       * gdb.cell: Remove directory.
+       * lib/cell.exp: Remove file.
+
 2019-09-19  Tom de Vries  <tdevries@suse.de>
 
        * lib/gdb.exp (gdb_test): Eliminate "^FOOBAR$" pattern.
diff --git a/gdb/testsuite/gdb.arch/spu-info.c b/gdb/testsuite/gdb.arch/spu-info.c
deleted file mode 100644 (file)
index 3046525..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/* Copyright 2007-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   This file is part of the gdb testsuite.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>.
-   Tests for 'info spu' commands.  */
-
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <spu_mfcio.h>
-
-
-/* PPE-assisted call interface.  */
-void
-send_to_ppe (unsigned int signalcode, unsigned int opcode, void *data)
-{
-  __vector unsigned int stopfunc =
-    {
-      signalcode,     /* stop */
-      (opcode << 24) | (unsigned int) data,
-      0x4020007f,     /* nop */
-      0x35000000      /* bi $0 */
-    };
-
-  void (*f) (void) = (void *) &stopfunc;
-  asm ("sync");
-  f ();
-}
-
-/* PPE-assisted call to mmap from SPU.  */
-unsigned long long
-mmap_ea (unsigned long long start, size_t length,
-         int prot, int flags, int fd, off_t offset)
-{
-  struct mmap_args
-    {
-      unsigned long long start __attribute__ ((aligned (16)));
-      size_t length __attribute__ ((aligned (16)));
-      int prot __attribute__ ((aligned (16)));
-      int flags __attribute__ ((aligned (16)));
-      int fd __attribute__ ((aligned (16)));
-      off_t offset __attribute__ ((aligned (16)));
-    } args;
-
-  args.start = start;
-  args.length = length;
-  args.prot = prot;
-  args.flags = flags;
-  args.fd = fd;
-  args.offset = offset;
-
-  send_to_ppe (0x2101, 11, &args);
-  return args.start;
-}
-
-/* This works only in a Linux environment with <= 1024 open
-   file descriptors for one process. Result is the file
-   descriptor for the current context if available.  */
-int
-find_context_fd (void)
-{
-  int dir_fd = -1;
-  int i;
-
-  for (i = 0; i < 1024; i++)
-    {
-      struct stat stat;
-
-      if (fstat (i, &stat) < 0)
-        break;
-      if (S_ISDIR (stat.st_mode))
-        dir_fd = dir_fd == -1 ? i : -2;
-    }
-  return dir_fd < 0 ? -1 : dir_fd;
-}
-
-/* Open the context file and return the file handler.  */
-int
-open_context_file (int context_fd, char *name, int flags)
-{
-  char buf[128];
-
-  if (context_fd < 0)
-    return -1;
-
-  sprintf (buf, "/proc/self/fd/%d/%s", context_fd, name);
-  return open (buf, flags);
-}
-
-
-int
-do_event_test ()
-{
-  spu_write_event_mask (MFC_MULTI_SRC_SYNC_EVENT); /* 0x1000 */  /* Marker Event */
-  spu_write_event_mask (MFC_PRIV_ATTN_EVENT); /* 0x0800 */
-  spu_write_event_mask (MFC_LLR_LOST_EVENT); /* 0x0400 */
-  spu_write_event_mask (MFC_SIGNAL_NOTIFY_1_EVENT); /* 0x0200 */
-  spu_write_event_mask (MFC_SIGNAL_NOTIFY_2_EVENT); /* 0x0100 */
-  spu_write_event_mask (MFC_OUT_MBOX_AVAILABLE_EVENT); /* 0x0080 */
-  spu_write_event_mask (MFC_OUT_INTR_MBOX_AVAILABLE_EVENT); /* 0x0040 */
-  spu_write_event_mask (MFC_DECREMENTER_EVENT); /* 0x0020 */
-  spu_write_event_mask (MFC_IN_MBOX_AVAILABLE_EVENT); /* 0x0010 */
-  spu_write_event_mask (MFC_COMMAND_QUEUE_AVAILABLE_EVENT); /* 0x0008 */
-  spu_write_event_mask (MFC_LIST_STALL_NOTIFY_EVENT); /* 0x0002 */
-  spu_write_event_mask (MFC_TAG_STATUS_UPDATE_EVENT); /* 0x0001 */
-
-  return 0;
-}
-
-int
-do_dma_test ()
-{
-  #define MAP_FAILED      (-1ULL)
-  #define PROT_READ       0x1
-  #define MAP_PRIVATE     0x002
-  #define BSIZE 128
-  static char buf[BSIZE] __attribute__ ((aligned (128)));
-  char *file = "/var/tmp/tmp_buf";
-  struct stat fdstat;
-  int fd, cnt;
-  unsigned long long src;
-
-  /* Create a file and fill it with some bytes.  */
-  fd = open (file, O_CREAT | O_RDWR | O_TRUNC, 0777);
-  if (fd == -1)
-    return -1;
-  memset ((void *)buf, '1', BSIZE);
-  write (fd, buf, BSIZE);
-  write (fd, buf, BSIZE);
-  memset ((void *)buf, 0, BSIZE);
-
-  if (fstat (fd, &fdstat) != 0
-      || !fdstat.st_size)
-    return -2;
-
-  src = mmap_ea(0ULL, fdstat.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
-  if (src == MAP_FAILED)
-    return -3;
-
-  /* Copy some data via DMA.  */
-  mfc_get (&buf, src, BSIZE, 5, 0, 0);   /* Marker DMA */
-  mfc_write_tag_mask (1<<5);   /* Marker DMAWait */
-  spu_mfcstat (MFC_TAG_UPDATE_ALL);
-
-  /* Close the file.  */
-  close (fd);
-
-  return cnt;
-}
-
-int
-do_mailbox_test ()
-{
-  /* Write to SPU Outbound Mailbox.  */
-  if (spu_stat_out_mbox ())            /* Marker Mbox */
-    spu_write_out_mbox (0x12345678);
-
-  /* Write to SPU Outbound Interrupt Mailbox.  */
-  if (spu_stat_out_intr_mbox ())
-    spu_write_out_intr_mbox (0x12345678);
-
-  return 0;       /* Marker MboxEnd */
-}
-
-int
-do_signal_test ()
-{
-  struct stat fdstat;
-  int context_fd = find_context_fd ();
-  int ret, buf, fd;
-
-  buf = 23;    /* Marker Signal */
-  /* Write to signal1.  */
-  fd = open_context_file (context_fd, "signal1", O_RDWR);
-  if (fstat (fd, &fdstat) != 0)
-    return -1;
-  ret = write (fd, &buf, sizeof (int));
-  close (fd);  /* Marker Signal1 */
-
-  /* Write to signal2.  */
-  fd = open_context_file (context_fd, "signal2", O_RDWR);
-  if (fstat (fd, &fdstat) != 0)
-    return -1;
-  ret = write (fd, &buf, sizeof (int));
-  close (fd);  /* Marker Signal2 */
-
-  /* Read signal1.  */
-  if (spu_stat_signal1 ())
-    ret = spu_read_signal1 ();
-
-  /* Read signal2.  */
-  if (spu_stat_signal2 ())
-    ret = spu_read_signal2 ();   /* Marker SignalRead */
-
-  return 0;
-}
-
-int
-main (unsigned long long speid, unsigned long long argp, 
-      unsigned long long envp)
-{
-  int res;
-
-  /* info spu event  */
-  res = do_event_test ();
-
-  /* info spu dma  */
-  res = do_dma_test ();
-
-  /* info spu mailbox  */
-  res = do_mailbox_test ();
-
-  /* info spu signal  */
-  res = do_signal_test ();
-
-  return 0;
-}
-
diff --git a/gdb/testsuite/gdb.arch/spu-info.exp b/gdb/testsuite/gdb.arch/spu-info.exp
deleted file mode 100644 (file)
index f840251..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-# Copyright 2007-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# This file is part of the gdb testsuite.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-# Tests for 'info spu' commands.
-
-
-if { ![istarget "spu-*-elf"] } then {
-  verbose "Skipping SPU-only testcase"
-  return
-}
-
-standard_testfile
-
-if { [prepare_for_testing "failed to prepare" $testfile $srcfile {debug}] } {
-  fail "cannot compile test program"
-  return -1
-}
-
-
-# Continue to MARKER
-proc c_to { marker } {
-  global srcfile
-  set line [gdb_get_line_number $marker]
-  gdb_test "break $line" \
-          "Breakpoint.*at.*file.*$srcfile.*line $line.*" \
-          "break $line"
-  gdb_test "continue" \
-          "Continuing.*Breakpoint.*at.*$srcfile.*$line.*" \
-          "continue to $line"
-}
-
-
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-# Check the help.
-gdb_test "info spu" \
-        ".*info spu.* must be followed by the name of an SPU facility.*" \
-        "info spu"
-gdb_test "help info spu" \
-        "Various SPU specific commands.*List of info spu subcommands.*" \
-        "help info spu"
-
-gdb_test "help info spu dma" \
-        "Display MFC DMA status." \
-        "help info spu dma"
-gdb_test "help info spu event" \
-        "Display SPU event facility status." \
-        "help info spu event"
-gdb_test "help info spu mailbox" \
-        "Display SPU mailbox facility status." \
-        "help info spu mailbox"
-gdb_test "help info spu proxydma" \
-        "Display MFC Proxy-DMA status." \
-        "help info spu proxydma"
-gdb_test "help info spu signal" \
-        "Display SPU signal notification facility status." \
-        "help info spu signal"
-
-
-# architecture should be spu:256K.
-gdb_test "show architecture" \
-        "The target architecture is set automatically.*currently spu:256K.*" \
-        "architecture = spu256K"
-
-# 'info spu event'.
-gdb_test "info spu event" \
-        "Event Status.*Event Mask.*" \
-        "info spu event"
-
-# 'info spu signal'.
-gdb_test "info spu signal" \
-        "Signal 1 not pending.*\(Type.*\).*Signal 2 not pending.*\(Type.*\).*" \
-        "info spu signal"
-
-# 'info spu mailbox'.
-gdb_test "info spu mailbox" \
-        "" \
-        "info spu mailbox"
-
-# 'info spu dma'.
-gdb_test "info spu dma" \
-        "Tag-Group Status.*Tag-Group Mask.*Stall-and-Notify .*Atomic Cmd Status.*" \
-        "info spu dma"
-
-# 'info spu proxydma'.
-gdb_test "info spu proxydma" \
-        "Tag-Group Status.*Tag-Group Mask.*" \
-         "info spu proxydma"
-
-# Event tests.
-c_to "Marker Event"
-gdb_test "info spu event" \
-       "Event Status 0x00000000.*Event Mask   0x00000000.*" \
-       "empty event status"
-
-# MFC_MULTI_SRC_SYNC_EVENT.
-gdb_test "next" "" "next"
-gdb_test "info spu event" \
-       "Event Status 0x0000.*Event Mask   0x00001000.*" \
-       "event mask 0x1000"
-# MFC_PRIV_ATTN_EVENT.
-gdb_test "next" "" "next"
-gdb_test "info spu event" \
-       "Event Status 0x0000.*Event Mask   0x00000800.*" \
-       "event mask 0x0800"
-# MFC_LLR_LOST_EVENT.
-gdb_test "next" "" "next"
-gdb_test "info spu event" \
-       "Event Status 0x0000.*Event Mask   0x00000400.*" \
-       "event mask 0x0400"
-# MFC_SIGNAL_NOTIFY_1_EVENT.
-gdb_test "next" "" "next"
-gdb_test "info spu event" \
-       "Event Status 0x0000.*Event Mask   0x00000200.*" \
-       "event mask 0x0200"
-# MFC_SIGNAL_NOTIFY_2_EVENT.
-gdb_test "next" "" "next"
-gdb_test "info spu event" \
-       "Event Status 0x0000.*Event Mask   0x00000100.*" \
-       "event mask 0x0100"
-# MFC_OUT_MBOX_AVAILABLE_EVENT.
-gdb_test "next" "" "next"
-gdb_test "info spu event" \
-       "Event Status 0x0000.*Event Mask   0x00000080.*" \
-       "event mask 0x0080"
-# MFC_OUT_INTR_MBOX_AVAILABLE_EVENT.
-gdb_test "next" "" "next"
-gdb_test "info spu event" \
-       "Event Status 0x0000.*Event Mask   0x00000040.*" \
-       "event mask 0x0040"
-# MFC_DECREMENTER_EVENT.
-gdb_test "next" "" "next"
-gdb_test "info spu event" \
-       "Event Status 0x0000.*Event Mask   0x00000020.*" \
-       "event mask 0x0020"
-# MFC_IN_MBOX_AVAILABLE_EVENT.
-gdb_test "next" "" "next"
-gdb_test "info spu event" \
-       "Event Status 0x0000.*Event Mask   0x00000010.*" \
-       "event mask 0x0010"
-# MFC_COMMAND_QUEUE_AVAILABLE_EVENT.
-gdb_test "next" "" "next"
-gdb_test "info spu event" \
-       "Event Status 0x0000.*Event Mask   0x00000008.*" \
-       "event mask 0x0008"
-# MFC_LIST_STALL_NOTIFY_EVENT.
-gdb_test "next" "" "next"
-gdb_test "info spu event" \
-       "Event Status 0x0000.*Event Mask   0x00000002.*" \
-       "event mask 0x0002"
-# MFC_TAG_STATUS_UPDATE_EVENT.
-gdb_test "next" "" "next"
-gdb_test "info spu event" \
-       "Event Status 0x0000.*Event Mask   0x00000001.*" \
-       "event mask 0x0001"
-
-
-# DMA tests.
-# 'info spu dma' should be empty.
-c_to "Marker DMA"
-gdb_test "info spu dma" \
-        "Tag-Group Status.*0x00000000.*Tag-Group Mask.*0x00000000.*Stall-and-Notify.*0x00000000.*Atomic Cmd Status.*0x00000000\[\r\n\]+" \
-        "info spu dma (empty)"
-
-# 'info spu dma' should be filled with some data.
-c_to "Marker DMAWait"
-gdb_test "next" "" "next"
-gdb_test "info spu dma" \
-        "Tag-Group Status.*0x00000000.*Tag-Group Mask.*0x00000020.*Stall-and-Notify.*0x00000000.*Atomic Cmd Status.*0x00000000.*Opcode.*Tag.*TId.*RId.*EA.*LSA.*Size.*LstAddr.*LstSize.*E.*get.*5.*0.*0.*0x00080\[ \r\n\]+" \
-        "info spu dma (non-empty)"
-gdb_test "finish" "" "finish"
-
-# Mailbox Test
-# 'info spu mailbox' should be empty.
-c_to "Marker Mbox"
-set msg "info spu mailbox"
-gdb_test_multiple "info spu mailbox" $msg {
-    -re "$gdb_prompt $" {
-      pass $msg
-    }
-    -re "SPU Outbound Mailbox.*0x.*SPU Outbound Interrupt Mailbox.*0x.*$gdb_prompt $" {
-      # Older kernels had a bug that caused them to return arbitrary values
-      # when attempting to read from an empty mailbox via spufs.
-      xfail $msg
-    }
-}
-
-# 'info spu mailbox' should now contain data.
-c_to "Marker MboxEnd"
-gdb_test "info spu mailbox" \
-        "SPU Outbound Mailbox.*0x12345678.*SPU Outbound Interrupt Mailbox.*0x12345678.*" \
-        "info spu mailbox"
-
-# Signal Test
-# 'info spu signal'.
-c_to "Marker Signal"
-gdb_test "info spu signal" \
-        "Signal 1 not pending.*\(Type.*\).*Signal 2 not pending.*\(Type.*\).*" \
-        "info spu signal"
-
-# 'info spu signal' with signal1 pending.
-c_to "Marker Signal1"
-gdb_test "info spu signal" \
-        "Signal 1 control word 0x00000017.*Signal 2 not pending.*\(Type.*\).*" \
-        "info spu signal"
-
-# 'info spu signal' with signal1 and signal2 pending.
-c_to "Marker Signal2"
-gdb_test "info spu signal" \
-        "Signal 1 control word 0x00000017.*Signal 2 control word 0x00000017.*" \
-        "info spu signal"
-
-# Read signal1. Only signal2 is pending.
-c_to "Marker SignalRead"
-gdb_test "info spu signal" \
-        "Signal 1 not pending.*Signal 2 control word 0x00000017.*" \
-        "info spu signal"
-
-
-gdb_exit
-
-return 0
diff --git a/gdb/testsuite/gdb.arch/spu-ls.c b/gdb/testsuite/gdb.arch/spu-ls.c
deleted file mode 100644 (file)
index f1a2049..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright 2010-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   This file is part of the gdb testsuite.
-
-   Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
-   Tests for SPU local-store access.  */
-
-char *ptr = (char *)0x12345678;
-
-char array[256];
-
-int
-main (unsigned long long speid, unsigned long long argp, 
-      unsigned long long envp)
-{
-  return 0;
-}
-
diff --git a/gdb/testsuite/gdb.arch/spu-ls.exp b/gdb/testsuite/gdb.arch/spu-ls.exp
deleted file mode 100644 (file)
index af0b1ac..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright 2010-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# This file is part of the gdb testsuite.
-#
-# Contributed by Ulrich Weigand  <uweigand@de.ibm.com>.
-# Tests for SPU local-store access.
-
-if { ![istarget "spu-*-elf"] } then {
-  verbose "Skipping SPU-only testcase"
-  return
-}
-
-standard_testfile
-
-if { [prepare_for_testing "failed to prepare" $testfile $srcfile {debug}] } {
-  fail "cannot compile test program"
-  return -1
-}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-gdb_test "print ptr" " = 0x12345678 \".*\"" "print ptr"
-gdb_test_no_output "set ptr = array + \$lslr + 1" "set ptr = array + \$lslr + 1"
-gdb_test_no_output "set array\[0\] = 1" "set array\[0\] = 1"
-gdb_test "print *ptr" " = 1 '\\\\001'" "print *ptr"
-gdb_test_no_output "set *ptr = 2" "set *ptr = 2"
-gdb_test "print array\[0\]" " = 2 '\\\\002'" "print array\[0\]"
-
-gdb_exit
-
-return 0
index 1bc384e9744bf347e289f60268dfaebef300cdc2..b10ee1702fcf5c7ca43c2a4746f2b67310515d5d 100644 (file)
@@ -128,11 +128,6 @@ switch -glob -- [istarget] {
         set asm-flags "-xarch=v9 -I${srcdir}/${subdir} $obj_include"
        set debug-flags "-gdwarf-2"
     }
-    "spu*-*-*" {
-       set asm-arch spu
-       set asm-flags "-I${srcdir}/${subdir} $obj_include --no-warn"
-       set debug-flags "-gdwarf-2"
-    }
     "xstormy16-*-*" {
         set asm-arch xstormy16
        set debug-flags "-gdwarf-2"
diff --git a/gdb/testsuite/gdb.asm/spu.inc b/gdb/testsuite/gdb.asm/spu.inc
deleted file mode 100644 (file)
index aabceb8..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-       comment "subroutine prologue"
-       .macro gdbasm_enter
-       stqd    $lr, 16($sp)
-       stqd    $sp, -32($sp)
-       ai      $sp, $sp, -32
-       .endm
-
-       comment "subroutine epilogue"
-       .macro gdbasm_leave
-       ai      $sp, $sp, 32
-       lqd     $lr, 16($sp)
-       bi      $lr     
-       .endm
-
-       .macro gdbasm_call subr
-       brsl    $lr, \subr
-       .endm
-
-       .macro gdbasm_several_nops
-       nop
-       nop
-       nop
-       nop
-       .endm
-
-       comment "exit (0)"
-       .macro gdbasm_exit0
-       stop    0x2000
-       stop 
-       stop 
-       stop 
-       .endm
-
-       comment "startup"
-       .macro gdbasm_startup
-       il      $0, 0
-       ila     $sp, 16368
-       stqd    $0, 0($sp)
-       stqd    $sp, -32($sp)
-       ai      $sp, $sp, -32
-       stqd    $0, 16($sp)
-       .endm
index 52ba5f8ebe3dd17c0bdd4752803b57dd64c96b49..77db17936eb1b238cbfc3696bcc9abd644120ea7 100644 (file)
@@ -30,12 +30,6 @@ if [istarget "alpha*-*-*"] then {
     lappend options "additional_flags=-Wl,-taso"
 }
 
-if {[istarget "spu*-*-*"]} then {
-    # The internal address format used for the combined Cell/B.E.
-    # debugger requires 64-bit.
-    set is64bitonly "yes"
-}
-
 # Debian9/Ubuntu16.10 onwards default to PIE enabled. Ensure it is disabled as
 # this causes addresses to be out of range for IHEX.
 lappend options {nopie}
index d8ac61921eda3120b7d5bed4b33b61bfb226b846..388b87f0269d6cd55da6ec85009907b0c263491f 100644 (file)
@@ -24,9 +24,6 @@ set data_overlays 1
 
 if [istarget "m32r-*-*"] then {
     set linker_script "${srcdir}/${subdir}/m32r.ld"
-} elseif [istarget "spu-*-*"] then {
-    set linker_script "${srcdir}/${subdir}/spu.ld"
-    set data_overlays 0
 } else {
     verbose "Skipping overlay test -- not implemented for this target."
     return 
index 533606b036f74c8a44eee4629e1e6389f67d6116..f4958ed14a372ff634ff93e9e770bc9cb8336813 100644 (file)
@@ -5,18 +5,6 @@
 
 #include "ovlymgr.h"
 
-#ifdef __SPU__
-/* SPU tool chain provides its own overlay manager.  */
-bool
-OverlayLoad (unsigned long ovlyno)
-{
-}
-bool
-OverlayUnload (unsigned long ovlyno)
-{
-}
-#else /* __SPU__ */
-
 /* Local functions and data: */
 
 extern unsigned long _ovly_table[][4];
@@ -243,4 +231,3 @@ ovly_copy (unsigned long dst, unsigned long src, long size)
   return;
 }
 
-#endif /* __SPU__ */
diff --git a/gdb/testsuite/gdb.base/spu.ld b/gdb/testsuite/gdb.base/spu.ld
deleted file mode 100644 (file)
index 0cd5a85..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-/* Script for -z combreloc: combine and sort reloc sections */
-OUTPUT_FORMAT("elf32-spu", "elf32-spu",
-             "elf32-spu")
-OUTPUT_ARCH(spu)
-ENTRY(_start)
-SEARCH_DIR("/usr/spu/lib");
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
-SECTIONS
-{
-  /* Read-only sections, merged into text segment: */
-  PROVIDE (__executable_start = 0); . = 0;
-  .interrupt : { KEEP(*(.interrupt)) }
-  .interp         : { *(.interp) }
-  .hash           : { *(.hash) }
-  .dynsym         : { *(.dynsym) }
-  .dynstr         : { *(.dynstr) }
-  .gnu.version    : { *(.gnu.version) }
-  .gnu.version_d  : { *(.gnu.version_d) }
-  .gnu.version_r  : { *(.gnu.version_r) }
-  .rel.dyn        :
-    {
-      *(.rel.init)
-      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
-      *(.rel.fini)
-      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
-      *(.rel.data.rel.ro*)
-      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
-      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
-      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
-      *(.rel.ctors)
-      *(.rel.dtors)
-      *(.rel.got)
-      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
-    }
-  .rela.dyn       :
-    {
-      *(.rela.init)
-      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
-      *(.rela.fini)
-      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
-      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
-      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
-      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
-      *(.rela.ctors)
-      *(.rela.dtors)
-      *(.rela.got)
-      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
-    }
-  .rel.plt        : { *(.rel.plt) }
-  .rela.plt       : { *(.rela.plt) }
-  .init           :
-  {
-    KEEP (*(.init))
-  } =0
-  .plt            : { *(.plt) }
-  .text           :
-  {
-    *(EXCLUDE_FILE (foo.o bar.o baz.o grbx.o) .text .stub .text.* .gnu.linkonce.t.*)
-    KEEP (*(.text.*personality*))
-    *(.spu.elf)
-    /* .gnu.warning sections are handled specially by elf32.em.  */
-    *(.gnu.warning)
-  } =0
-  .fini           :
-  {
-    KEEP (*(.fini))
-  } =0
-  PROVIDE (__etext = .);
-  PROVIDE (_etext = .);
-  PROVIDE (etext = .);
-  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
-  .rodata1        : { *(.rodata1) }
-  .eh_frame_hdr : { *(.eh_frame_hdr) }
-  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
-  /* Adjust the address for the data segment.  We want to adjust up to
-     the same address within the page on the next page up.  */
-  . = ALIGN(0x80);
-  /* Exception handling  */
-  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }
-  /* Thread Local Storage sections  */
-  .tdata         : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-  .tbss                  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
-  /* Ensure the __preinit_array_start label is properly aligned.  We
-     could instead move the label definition inside the section, but
-     the linker would then create the section even if it turns out to
-     be empty, which isn't pretty.  */
-  . = ALIGN(16);
-  PROVIDE (__preinit_array_start = .);
-  .preinit_array     : { KEEP (*(.preinit_array)) }
-  PROVIDE (__preinit_array_end = .);
-  PROVIDE (__init_array_start = .);
-  .init_array     : { KEEP (*(.init_array)) }
-  PROVIDE (__init_array_end = .);
-  PROVIDE (__fini_array_start = .);
-  .fini_array     : { KEEP (*(.fini_array)) }
-  PROVIDE (__fini_array_end = .);
-  .ctors          :
-  {
-    /* gcc uses crtbegin.o to find the start of
-       the constructors, so we make sure it is
-       first.  Because this is a wildcard, it
-       doesn't matter if the user does not
-       actually link against crtbegin.o; the
-       linker won't look for a file to match a
-       wildcard.  The wildcard also means that it
-       doesn't matter which directory crtbegin.o
-       is in.  */
-    KEEP (*crtbegin*.o(.ctors))
-    /* We don't want to include the .ctor section from
-       from the crtend.o file until after the sorted ctors.
-       The .ctor section from the crtend file contains the
-       end of ctors marker and it must be last */
-    KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
-    KEEP (*(SORT(.ctors.*)))
-    KEEP (*(.ctors))
-  }
-  .dtors          :
-  {
-    KEEP (*crtbegin*.o(.dtors))
-    KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
-    KEEP (*(SORT(.dtors.*)))
-    KEEP (*(.dtors))
-  }
-  .jcr            : { KEEP (*(.jcr)) }
-  .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }
-  .dynamic        : { *(.dynamic) }
-  .got            : { *(.got.plt) *(.got) }
-  .data           :
-  {
-    *(.data .data.* .gnu.linkonce.d.*)
-    KEEP (*(.gnu.linkonce.d.*personality*))
-    SORT(CONSTRUCTORS)
-  }
-  .data1          : { *(.data1) }
-  _edata = .;
-  PROVIDE (edata = .);
-  __bss_start = .;
-  .bss            :
-  {
-   *(.dynbss)
-   *(.bss .bss.* .gnu.linkonce.b.*)
-   *(COMMON)
-   /* Align here to ensure that the .bss section occupies space up to
-      _end.  Align after .bss to ensure correct alignment even if the
-      .bss section disappears because there are no input sections.  */
-   . = ALIGN(16);
-  }
-  .toe ALIGN(128) : { *(.toe) } = 0
-  . = ALIGN(16);
-  OVERLAY :
-    {
-      .ovly0 { foo.o(.text) }
-      .ovly1 { bar.o(.text) }
-    }
-  OVERLAY :
-    {
-      .ovly2 { baz.o(.text) }
-      .ovly3 { grbx.o(.text) }
-    }
-  _end = .;
-  PROVIDE (end = .);
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-  .comment       0 : { *(.comment) }
-  /* DWARF debug sections.
-     Symbols in the DWARF debugging sections are relative to the beginning
-     of the section so we begin them at 0.  */
-  /* DWARF 1 */
-  .debug          0 : { *(.debug) }
-  .line           0 : { *(.line) }
-  /* GNU DWARF 1 extensions */
-  .debug_srcinfo  0 : { *(.debug_srcinfo) }
-  .debug_sfnames  0 : { *(.debug_sfnames) }
-  /* DWARF 1.1 and DWARF 2 */
-  .debug_aranges  0 : { *(.debug_aranges) }
-  .debug_pubnames 0 : { *(.debug_pubnames) }
-  /* DWARF 2 */
-  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
-  .debug_abbrev   0 : { *(.debug_abbrev) }
-  .debug_line     0 : { *(.debug_line) }
-  .debug_frame    0 : { *(.debug_frame) }
-  .debug_str      0 : { *(.debug_str) }
-  .debug_loc      0 : { *(.debug_loc) }
-  .debug_macinfo  0 : { *(.debug_macinfo) }
-  /* SGI/MIPS DWARF 2 extensions */
-  .debug_weaknames 0 : { *(.debug_weaknames) }
-  .debug_funcnames 0 : { *(.debug_funcnames) }
-  .debug_typenames 0 : { *(.debug_typenames) }
-  .debug_varnames  0 : { *(.debug_varnames) }
-  .note.spu_name 0 : { *(.note.spu_name) }
-  PROVIDE (__stack = 0x3fff0);
-  /DISCARD/ : { *(.note.GNU-stack) }
-}
-
index e8af6a1c23a6e974334e632e87c4ecc67a6685a4..8f6dedbceca0b80ada0e9d392e2820af48c0d40f 100644 (file)
@@ -36,11 +36,7 @@ void medium_frame ()
 
 void big_frame ()
 {
-#ifdef __SPU__
-  char S [131072];
-#else
   char S [524188];
-#endif
   small_frame ();
 }
 
diff --git a/gdb/testsuite/gdb.cell/arch.exp b/gdb/testsuite/gdb.cell/arch.exp
deleted file mode 100644 (file)
index dbfb20c..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# This testcase checks if the "show architecture" command works properly.
-
-load_lib cell.exp
-
-set ppu_file "break"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "break-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-# No programm running, default architecture should be powerpc:common.
-gdb_test "show architecture" \
-        "The target architecture is set automatically.*currently powerpc:common.*" \
-        "startup architecture is powerpc:common"
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-# In PPU thread, architecture should be powerpc:common.
-gdb_test "show architecture" \
-        "The target architecture is set automatically.*currently powerpc:common.*" \
-        "ppu architecture is powerpc:common"
-
-# Switch to SPU thread.
-cont_spu_main
-check_spu_arch ""
-
-# Remember thread ID of first thread to hit SPU main.
-send_gdb "thread\n"
-gdb_expect 10 {
-    -re "Current thread is (\[0-9\]*) .*\r\n$gdb_prompt $" {
-       pass "retrieve current thread"
-       set thread_id $expect_out(1,string)
-    }
-    -re "$gdb_prompt $" {
-       fail "retrieve current thread"
-       return 0
-    }
-    timeout {
-       fail "retrieve current thread (timed out)"
-       return 0
-    }
-}
-
-# Stress Test: Switching from PPU- to SPU-Thread and back 'rep' times.
-set rep 100
-for {set i 0} {$i < $rep} {incr i} {
-  # Switch to PPU Thread.
-  gdb_test "t 1" \
-          "Switching to thread 1.*" \
-          "switch back to thread 1 (PPU) #$i"
-  # In PPU Thread, architecture should again be powerpc:common.
-  gdb_test "show architecture" \
-          "The target architecture is set automatically.*currently powerpc:common.*" \
-          "ppu architecture is powerpc:common again #$i"
-  # Thread switching to SPU.
-  gdb_test "t $thread_id" \
-          "Switching to thread $thread_id.*at.*$spu_file.c.*" \
-          "switch back to thread $thread_id (spu) #$i"
-  # Standing in SPU thread again, architecture should be spu:256K again.
-  check_spu_arch "spu architecture is spu256K again #$i"
-}
-# End of Stress Test loop
-
-gdb_exit
-
-return 0
diff --git a/gdb/testsuite/gdb.cell/break-spu.c b/gdb/testsuite/gdb.cell/break-spu.c
deleted file mode 100644 (file)
index f28a843..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-
-void foo (void);
-
-int
-main (unsigned long long speid, unsigned long long argp,
-      unsigned long long envp)
-{
-  int i;
-
-  printf ("Hello World! from spu\n");
-
-  i = 5;
-  foo ();
-  printf ("i = %d\n", i);
-
-  return 0;
-}
-
-void
-foo (void)
-{
-  printf ("in foo\n");
-}
diff --git a/gdb/testsuite/gdb.cell/break.c b/gdb/testsuite/gdb.cell/break.c
deleted file mode 100644 (file)
index 95108d7..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-#include <libspe2.h>
-#include <pthread.h>
-#include <sys/wait.h>
-
-extern spe_program_handle_t break_spu;
-#define nr_t 5
-
-void *
-spe_thread (void * arg)
-{
-  int flags = 0;
-  unsigned int entry = SPE_DEFAULT_ENTRY;
-  spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg;
-
-  spe_program_load (*ctx, &break_spu);
-  spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL);
-
-  pthread_exit (NULL);
-}
-
-int
-main (void)
-{
-  int thread_id[nr_t];
-  pthread_t pts[nr_t];
-  spe_context_ptr_t ctx[nr_t];
-  int value = 1;
-  int cnt;
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    {
-      ctx[cnt] = spe_context_create (0, NULL);
-      thread_id[cnt]
-       = pthread_create (&pts[cnt], NULL, &spe_thread, &ctx[cnt]);
-    }
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    pthread_join (pts[cnt], NULL);
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    spe_context_destroy (ctx[cnt]);
-
-  return 0;
-}
-
-void
-foo ()
-{
-  printf ("foo in break\n");
-  return;
-}
diff --git a/gdb/testsuite/gdb.cell/break.exp b/gdb/testsuite/gdb.cell/break.exp
deleted file mode 100644 (file)
index 73e60ad..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# This testcases tests setting and deleting breakpoints on PPU and SPU.
-
-load_lib cell.exp
-
-set testfile "break"
-set ppu_file "break"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "break-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-# Delete breakpoints before starting the application. The debugger
-# shouldn't prompt for anything.
-gdb_test "delete breakpoints" \
-        "" \
-        "no prompt when deleting non-existing breakpoints"
-
-gdb_test "break main" \
-        "Breakpoint.*at.* file .*$testfile.c, line.*" \
-        "breakpoint main in ppu"
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-delete_breakpoints
-
-# Re-set breakpoint at main in PPU binary.
-gdb_test "break main" \
-        "Breakpoint.*at.* file .*$testfile.c, line.*" \
-        "breakpoint function"
-
-# Set breakpoint in SPU binary.
-send_gdb "break $spu_file.c:10\n"
-gdb_expect {
-  -re ".*$spu_file.c.*Make breakpoint pending.*y or \\\[n\\\]. $" {
-    gdb_test "y" "Breakpoint.*$spu_file.*pending." "set pending breakpoint"
-  }
-  timeout { fail "timeout while setting breakpoint in spu binary" }
-}
-
-# Check breakpoints.
-gdb_test "info break" \
-        "Num\[ \]+Type\[ \]+Disp\[ \]+Enb\[ \]+Address\[ \]+What.*
-\[0-9\]+\[\t \]+breakpoint     keep y.*in main at.*$testfile.c.*
-\[0-9\]+\[\t \]+breakpoint     keep y.*PENDING.*$spu_file.c:10.*" \
-        "breakpoint info"
-
-gdb_test "continue" \
-        "Continuing.*Switching to Thread.*Breakpoint.*main.*at.*$spu_file.c.*" \
-        "continuing to spu thread"
-
-gdb_exit
-
-return 0
diff --git a/gdb/testsuite/gdb.cell/bt-spu.c b/gdb/testsuite/gdb.cell/bt-spu.c
deleted file mode 100644 (file)
index 6e83361..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-#include <sys/syscall.h>
-
-int
-main (unsigned long long speid, unsigned long long argp,
-      unsigned long long envp)
-{
-  __send_to_ppe (0x2111, 0, NULL);
-  return 0;
-}
-
diff --git a/gdb/testsuite/gdb.cell/bt.c b/gdb/testsuite/gdb.cell/bt.c
deleted file mode 100644 (file)
index 31fb4ea..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <libspe2.h>
-#include <pthread.h>
-#include <sys/wait.h>
-
-extern spe_program_handle_t bt_spu;
-extern spe_program_handle_t bt2_spu;
-#define nr_t 5
-
-void *
-spe_thread (void * arg)
-{
-  int flags = 0;
-  unsigned int entry = SPE_DEFAULT_ENTRY;
-  spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg;
-
-  spe_program_load (*ctx, &bt_spu);
-  spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL);
-
-  pthread_exit (NULL);
-}
-
-int
-indirect_handler (unsigned char *base, unsigned long offset)
-{
-  int flags = 0;
-  unsigned int entry = SPE_DEFAULT_ENTRY;
-  spe_context_ptr_t ctx = spe_context_create (0, NULL);
-
-  spe_program_load (ctx, &bt2_spu);
-  spe_context_run (ctx, &entry, flags, NULL, NULL, NULL);
-
-  return 0;
-}
-
-static pthread_mutex_t crash_mutex = PTHREAD_MUTEX_INITIALIZER;
-static int crash_count = 0;
-
-int
-crash_handler (unsigned char *base, unsigned long offset)
-{
-  int count;
-
-  pthread_mutex_lock (&crash_mutex);
-  count = ++crash_count;
-  pthread_mutex_unlock (&crash_mutex);
-
-  while (count < nr_t)
-    ;
-
-  abort ();
-}
-
-int
-main (void)
-{
-  int thread_id[nr_t];
-  pthread_t pts[nr_t];
-  spe_context_ptr_t ctx[nr_t];
-  int value = 1;
-  int cnt;
-
-  spe_callback_handler_register (indirect_handler, 0x11, SPE_CALLBACK_NEW);
-  spe_callback_handler_register (crash_handler, 0x12, SPE_CALLBACK_NEW);
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    {
-      ctx[cnt] = spe_context_create (0, NULL);
-      thread_id[cnt]
-       = pthread_create (&pts[cnt], NULL, &spe_thread, &ctx[cnt]);
-    }
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    pthread_join (pts[cnt], NULL);
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    spe_context_destroy (ctx[cnt]);
-
-  return 0;
-}
-
diff --git a/gdb/testsuite/gdb.cell/bt.exp b/gdb/testsuite/gdb.cell/bt.exp
deleted file mode 100644 (file)
index cacf7c2..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# This testcases tests mixed-architecture backtrace support
-
-load_lib cell.exp
-
-set testfile "bt"
-set ppu_file "bt"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "bt-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-set spu2_file "bt2-spu"
-set spu2_src ${srcdir}/${subdir}/${spu2_file}.c
-set spu2_bin [standard_output_file ${spu2_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binaries.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_spu $spu2_src $spu2_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_cell_embedspu $spu2_bin $spu2_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o $spu2_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-delete_breakpoints
-gdb_test "continue" ".*received signal SIGABRT, Aborted.*"
-
-gdb_test "backtrace" ".*abort.*crash_handler.*base.*offset.*<cross-architecture call>.*main.*speid.*argp.*envp.*at.*$spu2_file.c.*<cross-architecture call>.*spe_context_run.*indirect_handler.*base.*offset.*<cross-architecture call>.*main.*speid.*argp.*envp.*at.*$spu_file.c.*<cross-architecture call>.*spe_context_run.*spe_thread.*at.*$ppu_file.c.*"
-
-for {set thread_id 2} {$thread_id < 7} {incr thread_id} {
-  gdb_test "t $thread_id" \
-           "Switching to thread $thread_id.*" \
-           "switch to thread $thread_id"
-  gdb_test "backtrace" \
-          ".*crash_handler.*base.*offset.*<cross-architecture call>.*main.*speid.*argp.*envp.*at.*$spu2_file.c.*<cross-architecture call>.*spe_context_run.*indirect_handler.*base.*offset.*<cross-architecture call>.*main.*speid.*argp.*envp.*at.*$spu_file.c.*<cross-architecture call>.*spe_context_run.*spe_thread.*at.*$ppu_file.c.*" \
-          "backtrace in thread $thread_id"
-}
-
-gdb_exit
-
-return 0
diff --git a/gdb/testsuite/gdb.cell/bt2-spu.c b/gdb/testsuite/gdb.cell/bt2-spu.c
deleted file mode 100644 (file)
index 67ed34c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-#include <sys/syscall.h>
-
-int
-main (unsigned long long speid, unsigned long long argp,
-      unsigned long long envp)
-{
-  __send_to_ppe (0x2112, 0, NULL);
-  return 0;
-}
-
diff --git a/gdb/testsuite/gdb.cell/core.exp b/gdb/testsuite/gdb.cell/core.exp
deleted file mode 100644 (file)
index 2de7562..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# This testcases tests mixed-architecture core file support
-
-load_lib cell.exp
-
-set testfile "coremaker"
-set ppu_file "coremaker"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "coremaker-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {![isnative]} then {
-    return 0
-}
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-# Run program to generate a core file -- see gdb.base/corefile.exp
-set found 0
-set coredir "${objdir}/${subdir}/coredir.[getpid]"
-file mkdir $coredir
-catch "system \"(cd ${coredir}; ulimit -c unlimited; ${ppu_bin}; true) >/dev/null 2>&1\""
-set names [glob -nocomplain -directory $coredir core.*]
-if {[llength $names] == 1} {
-    set corefile [file join $coredir [lindex $names 0]]
-    remote_exec build "mv $corefile ${objdir}/${subdir}/corefile"
-    set found 1
-}
-remote_exec build "rmdir $coredir"
-if { $found == 0  } {
-    warning "can't generate a core file - core tests suppressed - check ulimit -c"
-    return 0
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-send_gdb "core-file $objdir/$subdir/corefile\n"
-gdb_expect {
-    -re "Core was generated by .*coremaker.*\r\n\#0  .*\(\).*\r\n$gdb_prompt $" {
-       pass "core-file command"
-    }
-    -re "Core was generated by .*\r\n\#0  .*\(\).*\r\n$gdb_prompt $" {
-       pass "core-file command (with bad program name)"
-    }
-    -re ".*$gdb_prompt $"      { fail "core-file command" }
-    timeout                    { fail "(timeout) core-file command" }
-}
-
-gdb_test "backtrace" ".*abort.*main.*at.*$ppu_file.c.*"
-
-for {set thread_id 2} {$thread_id < 7} {incr thread_id} {
-  gdb_test "t $thread_id" \
-           "Switching to thread $thread_id.*" \
-           "switch to thread $thread_id"
-  gdb_test "backtrace" \
-          ".*terminal_func.*factorial_func.*value=1.*factorial_func.*value=2.*factorial_func.*value=3.*factorial_func.*value=4.*factorial_func.*value=5.*factorial_func.*value=6.*main.*speid.*argp.*envp.*at.*$spu_file.c.*<cross-architecture call>.*spe_context_run.*spe_thread.*at.*$ppu_file.c.*" \
-          "backtrace in thread $thread_id"
-}
-
-gdb_exit
-
-return 0
diff --git a/gdb/testsuite/gdb.cell/coremaker-spu.c b/gdb/testsuite/gdb.cell/coremaker-spu.c
deleted file mode 100644 (file)
index 472660d..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <spu_mfcio.h>
-
-void
-terminal_func ()
-{
-  spu_write_out_intr_mbox (0);
-  spu_read_in_mbox ();
-}
-
-int
-factorial_func (int value)
-{
-  if (value > 1)
-    value *= factorial_func (value - 1);
-
-  terminal_func ();
-  return value;
-}
-
-int
-main (unsigned long long speid, unsigned long long argp,
-      unsigned long long envp)
-{
-  factorial_func (6);
-  return 0;
-}
-
diff --git a/gdb/testsuite/gdb.cell/coremaker.c b/gdb/testsuite/gdb.cell/coremaker.c
deleted file mode 100644 (file)
index 741e948..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <libspe2.h>
-#include <pthread.h>
-#include <sys/wait.h>
-
-extern spe_program_handle_t coremaker_spu;
-#define nr_t 5
-
-void *
-spe_thread (void * arg)
-{
-  int flags = 0;
-  unsigned int entry = SPE_DEFAULT_ENTRY;
-  spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg;
-
-  spe_program_load (*ctx, &coremaker_spu);
-  spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL);
-
-  pthread_exit (NULL);
-}
-
-int
-main (void)
-{
-  int thread_id[nr_t];
-  pthread_attr_t attr;
-  pthread_t pts[nr_t];
-  spe_context_ptr_t ctx[nr_t];
-  unsigned int value;
-  int cnt;
-
-  /* Use small thread stacks to speed up writing out core file.  */
-  pthread_attr_init (&attr);
-  pthread_attr_setstacksize (&attr, 2*PTHREAD_STACK_MIN);
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    {
-      ctx[cnt] = spe_context_create (0, NULL);
-      thread_id[cnt]
-       = pthread_create (&pts[cnt], &attr, &spe_thread, &ctx[cnt]);
-    }
-
-  pthread_attr_destroy (&attr);
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    spe_out_intr_mbox_read (ctx[cnt], &value, 1, SPE_MBOX_ALL_BLOCKING);
-
-  abort ();
-}
-
diff --git a/gdb/testsuite/gdb.cell/data-spu.c b/gdb/testsuite/gdb.cell/data-spu.c
deleted file mode 100644 (file)
index 56efbbc..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-
-int
-main (unsigned long long speid, unsigned long long argp,
-      unsigned long long envp)
-{
-  char var_char = 'c';
-  short var_short = 7;
-  int var_int = 1337;
-  long var_long = 123456;
-  long long var_longlong = 123456789;
-  float var_float = 1.23;
-  double var_double = 2.3456;
-  long double var_longdouble = 3.45678;
-  return 0; /* Marker SPU End */
-}
-
diff --git a/gdb/testsuite/gdb.cell/data.c b/gdb/testsuite/gdb.cell/data.c
deleted file mode 100644 (file)
index 7c38461..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-#include <libspe2.h>
-#include <pthread.h>
-#include <sys/wait.h>
-
-extern spe_program_handle_t data_spu;
-#define nr_t 1
-
-void *
-spe_thread (void *arg)
-{
-  int flags = 0;
-  unsigned int entry = SPE_DEFAULT_ENTRY;
-  spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg;
-
-  spe_program_load (*ctx, &data_spu);
-  spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL);
-
-  pthread_exit (NULL);
-}
-
-int main (void)
-{
-  int thread_id[nr_t];
-  pthread_t pts[nr_t];
-  spe_context_ptr_t ctx[nr_t];
-
-  int cnt;
-
-  char var_char = 'c';
-  short var_short = 7;
-  int var_int = 1337;
-  long var_long = 123456;
-  long long var_longlong = 123456789;
-  float var_float = 1.23;
-  double var_double = 2.3456;
-  long double var_longdouble = 3.45678;
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    {
-      ctx[cnt] = spe_context_create(0, NULL);
-      thread_id[cnt]
-       = pthread_create (&pts[cnt], NULL, &spe_thread, &ctx[cnt]);
-    }
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    pthread_join (pts[cnt], NULL);
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    spe_context_destroy (ctx[cnt]);
-
-  return 0;
-}
diff --git a/gdb/testsuite/gdb.cell/data.exp b/gdb/testsuite/gdb.cell/data.exp
deleted file mode 100644 (file)
index f5c0d20..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# This testcases tries to read variables of each kind both on PPU and SPU.
-
-load_lib cell.exp
-
-set testfile "data"
-set ppu_file "data"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "data-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-proc check_var { name value } {
-  gdb_test "print $name" \
-          ".*=.*$value" \
-          "check_var $name = $value"
-}
-
-proc set_var { name value } {
-  gdb_test "set var $name = $value" \
-          "" \
-          "set var $name = $value"
-}
-
-proc dotest { name value } {
-  set_var $name $value
-  check_var $name $value
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-# Set values.
-dotest var_char 'z'
-dotest var_short 8
-dotest var_int 321
-dotest var_long 523442
-dotest var_longlong 235354533
-xfail "dotest var_float 33.2113"
-xfail "dotest var_double 2.3456"
-xfail "dotest var_longdouble 3.456789"
-
-gdb_test "break 55" \
-        "Breakpoint.*at.*file.*$testfile.c, line 55.*" \
-        "set breakpoint"
-gdb_test "continue" \
-        "Breakpoint.*at.*$testfile.c.*55.*" \
-        "continue to bp at line 55"
-
-# Lookup variables.
-check_var var_char 'c'
-check_var var_short 7
-check_var var_int 1337
-check_var var_long 123456
-check_var var_longlong 123456789
-xfail "check_var var_float 1.23"
-xfail "check_var var_double 2.3456"
-xfail "check_var var_longdouble 3.456789"
-
-cont_spu_main
-c_to "Marker SPU End" $spu_file.c
-
-# In SPU Thread, arch should now be spu:256K.
-check_spu_arch ""
-
-# Lookup variables.
-check_var var_char 'c'
-check_var var_short 7
-check_var var_int 1337
-check_var var_long 123456
-check_var var_longlong 123456789
-xfail "check_var var_float 1.23"
-xfail "check_var var_double 2.3456"
-xfail "check_var var_longdouble 3.456789"
-
-gdb_exit
-return 0
diff --git a/gdb/testsuite/gdb.cell/dwarfaddr.S b/gdb/testsuite/gdb.cell/dwarfaddr.S
deleted file mode 100644 (file)
index 543da3d..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright 2010-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   This file is part of the gdb testsuite.
-
-   Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
-   Tests for SPU addresses resulting from complex DWARF expressions.  */
-
-       .text
-main:
-.Ltext_s:
-.LFB1:
-       stqd        $1,-240($1)
-       ai          $1,$1,-240
-       ai          $2,$1,32
-       ai          $2,$2,127
-       il          $3,127
-       andc        $3,$2,$3
-       il          $2,1
-       lqd         $4,0($3)
-       cwd         $5,0($3)
-       shufb       $2,$2,$4,$5
-       stqd        $2,0($3)
-       lqd         $1,0($1)
-       bi          $0
-.LFE1:
-       .global main
-       .type   main,@function
-       .size   main,.LFE1-.LFB1
-.Ltext_e:
-
-       .section        .debug_info,"",@progbits
-.Ldebug_info_s:
-       .int    .debug_info_size-4
-       .short  0x2
-       .int    .Ldebug_abbrev_s
-       .byte   0x4
-.Ldie0:
-       .uleb128        0x1
-       .string "test.c"
-       .int    .Ltext_s
-       .int    .Ltext_e
-       .byte   0x1
-.Ldie1:
-       .uleb128        0x2
-       .string "int"
-       .byte   0x4
-       .byte   0x5
-.Ldie2:
-       .uleb128        0x3
-       .int    .Ldie4-.Ldebug_info_s
-       .int    .Ldie1-.Ldebug_info_s
-.Ldie3:
-       .uleb128        0x4
-       .byte   0
-       .byte   0xf
-       .uleb128        0
-.Ldie4:
-       .uleb128        0x5
-       .string "main"
-       .int    .LFB1
-       .int    .LFE1
-       .byte   0x1
-       .byte   0x1
-       .byte   0x3
-       .byte   0x1
-       .byte   0x1
-       .byte   0x51
-.Ldie5:
-       .uleb128        0x6
-       .byte   0xe
-       .byte   0x91
-       .sleb128        0x20
-       .byte   0xd
-       .int    0x7f
-       .byte   0x22
-       .byte   0xd
-       .int    0xffffff80
-       .byte   0x1a
-       .string "x"
-       .byte   0x1
-       .byte   0
-       .int    .Ldie2-.Ldebug_info_s
-       .uleb128        0
-       .uleb128        0
-.Ldebug_info_e:
-       .set    .debug_info_size,.Ldebug_info_e-.Ldebug_info_s
-
-
-       .section        .debug_abbrev,"",@progbits
-.Ldebug_abbrev_s:
-       .uleb128        0x1
-       .uleb128        0x11
-       .byte   0x1
-       .uleb128        0x3
-       .uleb128        0x8
-       .uleb128        0x11
-       .uleb128        0x1
-       .uleb128        0x12
-       .uleb128        0x1
-       .uleb128        0x13
-       .uleb128        0xb
-       .uleb128        0
-       .uleb128        0
-
-       .uleb128        0x2
-       .uleb128        0x24
-       .byte   0
-       .uleb128        0x3
-       .uleb128        0x8
-       .uleb128        0xb
-       .uleb128        0xb
-       .uleb128        0x3e
-       .uleb128        0xb
-       .uleb128        0
-       .uleb128        0
-
-       .uleb128        0x3
-       .uleb128        0x1
-       .byte   0x1
-       .uleb128        0x1
-       .uleb128        0x13
-       .uleb128        0x49
-       .uleb128        0x13
-       .uleb128        0
-       .uleb128        0
-
-       .uleb128        0x4
-       .uleb128        0x21
-       .byte   0
-       .uleb128        0x22
-       .uleb128        0xb
-       .uleb128        0x2f
-       .uleb128        0xb
-       .uleb128        0
-       .uleb128        0
-
-       .uleb128        0x5
-       .uleb128        0x2e
-       .byte   0x1
-       .uleb128        0x3
-       .uleb128        0x8
-       .uleb128        0x11
-       .uleb128        0x1
-       .uleb128        0x12
-       .uleb128        0x1
-       .uleb128        0x27
-       .uleb128        0xc
-       .uleb128        0x3a
-       .uleb128        0xb
-       .uleb128        0x3b
-       .uleb128        0xb
-       .uleb128        0x3f
-       .uleb128        0xc
-       .uleb128        0x40
-       .uleb128        0xa
-       .uleb128        0
-       .uleb128        0
-
-       .uleb128        0x6
-       .uleb128        0x34
-       .byte   0
-       .uleb128        0x2
-       .uleb128        0xa
-       .uleb128        0x3
-       .uleb128        0x8
-       .uleb128        0x3a
-       .uleb128        0xb
-       .uleb128        0x3b
-       .uleb128        0xb
-       .uleb128        0x49
-       .uleb128        0x13
-       .uleb128        0
-       .uleb128        0
-       .uleb128        0
-.Ldebug_abbrev_e:
-       .set    .debug_abbrev_size,.Ldebug_abbrev_e-.Ldebug_abbrev_s
-
diff --git a/gdb/testsuite/gdb.cell/dwarfaddr.exp b/gdb/testsuite/gdb.cell/dwarfaddr.exp
deleted file mode 100644 (file)
index b61cd53..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright 2010-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# This file is part of the gdb testsuite.
-#
-# Contributed by Ulrich Weigand  <uweigand@de.ibm.com>.
-# Tests for SPU addresses resulting from complex DWARF expressions.
-
-load_lib cell.exp
-
-set testfile "dwarfaddr"
-set srcfile ${srcdir}/${subdir}/${testfile}.S
-set binary [standard_output_file ${testfile}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $srcfile $binary executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binary}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-gdb_test "print x" " = \\{0 <repeats 16 times>\\}" "print x"
-gdb_test "print &x" " = \\(int \\(\\*\\)\\\[16\\\]\\) 0x\[0-9a-f\]*" "print &x"
-gdb_test "info address x" "Symbol \"x\" is a complex DWARF expression.*DW_OP_and\[\r\n\]+\." "info address x"
-
-gdb_exit
-
-return 0
diff --git a/gdb/testsuite/gdb.cell/ea-cache-spu.c b/gdb/testsuite/gdb.cell/ea-cache-spu.c
deleted file mode 100644 (file)
index 07b11c1..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-#include <spu_mfcio.h>
-
-__ea int *ppe_int_ptr;
-
-int
-main (unsigned long long speid, unsigned long long argp,
-      unsigned long long envp)
-{
-  printf ("spe.c | argp = 0x%llx\n", argp);
-
-#ifdef __EA32__
-  ppe_int_ptr = (__ea int *)(unsigned long)argp;
-#else
-  ppe_int_ptr = (__ea int *)argp;
-#endif
-  printf ("spe.c | value = %d\n", *ppe_int_ptr);
-  *ppe_int_ptr = 42; /* Marker SPUEA */
-  printf ("spe.c | value = %d\n", *ppe_int_ptr);
-
-  return 0;
-}
diff --git a/gdb/testsuite/gdb.cell/ea-cache.c b/gdb/testsuite/gdb.cell/ea-cache.c
deleted file mode 100644 (file)
index a0a828b..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-#include <libspe2.h>
-#include <pthread.h>
-#include <sys/wait.h>
-
-extern spe_program_handle_t ea_cache_spu;
-int int_var = 23;
-
-void *
-spe_thread (void *arg)
-{
-  int flags = 0;
-  unsigned int entry = SPE_DEFAULT_ENTRY;
-  spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg;
-
-  spe_program_load (*ctx, &ea_cache_spu);
-  spe_context_run (*ctx, &entry, flags, &int_var, NULL, NULL);
-
-  pthread_exit (NULL);
-}
-
-int
-main (void)
-{
-  spe_context_ptr_t ctx;
-  pthread_t pts;
-  int thread_id;
-
-  printf ("ppe.c | int_var vor %d | adr int_var %p\n", int_var, &int_var);
-
-  /* Create SPE context and pthread.  */
-  ctx = spe_context_create (0, NULL);
-  thread_id = pthread_create (&pts, NULL, &spe_thread, &ctx);
-
-  /* Join the pthread.  */
-  pthread_join (pts, NULL);
-
-  /* Destroy the SPE context.  */
-  spe_context_destroy (ctx);
-
-  printf ("ppe.c | int_var nach %d\n", int_var);
-
-  return 0;
-}
-
diff --git a/gdb/testsuite/gdb.cell/ea-cache.exp b/gdb/testsuite/gdb.cell/ea-cache.exp
deleted file mode 100644 (file)
index e9bb709..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# Testcase for ea software managed cache.
-
-load_lib cell.exp
-
-set ppu_file "ea-cache"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "ea-cache-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-# Set breakpoint in SPU binary.
-cont_spu_main
-c_to "Marker SPUEA" $spu_file.c
-
-gdb_test "p *ppe_int_ptr" \
-        ".*=.*23.*" \
-        "p *ppe_int_ptr"
-
-gdb_test "set *ppe_int_ptr=42" "" ""
-
-gdb_test "p *ppe_int_ptr" \
-        ".*=.*42.*" \
-        "p *ppe_int_ptr"
-
-# Now switch to thread 1 (PPU) and look at int_var.  ppe_int_ptr points to
-# int_var and should now also contain 42 (ea cache has been flushed).
-gdb_test "t 1" \
-        ".*Switching to thread 1.*" \
-        "switch to thread 1"
-
-gdb_test "p int_var" \
-        ".*=.*42.*" \
-        "p int_var on ppu"
-
-gdb_exit
-return 0
-
-
diff --git a/gdb/testsuite/gdb.cell/ea-standalone.c b/gdb/testsuite/gdb.cell/ea-standalone.c
deleted file mode 100644 (file)
index 20b9af3..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-#include <ea.h>
-
-int
-main (unsigned long long speid, unsigned long long argp,
-      unsigned long long envp)
-{
-  int a;
-  __ea int *myarray = malloc_ea (3 * sizeof (int));
-
-  memset_ea (myarray, 0, 3 * sizeof (int));
-  a = ++myarray[0]; /* Marker SPUEA1  */
-  printf("a: %d, myarray[0]: %d\n", a, myarray[0]); /* Marker SPUEA2  */
-  return 0;
-}
diff --git a/gdb/testsuite/gdb.cell/ea-standalone.exp b/gdb/testsuite/gdb.cell/ea-standalone.exp
deleted file mode 100644 (file)
index cae8e98..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# Testcase for ea software managed cache in a standalone binary.
-
-load_lib cell.exp
-
-set testfile "ea-standalone"
-set srcfile ${srcdir}/${subdir}/${testfile}.c
-set binary [standard_output_file ${testfile}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $srcfile $binary executable {debug}]  != "" } {
-  unsupported "failed to compile"
-  return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binary}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-c_to "Marker SPUEA1" $testfile.c
-gdb_test "p myarray\[0\]" \
-        ".*= 0" \
-        "p myarray\[0\]"
-
-c_to "Marker SPUEA2" $testfile.c
-gdb_test "p myarray\[0\]" \
-        ".*= 1" \
-        "p myarray\[0\]"
-gdb_test "call __cache_flush()" "" "call cache_flush()"
-gdb_test "p myarray\[0\]" \
-        ".*= 1" \
-        "p myarray\[0\]"
-
-gdb_exit
-return 0
-
-
diff --git a/gdb/testsuite/gdb.cell/ea-test.c b/gdb/testsuite/gdb.cell/ea-test.c
deleted file mode 100644 (file)
index efe49c5..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-
-__ea int *ppe_pointer;
-int *normal_pointer;
-
-int
-main (unsigned long long speid, unsigned long long argp,
-      unsigned long long envp)
-{
-  static __ea int *local_ppe_pointer;
-  static int *local_normal_pointer;
-  return 0;
-}
-
diff --git a/gdb/testsuite/gdb.cell/ea-test.exp b/gdb/testsuite/gdb.cell/ea-test.exp
deleted file mode 100644 (file)
index cbb02f1..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# Testcase for __ea pointer
-
-load_lib cell.exp
-
-set testfile "ea-test"
-set source ${srcdir}/${subdir}/${testfile}.c
-set binary [standard_output_file ${testfile}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $source $binary executable {debug}]  != "" } {
-  unsupported "failed to compile"
-  return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binary}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-# p
-gdb_test "p ppe_pointer" \
-        "(int.*@__ea).*0x0.*" \
-        "p ppe_pointer"
-
-gdb_test "p normal_pointer" \
-        "(int.*).*0x0.*" \
-        "p normal_pointer"
-
-gdb_test "p local_ppe_pointer" \
-        "(int.*@__ea).*0x0.*" \
-        "p local_ppe_pointer"
-
-gdb_test "p local_normal_pointer" \
-        "(int.*).*0x0.*" \
-        "p local_normal_pointer"
-
-# ptype
-gdb_test "ptype ppe_pointer" \
-        "type = int.*@__ea" \
-        "ptype ppe_pointer"
-
-gdb_test "ptype normal_pointer" \
-        "type = int.*" \
-        "ptype normal_pointer"
-
-gdb_test "ptype local_ppe_pointer" \
-        "type = int.*@__ea" \
-        "ptype local_ppe_pointer"
-
-gdb_test "ptype local_normal_pointer" \
-        "type = int.*" \
-        "ptype local_normal_pointer"
-
-# info locals
-gdb_test "info locals" \
-        ".*local_ppe_pointer =.*0x0.*local_normal_pointer =.*0x0.*" \
-        "info locals"
-
-# p &
-gdb_test "p &ppe_pointer" \
-        ".*=.*(int.*@__ea.*).*0x.*" \
-        "p &ppe_pointer"
-
-gdb_test "p &normal_pointer" \
-        ".*=.*(int.*).*0x.*" \
-        "p &normal_pointer"
-
-gdb_test "p &local_ppe_pointer" \
-        ".*=.*(int.*@__ea.*).*0x.*" \
-        "p &local_ppe_pointer"
-
-gdb_test "p &local_normal_pointer" \
-        ".*=.*(int.*).*0x.*" \
-        "p &local_normal_pointer"
-
-# ptype *
-gdb_test "ptype *ppe_pointer" \
-        "type = int" \
-        "ptype *ppe_pointer"
-
-gdb_test "ptype *normal_pointer" \
-        "type = int" \
-        "ptype *normal_pointer"
-
-gdb_test "ptype *local_ppe_pointer" \
-        "type = int" \
-        "ptype *local_ppe_pointer"
-
-gdb_test "ptype *local_normal_pointer" \
-        "type = int" \
-        "ptype *local_normal_pointer"
-
-gdb_exit
-
-return 0
-
-
diff --git a/gdb/testsuite/gdb.cell/f-regs.exp b/gdb/testsuite/gdb.cell/f-regs.exp
deleted file mode 100644 (file)
index a37c77a..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# This testcase tests access to SPU vector registers while language is fortran.
-
-load_lib cell.exp
-
-set ppu_file "break"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "break-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-proc check_vector_regs {} {
-  for {set check_reg 0} {$check_reg < 128} {incr check_reg} {
-
-    gdb_test "p \$r$check_reg" \
-            "r$check_reg.*=.*\(.*\).*" \
-            "p \$r$check_reg"
-
-    gdb_test "ptype \$r$check_reg" \
-            "type = Type,.*C_Union :: __spu_builtin_type_vec128.*int128_t :: uint128.*int64_t :: v2_int64.*int32_t :: v4_int32\(.*\).*int16_t :: v8_int16\(.*\).*int8_t :: v16_int8\(.*\).*double :: v2_double\(.*\).*float :: v4_float\(.*\).*End Type __spu_builtin_type_vec128.*" \
-            "ptype \$r$check_reg"
-  }
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-# No programm running, no registers should be available.
-gdb_test "info all-registers" \
-         "The program has no registers now." \
-         "info all-registers"
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-cont_spu_main
-gdb_test "set language fortran" \
-        "Warning: the current language does not match this frame.*" \
-        "set language fortran"
-check_vector_regs
-
-gdb_exit
-
-return 0
diff --git a/gdb/testsuite/gdb.cell/fork-spu.c b/gdb/testsuite/gdb.cell/fork-spu.c
deleted file mode 100644 (file)
index 7777165..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2010-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Ulrich Weigand <uweigand@de.ibm.com>  */
-
-#include <spu_mfcio.h>
-
-int var;
-
-void
-func (void)
-{
-}
-
-int
-main (unsigned long long speid, unsigned long long argp,
-      unsigned long long envp)
-{
-  /* Signal to PPU side that it should fork now.  */
-  spu_write_out_intr_mbox (0);
-
-  /* Wait until fork completed.  */
-  spu_read_in_mbox ();
-
-  /* Trigger watchpoint.  */
-  var = 1;
-
-  /* Now call some function to trigger breakpoint.  */
-  func ();
-
-  return 0;
-}
-
diff --git a/gdb/testsuite/gdb.cell/fork.c b/gdb/testsuite/gdb.cell/fork.c
deleted file mode 100644 (file)
index 240af47..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2010-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Ulrich Weigand <uweigand@de.ibm.com>  */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <libspe2.h>
-#include <pthread.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-extern spe_program_handle_t fork_spu;
-
-void *
-spe_thread (void * arg)
-{
-  int flags = 0;
-  unsigned int entry = SPE_DEFAULT_ENTRY;
-  spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg;
-
-  spe_program_load (*ctx, &fork_spu);
-  spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL);
-
-  pthread_exit (NULL);
-}
-
-int
-main (void)
-{
-  pthread_t pts;
-  spe_context_ptr_t ctx;
-  unsigned int value;
-  unsigned int pid;
-
-  ctx = spe_context_create (0, NULL);
-  pthread_create (&pts, NULL, &spe_thread, &ctx);
-
-  /* Wait until the SPU thread is running.  */
-  spe_out_intr_mbox_read (ctx, &value, 1, SPE_MBOX_ALL_BLOCKING);
-
-  pid = fork ();
-  if (pid == 0)
-    {
-      /* This is the child.  Just exit immediately.  */
-      exit (0);
-    }
-  else
-    {
-      /* This is the parent.  Wait for the child to exit.  */
-      waitpid (pid, NULL, 0);
-    }
-
-  /* Tell SPU to continue.  */
-  spe_in_mbox_write (ctx, &value, 1, SPE_MBOX_ALL_BLOCKING);
-  
-  pthread_join (pts, NULL);
-  spe_context_destroy (ctx);
-
-  return 0;
-}
-
diff --git a/gdb/testsuite/gdb.cell/fork.exp b/gdb/testsuite/gdb.cell/fork.exp
deleted file mode 100644 (file)
index 0092191..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# Copyright 2010-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# This testcases tests support for PPU-side fork during SPU debugging
-
-load_lib cell.exp
-
-set testfile "fork"
-set ppu_file "fork"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "fork-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-delete_breakpoints
-
-gdb_test_no_output "set spu stop-on-load" "set spu stop-on-load"
-
-gdb_test "continue" "Continuing\\..*Temporary breakpoint \[0-9\]+, main \\(speid=.*, argp=.*, envp=.*\\) at .*$spu_file\\.c:.*spu_write_out_intr_mbox.*" \
-        "run until SPU main"
-
-gdb_test "break func" "Breakpoint \[0-9\]+ at.* file .*$spu_file.c, line \[0-9\]+\\." "break func"
-gdb_test "watch var" "Watchpoint \[0-9\]+: var" "watch var"
-
-gdb_test "continue" "Continuing\\..*Watchpoint.*Old value = 0.*New value = 1.*" \
-        "run until watchpoint hit"
-
-gdb_test_no_output "delete \$bpnum" "delete watchpoint"
-
-gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, func \\(\\) at .*$spu_file.c:.*" \
-        "run until breakpoint hit"
-
-gdb_continue_to_end "" continue 1
-
-gdb_exit
-
-return 0
diff --git a/gdb/testsuite/gdb.cell/gcore.exp b/gdb/testsuite/gdb.cell/gcore.exp
deleted file mode 100644 (file)
index f586b75..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# This testcases tests mixed-architecture core file support
-
-load_lib cell.exp
-
-set testfile "coremaker"
-set ppu_file "coremaker"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "coremaker-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {![isnative]} then {
-    return 0
-}
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-delete_breakpoints
-
-gdb_test "continue" ".*Aborted.*"
-
-if {![gdb_gcore_cmd "${objdir}/${subdir}/gcore.test" \
-         "save a corefile"]} {
-    return -1
-}
-
-# Now restart gdb and load the corefile.
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-send_gdb "core-file $objdir/$subdir/gcore.test\n"
-gdb_expect {
-    -re "Core was generated by .*coremaker.*\r\n\#0  .*\(\).*\r\n$gdb_prompt $" {
-       pass "core-file command"
-    }
-    -re "Core was generated by .*\r\n\#0  .*\(\).*\r\n$gdb_prompt $" {
-       pass "core-file command (with bad program name)"
-    }
-    -re ".*$gdb_prompt $"      { fail "core-file command" }
-    timeout                    { fail "(timeout) core-file command" }
-}
-
-gdb_test "backtrace" ".*abort.*main.*at.*$ppu_file.c.*"
-
-for {set thread_id 2} {$thread_id < 7} {incr thread_id} {
-  gdb_test "t $thread_id" \
-           "Switching to thread $thread_id.*" \
-           "switch to thread $thread_id"
-  gdb_test "backtrace" \
-          ".*terminal_func.*factorial_func.*value=1.*factorial_func.*value=2.*factorial_func.*value=3.*factorial_func.*value=4.*factorial_func.*value=5.*factorial_func.*value=6.*main.*speid.*argp.*envp.*at.*$spu_file.c.*<cross-architecture call>.*spe_context_run.*spe_thread.*at.*$ppu_file.c.*" \
-          "backtrace in thread $thread_id"
-}
-
-gdb_exit
-
-return 0
diff --git a/gdb/testsuite/gdb.cell/mem-access-spu.c b/gdb/testsuite/gdb.cell/mem-access-spu.c
deleted file mode 100644 (file)
index 3baa3a2..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-
-int
-main (unsigned long long speid, unsigned long long argp,
-      unsigned long long envp)
-{
-  int i;
-  static int test_var;
-
-  printf ("Hello World! from spu\n");
-
-  test_var = 5;
-  i = 5; /* Marker SPUEA */
-  printf ("i = %d\n", i);
-
-  return 0;
-}
diff --git a/gdb/testsuite/gdb.cell/mem-access.c b/gdb/testsuite/gdb.cell/mem-access.c
deleted file mode 100644 (file)
index 442e8a2..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-#include <libspe2.h>
-#include <pthread.h>
-#include <sys/wait.h>
-
-extern spe_program_handle_t mem_access_spu;
-#define nr_t 1
-
-void *
-spe_thread (void *arg)
-{
-  int flags = 0;
-  unsigned int entry = SPE_DEFAULT_ENTRY;
-  spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg;
-
-  spe_program_load (*ctx, &mem_access_spu);
-  spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL);
-
-  pthread_exit (NULL);
-}
-
-int
-main (void)
-{
-  int thread_id[nr_t];
-  pthread_t pts[nr_t];
-  spe_context_ptr_t ctx[nr_t];
-  int value = 1;
-  int cnt;
-  static int test_var;
-
-  test_var = 5;
-  for (cnt = 0; cnt < nr_t; cnt++) /* Marker PPUEA */
-    {
-      ctx[cnt] = spe_context_create (0, NULL);
-      thread_id[cnt]
-       = pthread_create (&pts[cnt], NULL, &spe_thread, &ctx[cnt]);
-    }
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    pthread_join (pts[cnt], NULL);
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    spe_context_destroy (ctx[cnt]);
-
-  return 0;
-}
-
diff --git a/gdb/testsuite/gdb.cell/mem-access.exp b/gdb/testsuite/gdb.cell/mem-access.exp
deleted file mode 100644 (file)
index 86d2294..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# This testcases tests on PPU and SPU if variables and registers are accessible
-# via print and set by using names and adresses.
-
-load_lib cell.exp
-
-set ppu_file "mem-access"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "mem-access-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-# Get the adress to symbol name. If $reg
-# is set to 1, get address from a register.
-proc get_adress_from_name { name reg } {
-  global gdb_prompt
-  set adr ""
-
-  if { $reg == 1 } {
-    set q "x/x $name"
-  } else {
-    set q "x/x &$name"
-  }
-
-  gdb_test_multiple $q "get address from $name" {
-    -re "(0x.....):.*$gdb_prompt $" { # Registers.
-      set adr $expect_out(1,string)
-      pass "get adress from $name = $adr"
-    }
-    -re "(0x........) <.*$gdb_prompt $" { # PPU address.
-      set adr $expect_out(1,string)
-      pass "get adress from $name = $adr"
-    }
-    -re "(0x....) <.*$gdb_prompt $" { # SPU address.
-      set adr $expect_out(1,string)
-      pass "get adress from $name = $adr"
-    }
-    -re "(0x...) <.*$gdb_prompt $" { # SPU address.
-      set adr $expect_out(1,string)
-      pass "get adress from $name = $adr"
-    }
-  }
-
-  return ${adr}
-}
-
-# Try to set a $value at adress $adr.
-proc set_adr_content { adr value } {
-  gdb_test "set *$adr=$value" \
-          "" \
-          "set *$adr=$value"
-}
-
-# Try to set a $value for $symbol.
-proc set_symbol_content { symbol value } {
-  gdb_test "set $symbol=$value" \
-          "" \
-          "set *$symbol=$value"
-}
-
-# Check if $value is at *adr
-proc test_adr_content { adr value } {
-  gdb_test "p *$adr" \
-           ".*=.*$value.*" \
-           "(ptr) *$adr==$value"
-}
-
-proc test_symbol_content { symbol value } {
-  gdb_test "p $symbol" \
-          ".*=.*$value.*" \
-          "(symbol) $symbol==$value"
-}
-
-# Check VARNAME. Check if it has the inital
-# value INITIALVALUE. Set it to NEWVALUE.
-# Check if set properly. Do it via symbols and
-# pointers.
-proc check_var { varname initalvalue newvalue } {
-
-  # Initial value should be $initalvalue.
-  test_symbol_content $varname $initalvalue
-
-  # Get pointer to symbol and check if the
-  # initial value is found.
-  set adr [get_adress_from_name $varname 0]
-  test_adr_content $adr $initalvalue
-
-  # Re-set value using the pointer.
-  set_adr_content $adr $newvalue
-
-  # Test values by pointer and by symbol.
-  test_adr_content $adr $newvalue
-  test_symbol_content $varname $newvalue
-
-  # Set value back to initalvalue using symbol
-  # name and check it.
-  set_symbol_content $varname $initalvalue
-  test_adr_content $adr $initalvalue
-  test_symbol_content $varname $initalvalue
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-# Check in PPU thread.
-c_to "Marker PPUEA" $ppu_file.c
-check_var "test_var" 5 7
-
-# Go to SPU thread.
-cont_spu_main
-c_to "Marker SPUEA" $spu_file.c
-check_spu_arch ""
-
-# Check in SPU thread.
-check_var "test_var" 5 7
-# Check $sp register.
-set adr [get_adress_from_name "\$sp" 1]
-set_adr_content $adr 8
-test_adr_content $adr 8
-
-gdb_exit
-return 0
diff --git a/gdb/testsuite/gdb.cell/ptype.exp b/gdb/testsuite/gdb.cell/ptype.exp
deleted file mode 100644 (file)
index 39311e7..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# Test ptype and print/set of SPU-side registers.
-
-load_lib cell.exp
-
-set ppu_file "break"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "break-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-# Continue to SPU
-cont_spu_main
-
-gdb_test "info registers r2"  \
-        "r2.*\{uint128 =.*v2_int64 =.*v4_int32 =.*v8_int16 =.*v16_int8 =.*v2_double =.*v4_float =.*\}.*" \
-        "info registers r2"
-
-for {set check_reg 10} {$check_reg < 12} {incr check_reg} {
-  gdb_test "print \$r$check_reg\.v4_int32" \
-          ".*= \{.*,.*,.*,.*\}" \
-          "print \$r$check_reg\.v4_int32"
-
-  gdb_test "ptype \$r$check_reg" \
-          "type = union __spu_builtin_type_vec128.*\{.*int128_t uint128.* \
-           int64_t v2_int64.*int32_t v4_int32.*int16_t v8_int16.* \
-           int8_t v16_int8.*double v2_double.*float v4_float.*\}" \
-          "ptype \$r$check_reg"
-
-  gdb_test "set \$r$check_reg\.v4_int32 = {1,2,3,4}" \
-          "" \
-          "set \$r$check_reg\.v4_int32 = {1,2,3,4}"
-
-  gdb_test "print \$r$check_reg\.v4_int32" \
-          ".*= \{.*1, 2, 3, 4.*\}" \
-          "print \$r$check_reg\.v4_int32"
-
-  gdb_test "print \$r$check_reg.v4_int32\[0\]" \
-          ".*= 1.*" \
-          "print \$r$check_reg.v4_int32\[0\]"
-
-  gdb_test "print \$r$check_reg.v4_int32\[1\]" \
-          ".*= 2.*" \
-          "print \$r$check_reg.v4_int32\[1\]"
-
-  gdb_test "print \$r$check_reg.v4_int32\[2\]" \
-          ".*= 3.*" \
-          "print \$r$check_reg.v4_int32\[2\]"
-
-  gdb_test "print \$r$check_reg.v4_int32\[3\]" \
-          ".*= 4.*" \
-          "print \$r$check_reg.v4_int32\[3\]"
-
-  gdb_test "print \$r$check_reg.v4_int32\[4\]" \
-          "no such vector element" \
-          "print \$r$check_reg.v4_int32\[4\]"
-
-  # Set single array elements to other values and check the results.
-  gdb_test "set \$r$check_reg\.v4_int32\[0\] = 5" \
-          "" \
-          "set \$r$check_reg\.v4_int32\[0\] = 5"
-  gdb_test "print \$r$check_reg.v4_int32\[0\]" \
-          ".*= 5.*" \
-          "print \$r$check_reg.v4_int32\[0\]"
-
-  gdb_test "set \$r$check_reg\.v4_int32\[1\] = 6" \
-          "" \
-          "set \$r$check_reg\.v4_int32\[1\] = 6"
-  gdb_test "print \$r$check_reg.v4_int32\[1\]" \
-          ".*= 6.*" \
-          "print \$r$check_reg.v4_int32\[1\]"
-
-  gdb_test "set \$r$check_reg\.v4_int32\[2\] = 7" \
-          "" \
-          "set \$r$check_reg\.v4_int32\[2\] = 7"
-  gdb_test "print \$r$check_reg.v4_int32\[2\]" \
-          ".*= 7.*" \
-          "print \$r$check_reg.v4_int32\[2\]"
-
-  gdb_test "set \$r$check_reg\.v4_int32\[3\] = 8" \
-          "" \
-          "set \$r$check_reg\.v4_int32\[3\] = 8"
-  gdb_test "print \$r$check_reg.v4_int32\[3\]" \
-          ".*= 8.*" \
-          "print \$r$check_reg.v4_int32\[3\]"
-
-  # Now there should be {5, 6, 7, 8} in that array.
-  gdb_test "print \$r$check_reg\.v4_int32" \
-          ".*= \{.*5, 6, 7, 8.*\}" \
-          "print \$r$check_reg\.v4_int32"
-}
-
-gdb_exit
-return 0
diff --git a/gdb/testsuite/gdb.cell/registers.exp b/gdb/testsuite/gdb.cell/registers.exp
deleted file mode 100644 (file)
index c4d2710..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# This testcase tests registers on PPU and SPU.
-
-load_lib cell.exp
-
-set ppu_file "break"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "break-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-# No programm running, no registers should be available.
-gdb_test "info all-registers" \
-         "The program has no registers now." \
-         "info all-registers"
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-# Check registers in PPU thread.
-gdb_test "info reg r0" "r0.*" "info register r0"
-gdb_test "info reg r31" "r31.*" "info register r31"
-gdb_test "info reg r32" "Invalid register.*r32.*" "(invalid) info register r32"
-gdb_test "info reg pc" "pc.*" "info register pc"
-gdb_test "info reg cr" "cr.*" "info register cr"
-gdb_test "info reg lr" "lr.*" "info register lr"
-gdb_test "info reg ctr" "ctr.*" "info register ctr"
-gdb_test "info reg xer" "xer.*" "info register xer"
-
-# Continue to SPU thread.
-cont_spu_main
-
-# In SPU thread, check SPU registers.
-for {set check_reg 0} {$check_reg < 128} {incr check_reg} {
-  gdb_test "info reg r$check_reg" \
-          "r$check_reg.*uint128.*=.*v2\_int64.*v4\_int32.*v8\_int16.*v16\_int8.*v2\_double.*v4\_float.*" \
-          "info register r$check_reg"
-}
-gdb_test "info reg r128" \
-        "Invalid register.*r128.*" \
-        "(invalid) info register r128"
-
-gdb_test "info reg pc" "pc.*main.*" "info register pc"
-gdb_test "info reg id" "id.*" "info register id"
-gdb_test "info reg sp" "sp.*" "info register sp"
-gdb_test "info reg fpscr" "fpscr.*" "info register fpscr"
-gdb_test "info reg srr0" "srr0.*" "info register srr0"
-gdb_test "info reg lslr" "lslr.*" "info register lslr"
-gdb_test "info reg decr" "decr.*" "info register decr"
-gdb_test "info reg decr_status" "decr_status.*" "info register decr-status"
-
-gdb_test "info reg cr" "Invalid register.*cr.*" "info register cr"
-gdb_test "info reg lr" "Invalid register.*lr.*" "info register lr"
-gdb_test "info reg ctr" "Invalid register.*ctr.*" "info register ctr"
-gdb_test "info reg xer" "Invalid register.*xer.*" "info register xer"
-
-gdb_exit
-return 0
diff --git a/gdb/testsuite/gdb.cell/size-spu.c b/gdb/testsuite/gdb.cell/size-spu.c
deleted file mode 100644 (file)
index 4d8b881..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-
-
-int
-main (unsigned long long speid, unsigned long long argp,
-      unsigned long long envp)
-{
-  int c  = sizeof (char); /* Break here.  */
-  printf ("sizeof(char)=%d\n", c);
-
-  int s  = sizeof (short);
-  printf ("sizeof(short)=%d\n", s);
-
-  int i  = sizeof (int);
-  printf ("sizeof(int)=%d\n", i);
-
-  int l  = sizeof (long);
-  printf ("sizeof(long)=%d\n", l);
-
-  int ll = sizeof (long long);
-  printf ("sizeof(long long)=%d\n", ll);
-
-  int f  = sizeof (float);
-  printf ("sizeof(float)=%d\n", f);
-
-  int d  = sizeof (double);
-  printf ("sizeof(double)=%d\n", d);
-
-  int ld = sizeof (long double);
-  printf ("sizeof(long double)=%d\n", ld);
-
-  return 0;
-}
-
diff --git a/gdb/testsuite/gdb.cell/size.c b/gdb/testsuite/gdb.cell/size.c
deleted file mode 100644 (file)
index be9c8d3..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-
-   Contributed by Markus Deuling <deuling@de.ibm.com>  */
-
-#include <stdio.h>
-#include <libspe2.h>
-#include <pthread.h>
-#include <sys/wait.h>
-
-extern spe_program_handle_t size_spu;
-#define nr_t 1
-
-void *
-spe_thread (void *arg)
-{
-  int flags = 0;
-  unsigned int entry = SPE_DEFAULT_ENTRY;
-  spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg;
-
-  spe_program_load (*ctx, &size_spu);
-  spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL);
-
-  pthread_exit (NULL);
-}
-
-int
-main (void)
-{
-  int thread_id[nr_t];
-  pthread_t pts[nr_t];
-  spe_context_ptr_t ctx[nr_t];
-  int cnt;
-
-  int c  = sizeof (char);
-  printf ("sizeof(char)=%d\n", c);
-
-  int s  = sizeof (short);
-  printf ("sizeof(short)=%d\n", s);
-
-  int i  = sizeof (int);
-  printf ("sizeof(int)=%d\n", i);
-
-  int l  = sizeof (long);
-  printf ("sizeof(long)=%d\n", l);
-
-  int ll = sizeof (long long);
-  printf ("sizeof(long long)=%d\n", ll);
-
-  int f  = sizeof (float);
-  printf ("sizeof(float)=%d\n", f);
-
-  int d  = sizeof (double);
-  printf ("sizeof(double)=%d\n", d);
-
-  int ld = sizeof (long double);
-  printf ("sizeof(long double)=%d\n", ld);
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    {
-      ctx[cnt] = spe_context_create (0, NULL);
-      thread_id[cnt]
-       = pthread_create (&pts[cnt], NULL, &spe_thread, &ctx[cnt]);
-    }
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    pthread_join (pts[cnt], NULL);
-
-  for (cnt = 0; cnt < nr_t; cnt++)
-    spe_context_destroy (ctx[cnt]);
-
-  return 0;
-}
diff --git a/gdb/testsuite/gdb.cell/sizeof.exp b/gdb/testsuite/gdb.cell/sizeof.exp
deleted file mode 100644 (file)
index 8ea69e6..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# Check size of data types both on PPU and SPU.
-
-load_lib cell.exp
-
-set ppu_file "size"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "size-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-
-# Ask GDB about the sizes of data types.  This has
-# to be done in PPU thread and SPU thread.
-proc get_gdb_size { type } {
-  global gdb_prompt
-
-  set val "0"
-  gdb_test_multiple "print/d sizeof(${type})" "get sizeof(${type})" {
-    -re "\\$\[0-9\]* = (\[-\]*\[0-9\]*).*$gdb_prompt $" {
-       set val $expect_out(1,string)
-       pass "get sizeof ($type) = $val"
-    }
-  }
-  return ${val}
-}
-
-# Compare sizes from GDB and sizeof().
-proc size_compare { type gdb_size } {
-  set expr [string_to_regexp "sizeof(${type})=${gdb_size}"]
-  gdb_test "next" \
-           ".*" \
-           "next"
-  # Checks against string_to_regexp fails in remote testing.
-  if ![is_remote target] {
-    gdb_test "next" \
-             "${expr}.*" \
-             "check sizeof \"$type\" \"$gdb_size\" "
-  } else {
-    gdb_test "next" ".*" "check sizeof deactivate in remote testing"
-  }
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-# Compare sizes.
-size_compare "char" [get_gdb_size "char"]
-size_compare "short" [get_gdb_size "short"]
-size_compare "int" [get_gdb_size "int"]
-size_compare "long" [get_gdb_size "long"]
-size_compare "long long" [get_gdb_size "long long"]
-size_compare "float" [get_gdb_size "float"]
-size_compare "double" [get_gdb_size "double"]
-size_compare "long double" [get_gdb_size "long double"]
-
-# Continue to SPU thread.
-cont_spu_main
-check_spu_arch ""
-
-# Compare sizes in SPU thread.
-size_compare "char" [get_gdb_size "char"]
-size_compare "short" [get_gdb_size "short"]
-size_compare "int" [get_gdb_size "int"]
-size_compare "long" [get_gdb_size "long"]
-size_compare "long long" [get_gdb_size "long long"]
-size_compare "float" [get_gdb_size "float"]
-size_compare "double" [get_gdb_size "double"]
-size_compare "long double" [get_gdb_size "long double"]
-
-gdb_exit
-return 0
diff --git a/gdb/testsuite/gdb.cell/solib-symbol.exp b/gdb/testsuite/gdb.cell/solib-symbol.exp
deleted file mode 100644 (file)
index 685ccf5..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# Testcase for multiple symbol disambiguation patch.
-
-load_lib cell.exp
-
-set ppu_file "break"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "break-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-# Symbol resolved in PPU thread.
-gdb_test "info symbol foo" \
-        "foo in section \.text of .*$ppu_file\[\r\n\]+.*" \
-        "info symbol foo in break"
-
-# Continue to SPU
-cont_spu_main
-check_spu_arch ""
-
-# Symbol resolved in SPU thread.
-gdb_test "info symbol foo" \
-        "foo in section \.text of .*$spu_file@.*" \
-        "info symbol foo in break-spu"
-
-gdb_exit
-return 0
diff --git a/gdb/testsuite/gdb.cell/solib.exp b/gdb/testsuite/gdb.cell/solib.exp
deleted file mode 100644 (file)
index d6ed65d..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Testsuite for Cell Broadband Engine combined debugger
-# This testcase checks 'info sharedlibrary ' command.
-
-load_lib cell.exp
-
-set ppu_file "break"
-set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
-set ppu_bin [standard_output_file ${ppu_file}]
-set spu_file "break-spu"
-set spu_src ${srcdir}/${subdir}/${spu_file}.c
-set spu_bin [standard_output_file ${spu_file}]
-
-if {[skip_cell_tests]} {
-    return 0
-}
-
-# Compile SPU binary.
-if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
-  unsupported "compiling spu binary failed."
-  return -1
-}
-# Compile PPU binary.
-if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
-  unsupported "embedding spu binary failed."
-  return -1
-}
-if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
-  unsupported "compiling ppu binary failed."
-  return -1
-}
-
-if [get_compiler_info] {
-  return -1
-}
-
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${ppu_bin}
-
-# No programm running, no libraries should be loaded.
-gdb_test "info sharedlibrary" \
-        "No shared libraries loaded at this time." \
-        "no shared library is loaded"
-
-if ![runto_main] then {
-  fail "can't run to main"
-  return 0
-}
-
-# Standing in PPU thread, now some libs should be loaded
-# including libspe library.
-gdb_test "info sharedlibrary" \
-        "From.*To.*Syms Read.*Shared Object Library.*libspe.*" \
-        "binary started, some libraries loaded"
-
-# Continue to SPU
-cont_spu_main
-check_spu_arch ""
-
-# In SPU thread now, the SPU binary should now appear in the list
-# of shared libraries.
-gdb_test "info sharedlibrary" \
-        "From.*To.*Syms Read.*Shared Object Library.*libspe.*$spu_bin.*@.*x.*" \
-        "spu thread, spu binary as shared library"
-
-gdb_exit
-return 0
index 920b02a84aafb95b1604ccc4e06c995c6ea73ad0..f238f5188af4809a6bf95954e6706052ea0fabfc 100644 (file)
 
 if { [skip_stl_tests] } { continue }
 
-# On SPU this test fails because the executable exceeds local storage size.
-if { [istarget "spu*-*-*"] } {
-        return 0
-}
-
 standard_testfile .cc
 
 if [get_compiler_info] {
index ecf3a2fbc8d2774676c21198417701cdda25b978..d7decaf542694a6ab570c03fb0faa43f54049007 100644 (file)
@@ -681,11 +681,6 @@ add {policyd5::function} \
 # Start the test
 if {[skip_cplus_tests]} { continue }
 
-# On SPU this test fails because the executable exceeds local storage size.
-if { [istarget "spu*-*-*"] } {
-        return 0
-}
-
 #
 # test running programs
 #
index 0be382ba98c24a3a8d65c1025c2d10aa43bccc0d..13631df1290ba988821f005da602b84e6d1b0e8a 100644 (file)
@@ -35,11 +35,6 @@ set nl       "\[\r\n\]+"
 
 if { [skip_stl_tests] } { continue }
 
-# On SPU this test fails because the executable exceeds local storage size.
-if { [istarget "spu*-*-*"] } {
-        return 0
-}
-
 standard_testfile .cc
  
 if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
index bcb6c5eb6d7834640824a9cde7c56ec22fa9d519..a7de2ccbc2a0c596c1ffbeabd57b007e6a7bd027 100644 (file)
@@ -38,11 +38,6 @@ if [target_info exists gdb,nosignals] {
     continue
 }
 
-# On SPU this test fails because the executable exceeds local storage size.
-if { [istarget "spu*-*-*"] } {
-        return 0
-}
-
 standard_testfile .cc
 
 # Create and source the file that provides information about the compiler
index ad42ef6e395f6ad2e81480c57107e9426b445f1c..5946c0b25cb1988d6fc51ac860be4a63eb51cde6 100644 (file)
 
 if { [skip_stl_tests] } { continue }
 
-# On SPU this test fails because the executable exceeds local storage size.
-if { [istarget "spu*-*-*"] } {
-        return 0
-}
-
 
 standard_testfile .cc
 
index e8a7722cb4648ec507a1066c7b7c908a8cf39aee..214225233af1a5f00bf3090989ba288839534bda 100644 (file)
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# On SPU this test fails because the executable exceeds local storage size.
-if { [istarget "spu*-*-*"] } {
-        return 0
-}
-
 standard_testfile .cc
 
 if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
index dad9be36adcb332c9d08105952e7ac1bfe049930..7907593ec3010807d4691325745b8ed59678f345 100644 (file)
 
 if { [skip_stl_tests] } { continue }
 
-# On SPU this test fails because the executable exceeds local storage size.
-if { [istarget "spu*-*-*"] } {
-        return 0
-}
-
 standard_testfile .cc
 
 if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
index 35fcc0005dcd77c8d4cbd53e1d764cc5efdced8d..efd2227dd543224e229ef7f4dc263d1b0dec3139 100644 (file)
@@ -69,16 +69,6 @@ switch -glob -- [istarget] {
        set regdir "sparc/"
         set core-regs {sparc64-cpu.xml sparc64-fpu.xml sparc64-cp0.xml}
     }
-    "spu*-*-*" {
-       # This may be either the spu-linux-nat target, or the Cell/B.E.
-       # multi-architecture debugger in SPU standalone executable mode.
-       # We do not support XML register sets on SPU in either case.
-       # However, the multi-arch debugger will accept XML registers sets
-       # (on the PowerPC side), hence the test below would fail.
-       # Simply return unconditionally here.
-       unsupported "register tests"
-       return 0
-    }
     "tic6x-*-*" {
        set core-regs {tic6x-core.xml}
     }
diff --git a/gdb/testsuite/lib/cell.exp b/gdb/testsuite/lib/cell.exp
deleted file mode 100644 (file)
index 4a32805..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-# Copyright 2009-2019 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# Contributed by Markus Deuling <deuling@de.ibm.com>.
-#
-# Support library for testing the combined debugger for Linux
-# on the Cell Broadband Engine.
-
-# Compile SPU objects.
-proc gdb_compile_cell_spu {source dest type options} {
-  global board
-
-  # Save and unset multilib flags; these are not appropriate
-  # for the SPU compiler.
-  set board [target_info name]
-  set save_multilib_flag [board_info $board multilib_flags]
-  unset_board_info "multilib_flags"
-
-  set options_spu [concat $options [list compiler=spu-gcc]]
-  set ccout [gdb_compile $source $dest $type $options_spu]
-
-  set_board_info multilib_flags $save_multilib_flag
-  return $ccout
-}
-
-# Compile PPU objects.  This is just like gdb_compile_pthreads, except that we
-# always add the libspe2 library for compiling Cell/B.E. programs.
-proc gdb_compile_cell_ppu {source dest type options} {
-    # We do not need to try multiple names for the pthread library
-    # -lpthread works on all Cell/B.E. systems
-    set lib "-lspe2 -lpthread"
-    set options_ppu [concat $options [list libs=$lib]]
-    return [gdb_compile $source $dest $type $options_ppu]
-}
-
-# Embed SPU executable into a PPU object.
-proc gdb_cell_embedspu {source dest options} {
-    global CC_FOR_TARGET
-
-    if [info exists CC_FOR_TARGET] {
-        set compiler $CC_FOR_TARGET
-    } else {
-       set compiler [board_info [target_info name] compiler]
-    }
-
-    # We assume the PPU compiler is called gcc or ppu-gcc,
-    # and find the appropriate embedspu based on that.
-    regsub gcc "$compiler" embedspu embedspu
-
-    # Determine default embedded symbol name from source filename.
-    set path [split "$source" /]
-    set filename [lindex $path [expr [llength $path] - 1]]
-    regsub -all -- "\[-\.\]" "$filename" "_" symbol
-
-    set options_embed [concat $options [list compiler=$embedspu]]
-    return [gdb_compile "$symbol $source $dest" "" none $options_embed]
-}
-
-# Run a test on the target to see if it supports Cell/B.E. hardware.
-# Return 0 if so, 1 if it does not.
-gdb_caching_proc skip_cell_tests {
-    global srcdir subdir gdb_prompt inferior_exited_re
-
-    set me "skip_cell_tests"
-
-    # Set up, compile, and execute a combined Cell/B.E. test program.
-    # Include the current process ID in the file names to prevent conflicts
-    # with invocations for multiple testsuites.
-    set src [standard_temp_file cell[pid].c]
-    set exe [standard_temp_file cell[pid].x]
-    set src_spu [standard_temp_file cell[pid]-spu.c]
-    set exe_spu [standard_temp_file cell[pid]-spu.x]
-
-    set f [open $src "w"]
-    puts $f "#include <libspe2.h>"
-    puts $f "extern spe_program_handle_t cell[pid]_spu_x;"
-    puts $f "int main (void) {"
-    puts $f "unsigned int entry = SPE_DEFAULT_ENTRY;"
-    puts $f "spe_context_ptr_t ctx = spe_context_create (0, NULL);"
-    puts $f "spe_program_load (ctx, &cell[pid]_spu_x);"
-    puts $f "return spe_context_run (ctx, &entry, 0, NULL, NULL, NULL); }"
-    close $f
-
-    set f [open $src_spu "w"]
-    puts $f "int main (void) { return 0; }"
-    close $f
-
-    verbose "$me:  compiling testfile $src" 2
-    set compile_flags {debug nowarnings quiet}
-
-    set skip 0
-    if { [gdb_compile_cell_spu $src_spu $exe_spu executable $compile_flags] != "" } {
-        verbose "$me:  compiling spu binary failed, returning 1" 2
-       set skip 1
-    }
-    if { ! $skip && [gdb_cell_embedspu $exe_spu $exe_spu-embed.o $compile_flags]  != "" } {
-        verbose "$me:  embedding spu binary failed, returning 1" 2
-       set skip 1
-    }
-    if { ! $skip && [gdb_compile_cell_ppu [list $src $exe_spu-embed.o] $exe executable $compile_flags] != "" } {
-        verbose "$me:  compiling ppu binary failed, returning 1" 2
-       set skip 1
-    }
-    file delete $src
-    file delete $src_spu
-    file delete $exe_spu
-    file delete $exe_spu-embed.o
-
-    if { $skip } {
-        return 1
-    }
-
-    # Compilation succeeded so now run it via gdb.
-
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load "$exe"
-    gdb_run_cmd
-    gdb_expect {
-        -re ".*$inferior_exited_re normally.*${gdb_prompt} $" {
-            verbose -log "\n$me: Cell/B.E. hardware detected"
-            set result 0
-        }
-        -re ".*$inferior_exited_re with code.*${gdb_prompt} $" {
-            verbose -log "\n$me: Cell/B.E. hardware not detected"
-            set result 1
-        }
-        default {
-            unresolved "$me: unexpected failure"
-            set result 1
-        }
-    }
-    gdb_exit
-    remote_file build delete $exe
-
-    verbose "$me:  returning $result" 2
-    return $result
-}
-
-# Delete all breakpoints and stop on the next new SPU thread
-proc cont_spu_main { } {
-  delete_breakpoints
-  gdb_test "set spu stop-on-load on"
-  gdb_test "continue" \
-           "Continuing.*Temporary breakpoint .*main .*" \
-           "continue to SPU main"
-}
-
-# Continue to MARKER
-proc c_to { marker srcfile } {
-  set line [gdb_get_line_number $marker $srcfile]
-  gdb_test "break $line" \
-          "Breakpoint.*at.*file.*$srcfile.*line $line.*" \
-          "break $line"
-  gdb_test "continue" \
-          "Continuing.*Breakpoint.*at.*$srcfile.*$line.*" \
-          "continue to $line"
-}
-
-# Check if the current thread has SPU architecture
-proc check_spu_arch { msg } {
-  if { $msg == "" } {
-    set msg "spu architecture is spu256K"
-  }
-  gdb_test "show architecture" \
-          "The target architecture is set automatically.*currently spu:256K.*" \
-          $msg
-}
This page took 0.187968 seconds and 4 git commands to generate.