diff --git a/gcc/config/rs6000/netbsd.h b/gcc/config/rs6000/netbsd.h
deleted file mode 100644
index 9978db5..0000000
--- a/gcc/config/rs6000/netbsd.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Definitions of target machine for GNU compiler,
-   for PowerPC NetBSD systems.
-   Copyright 2001 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC 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 GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-/* Under NetBSD, the normal location of the various *crt*.o files is
-   the /usr/lib directory [from config/netbsd.h].  */
-
-#undef STANDARD_STARTFILE_PREFIX
-#define STANDARD_STARTFILE_PREFIX "/usr/lib/"
-
-/* FIXME: Should this macro be treated the same as for the other
-   spec's?  */
-/* NOTE: -dc and -dp are equivalent yet NetBSD's CC passes both both!
-   NetBSD's CC also passes -O1 but we can skip that.  NetBSD explictly
-   sets ``-e _start'', since LD knows this, skip it.  */
-
-#undef LINK_SHLIB_SPEC
-#define LINK_SHLIB_SPEC "\
-%{shared:-shared} \
-%{!shared: %{static:-dc -dp -static}} \
-%{!shared: %{!static:-dc -dp}} \
-"
-
-/* Override the defaults. */
-#undef LIB_DEFAULT_SPEC
-#define LIB_DEFAULT_SPEC "%(lib_netbsd)"
-
-#undef STARTFILE_DEFAULT_SPEC
-#define STARTFILE_DEFAULT_SPEC "%(startfile_netbsd)"
-
-#undef ENDFILE_DEFAULT_SPEC
-#define ENDFILE_DEFAULT_SPEC "%(endfile_netbsd)"
-
-#undef LINK_START_DEFAULT_SPEC
-#define LINK_START_DEFAULT_SPEC "%(link_start_netbsd)"
-
-#undef	LINK_OS_DEFAULT_SPEC
-#define LINK_OS_DEFAULT_SPEC "%(link_os_netbsd)"
-
-#undef	CPP_OS_DEFAULT_SPEC
-#define CPP_OS_DEFAULT_SPEC "%(cpp_os_netbsd)"
-
-#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (PowerPC NetBSD/ELF)");
diff --git a/gcc/testsuite/gcc.c-torture/execute/20010403-1.c b/gcc/testsuite/gcc.c-torture/execute/20010403-1.c
deleted file mode 100644
index 6a8f2a4..0000000
--- a/gcc/testsuite/gcc.c-torture/execute/20010403-1.c
+++ /dev/null
@@ -1,36 +0,0 @@
-void b (int *);
-void c (int, int);
-void d (int);
-
-int e;
-
-void a (int x, int y)
-{
-  int f = x ? e : 0;
-  int z = y;
-
-  b (&y);
-  c (z, y);
-  d (f);
-}
-
-void b (int *y)
-{
-  (*y)++;
-}
-
-void c (int x, int y)
-{
-  if (x == y)
-    abort ();
-}
-
-void d (int x)
-{
-}
-
-int main (void)
-{
-  a (0, 0);
-  exit (0);
-}
diff --git a/libstdc++-v3/testsuite/testsuite_hooks.h b/libstdc++-v3/testsuite/testsuite_hooks.h
deleted file mode 100644
index f8bb87b..0000000
--- a/libstdc++-v3/testsuite/testsuite_hooks.h
+++ /dev/null
@@ -1,104 +0,0 @@
-// Utility subroutines for the C++ library testsuite.
-//
-// Copyright (C) 2000, 2001 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-//
-// This library 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 library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-//
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// This file provides the following:
-//
-// 1)  VERIFY(), via DEBUG_ASSERT, from Brent Verner <brent@rcfile.org>.
-//   This file is included in the various testsuite programs to provide
-//   #define(able) assert() behavior for debugging/testing. It may be
-//   a suitable location for other furry woodland creatures as well.
-//
-// 2)  __set_testsuite_memlimit()
-//   __set_testsuite_memlimit() uses setrlimit() to restrict dynamic memory
-//   allocation.  We provide a default memory limit if none is passed by the
-//   calling application.  The argument to __set_testsuite_memlimit() is the
-//   limit in megabytes (a floating-point number).  If _GLIBCPP_MEM_LIMITS is
-//   #defined before including this header, then no limiting is attempted.
-
-#ifndef _GLIBCPP_TESTSUITE_HOOKS_H
-#define _GLIBCPP_TESTSUITE_HOOKS_H
-
-#ifdef DEBUG_ASSERT
-# include <cassert>
-# define VERIFY(fn) assert(fn)
-#else
-# define VERIFY(fn) test &= (fn)
-# define VERIFY(fn) fn
-#endif
-
-#include <bits/c++config.h>
-
-// Defined in GLIBCPP_CONFIGURE_TESTSUITE.
-#ifndef _GLIBCPP_MEM_LIMITS
-
-// Don't do memory limits.
-void
-__set_testsuite_memlimit(float x = 0)
-{ }
-
-#else
-
-// Do memory limits.
-#include <sys/resource.h>
-#include <unistd.h>
-
-#ifndef MEMLIMIT_MB
-#define MEMLIMIT_MB 16.0
-#endif
-
-void
-__set_testsuite_memlimit(float __size = MEMLIMIT_MB)
-{
-    struct rlimit r;
-    r.rlim_cur = (rlim_t)(__size * 1048576);
-
-    // Heap size, seems to be common.
-#if _GLIBCPP_HAVE_MEMLIMIT_DATA
-    setrlimit(RLIMIT_DATA, &r);
-#endif
-
-    // Resident set size.
-#if _GLIBCPP_HAVE_MEMLIMIT_RSS
-    setrlimit(RLIMIT_RSS, &r);
-#endif
-
-    // Mapped memory (brk + mmap).
-#if _GLIBCPP_HAVE_MEMLIMIT_VMEM
-    setrlimit(RLIMIT_VMEM, &r);
-#endif
-
-    // Virtual memory.
-#if _GLIBCPP_HAVE_MEMLIMIT_AS
-    setrlimit(RLIMIT_AS, &r);
-#endif
-}
-#endif
-
-#endif // _GLIBCPP_TESTSUITE_HOOKS_H
-
