public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Remove Cell Broadband Engine debugging support
@ 2019-09-20 21:09 Ulrich Weigand
  0 siblings, 0 replies; only message in thread
From: Ulrich Weigand @ 2019-09-20 21:09 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=abf516c6931af1683d1e51203de1ca01467f9f85

commit abf516c6931af1683d1e51203de1ca01467f9f85
Author: Ulrich Weigand <ulrich.weigand@de.ibm.com>
Date:   Fri Sep 20 23:06:57 2019 +0200

    Remove Cell Broadband Engine debugging support
    
    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.

Diff:
---
 gdb/ChangeLog                             |   86 +
 gdb/MAINTAINERS                           |    3 -
 gdb/Makefile.in                           |    9 -
 gdb/NEWS                                  |    6 +
 gdb/arch/ppc-linux-common.c               |    8 +-
 gdb/arch/ppc-linux-common.h               |    2 -
 gdb/arch/ppc-linux-tdesc.h                |    2 -
 gdb/config/djgpp/fnchange.lst             |    9 -
 gdb/configure.host                        |    8 +-
 gdb/configure.nat                         |   17 -
 gdb/configure.tgt                         |    9 +-
 gdb/corelow.c                             |   88 -
 gdb/doc/ChangeLog                         |    7 +
 gdb/doc/gdb.texinfo                       |  113 --
 gdb/features/Makefile                     |    6 +-
 gdb/features/rs6000/powerpc-cell32l.c     |  162 --
 gdb/features/rs6000/powerpc-cell32l.xml   |   19 -
 gdb/features/rs6000/powerpc-cell64l.c     |  162 --
 gdb/features/rs6000/powerpc-cell64l.xml   |   19 -
 gdb/gdbserver/ChangeLog                   |   40 +
 gdb/gdbserver/configure.srv               |    9 +-
 gdb/gdbserver/linux-low.c                 |   98 -
 gdb/gdbserver/linux-ppc-ipa.c             |    6 -
 gdb/gdbserver/linux-ppc-low.c             |  106 +-
 gdb/gdbserver/linux-ppc-tdesc-init.h      |    8 +-
 gdb/gdbserver/lynx-low.c                  |    1 -
 gdb/gdbserver/nto-low.c                   |    1 -
 gdb/gdbserver/server.c                    |   20 -
 gdb/gdbserver/spu-low.c                   |  732 --------
 gdb/gdbserver/target.h                    |    4 -
 gdb/gdbserver/win32-low.c                 |    1 -
 gdb/linux-nat.c                           |  129 --
 gdb/linux-tdep.c                          |   72 -
 gdb/nat/ppc-linux.h                       |    3 -
 gdb/ppc-linux-nat.c                       |    3 -
 gdb/ppc-linux-tdep.c                      |  317 ----
 gdb/regcache.c                            |   21 +-
 gdb/regformats/reg-spu.dat                |  133 --
 gdb/regformats/rs6000/powerpc-cell32l.dat |  112 --
 gdb/regformats/rs6000/powerpc-cell64l.dat |  112 --
 gdb/remote.c                              |   25 -
 gdb/rs6000-tdep.c                         |   10 -
 gdb/solib-spu.c                           |  547 ------
 gdb/solib-spu.h                           |   25 -
 gdb/spu-linux-nat.c                       |  661 -------
 gdb/spu-multiarch.c                       |  417 -----
 gdb/spu-tdep.c                            | 2835 -----------------------------
 gdb/spu-tdep.h                            |  117 --
 gdb/target.h                              |    2 -
 gdb/testsuite/ChangeLog                   |   29 +
 gdb/testsuite/gdb.arch/spu-info.c         |  235 ---
 gdb/testsuite/gdb.arch/spu-info.exp       |  241 ---
 gdb/testsuite/gdb.arch/spu-ls.c           |   31 -
 gdb/testsuite/gdb.arch/spu-ls.exp         |   47 -
 gdb/testsuite/gdb.asm/asm-source.exp      |    5 -
 gdb/testsuite/gdb.asm/spu.inc             |   42 -
 gdb/testsuite/gdb.base/dump.exp           |    6 -
 gdb/testsuite/gdb.base/overlays.exp       |    3 -
 gdb/testsuite/gdb.base/ovlymgr.c          |   13 -
 gdb/testsuite/gdb.base/spu.ld             |  202 --
 gdb/testsuite/gdb.base/stack-checking.c   |    4 -
 gdb/testsuite/gdb.cell/arch.exp           |  116 --
 gdb/testsuite/gdb.cell/break-spu.c        |   43 -
 gdb/testsuite/gdb.cell/break.c            |   71 -
 gdb/testsuite/gdb.cell/break.exp          |  103 --
 gdb/testsuite/gdb.cell/bt-spu.c           |   30 -
 gdb/testsuite/gdb.cell/bt.c               |  101 -
 gdb/testsuite/gdb.cell/bt.exp             |   91 -
 gdb/testsuite/gdb.cell/bt2-spu.c          |   30 -
 gdb/testsuite/gdb.cell/core.exp           |  105 --
 gdb/testsuite/gdb.cell/coremaker-spu.c    |   46 -
 gdb/testsuite/gdb.cell/coremaker.c        |   70 -
 gdb/testsuite/gdb.cell/data-spu.c         |   36 -
 gdb/testsuite/gdb.cell/data.c             |   72 -
 gdb/testsuite/gdb.cell/data.exp           |  125 --
 gdb/testsuite/gdb.cell/dwarfaddr.S        |  190 --
 gdb/testsuite/gdb.cell/dwarfaddr.exp      |   53 -
 gdb/testsuite/gdb.cell/ea-cache-spu.c     |   41 -
 gdb/testsuite/gdb.cell/ea-cache.c         |   64 -
 gdb/testsuite/gdb.cell/ea-cache.exp       |   90 -
 gdb/testsuite/gdb.cell/ea-standalone.c    |   34 -
 gdb/testsuite/gdb.cell/ea-standalone.exp  |   64 -
 gdb/testsuite/gdb.cell/ea-test.c          |   33 -
 gdb/testsuite/gdb.cell/ea-test.exp        |  124 --
 gdb/testsuite/gdb.cell/f-regs.exp         |   89 -
 gdb/testsuite/gdb.cell/fork-spu.c         |   47 -
 gdb/testsuite/gdb.cell/fork.c             |   77 -
 gdb/testsuite/gdb.cell/fork.exp           |   86 -
 gdb/testsuite/gdb.cell/gcore.exp          |  108 --
 gdb/testsuite/gdb.cell/mem-access-spu.c   |   36 -
 gdb/testsuite/gdb.cell/mem-access.c       |   67 -
 gdb/testsuite/gdb.cell/mem-access.exp     |  170 --
 gdb/testsuite/gdb.cell/ptype.exp          |  145 --
 gdb/testsuite/gdb.cell/registers.exp      |  106 --
 gdb/testsuite/gdb.cell/size-spu.c         |   53 -
 gdb/testsuite/gdb.cell/size.c             |   87 -
 gdb/testsuite/gdb.cell/sizeof.exp         |  120 --
 gdb/testsuite/gdb.cell/solib-symbol.exp   |   79 -
 gdb/testsuite/gdb.cell/solib.exp          |   86 -
 gdb/testsuite/gdb.cp/bs15503.exp          |    5 -
 gdb/testsuite/gdb.cp/cpexprs.exp          |    5 -
 gdb/testsuite/gdb.cp/exception.exp        |    5 -
 gdb/testsuite/gdb.cp/gdb2495.exp          |    5 -
 gdb/testsuite/gdb.cp/mb-templates.exp     |    5 -
 gdb/testsuite/gdb.cp/pr9167.exp           |    5 -
 gdb/testsuite/gdb.cp/userdef.exp          |    5 -
 gdb/testsuite/gdb.xml/tdesc-regs.exp      |   10 -
 gdb/testsuite/lib/cell.exp                |  181 --
 108 files changed, 189 insertions(+), 11285 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index adaa123..9c8ceba 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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.
diff --git a/gdb/MAINTAINERS b/gdb/MAINTAINERS
index fd24cb7..3efcb71 100644
--- a/gdb/MAINTAINERS
+++ b/gdb/MAINTAINERS
@@ -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
 
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index e7e26a4..877a9cc 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -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 \
diff --git a/gdb/NEWS b/gdb/NEWS
index 201701b..35b48d9 100644
--- 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
diff --git a/gdb/arch/ppc-linux-common.c b/gdb/arch/ppc-linux-common.c
index 8af30e3..20b3580 100644
--- a/gdb/arch/ppc-linux-common.c
+++ b/gdb/arch/ppc-linux-common.c
@@ -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
diff --git a/gdb/arch/ppc-linux-common.h b/gdb/arch/ppc-linux-common.h
index fe332ac..1f91ff0 100644
--- a/gdb/arch/ppc-linux-common.h
+++ b/gdb/arch/ppc-linux-common.h
@@ -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.  */
diff --git a/gdb/arch/ppc-linux-tdesc.h b/gdb/arch/ppc-linux-tdesc.h
index 5c9242f..5014131 100644
--- a/gdb/arch/ppc-linux-tdesc.h
+++ b/gdb/arch/ppc-linux-tdesc.h
@@ -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;
diff --git a/gdb/config/djgpp/fnchange.lst b/gdb/config/djgpp/fnchange.lst
index 12fb082..7608218 100644
--- a/gdb/config/djgpp/fnchange.lst
+++ b/gdb/config/djgpp/fnchange.lst
@@ -199,8 +199,6 @@
 @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
@@ -231,8 +229,6 @@
 @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
@@ -356,8 +352,6 @@
 @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
@@ -452,9 +446,6 @@
 @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
diff --git a/gdb/configure.host b/gdb/configure.host
index c87f997..f382cad 100644
--- a/gdb/configure.host
+++ b/gdb/configure.host
@@ -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 ;;
diff --git a/gdb/configure.nat b/gdb/configure.nat
index 64ee101..77a2ee8 100644
--- a/gdb/configure.nat
+++ b/gdb/configure.nat
@@ -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
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 7c0215e..2edfe3b 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -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"
diff --git a/gdb/corelow.c b/gdb/corelow.c
index b30b91b..cea9210 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -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)
 	{
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 8eaaab3..0a10fa3 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -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.
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index a129ea0..f2713c0 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -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{}
diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index 2b65d46..52318d4 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -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
index 74c42f9..0000000
--- a/gdb/features/rs6000/powerpc-cell32l.c
+++ /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
index 57b4806..0000000
--- a/gdb/features/rs6000/powerpc-cell32l.xml
+++ /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
index cbfda4c..0000000
--- a/gdb/features/rs6000/powerpc-cell64l.c
+++ /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
index c2add44..0000000
--- a/gdb/features/rs6000/powerpc-cell64l.xml
+++ /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>
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index faafdfd..5c76167 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -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'.
diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index 66d3d42..1a4ab8e 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -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"
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index 3113017..d64c364 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -60,10 +60,6 @@
 #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,
diff --git a/gdb/gdbserver/linux-ppc-ipa.c b/gdb/gdbserver/linux-ppc-ipa.c
index 08adc52..f9df022 100644
--- a/gdb/gdbserver/linux-ppc-ipa.c
+++ b/gdb/gdbserver/linux-ppc-ipa.c
@@ -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 ();
diff --git a/gdb/gdbserver/linux-ppc-low.c b/gdb/gdbserver/linux-ppc-low.c
index 8a0965b..c062282 100644
--- a/gdb/gdbserver/linux-ppc-low.c
+++ b/gdb/gdbserver/linux-ppc-low.c
@@ -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 ();
diff --git a/gdb/gdbserver/linux-ppc-tdesc-init.h b/gdb/gdbserver/linux-ppc-tdesc-init.h
index 4f9a7c5..299b3ce 100644
--- a/gdb/gdbserver/linux-ppc-tdesc-init.h
+++ b/gdb/gdbserver/linux-ppc-tdesc-init.h
@@ -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);
 
diff --git a/gdb/gdbserver/lynx-low.c b/gdb/gdbserver/lynx-low.c
index 0a8b258..2bd24e7 100644
--- a/gdb/gdbserver/lynx-low.c
+++ b/gdb/gdbserver/lynx-low.c
@@ -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 */
diff --git a/gdb/gdbserver/nto-low.c b/gdb/gdbserver/nto-low.c
index 011701a..3c11306 100644
--- a/gdb/gdbserver/nto-low.c
+++ b/gdb/gdbserver/nto-low.c
@@ -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 */
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index 127cd38..67e8e3e 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -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
index 4930c59..0000000
--- a/gdb/gdbserver/spu-low.c
+++ /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 ();
-}
diff --git a/gdb/gdbserver/target.h b/gdb/gdbserver/target.h
index 67167cc..2df135a 100644
--- a/gdb/gdbserver/target.h
+++ b/gdb/gdbserver/target.h
@@ -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);
diff --git a/gdb/gdbserver/win32-low.c b/gdb/gdbserver/win32-low.c
index 49c6cf1..7088ba4 100644
--- a/gdb/gdbserver/win32-low.c
+++ b/gdb/gdbserver/win32-low.c
@@ -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
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index 945c19f..cd5cf18 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -68,10 +68,6 @@
 #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
@@ -3842,12 +3838,6 @@ linux_nat_xfer_osdata (enum target_object object,
 		       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,
 			 const gdb_byte *writebuf,
@@ -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
diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c
index 63a9bd3..567b01c 100644
--- a/gdb/linux-tdep.c
+++ b/gdb/linux-tdep.c
@@ -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);
diff --git a/gdb/nat/ppc-linux.h b/gdb/nat/ppc-linux.h
index f1561b3..508395c 100644
--- a/gdb/nat/ppc-linux.h
+++ b/gdb/nat/ppc-linux.h
@@ -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
diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c
index deb31d4..53406f6 100644
--- a/gdb/ppc-linux-nat.c
+++ b/gdb/ppc-linux-nat.c
@@ -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)
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
index c6181c9..ce3c727 100644
--- a/gdb/ppc-linux-tdep.c
+++ b/gdb/ppc-linux-tdep.c
@@ -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;
-
-/*[...]

[diff truncated at 100000 bytes]


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-09-20 21:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-20 21:09 [binutils-gdb] Remove Cell Broadband Engine debugging support Ulrich Weigand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).