diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 118c3c8062..8c8c23fd6a 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -966,6 +966,7 @@ COMMON_SFILES = \
 	common/rsp-low.c \
 	common/run-time-clock.c \
 	common/scoped_mmap.c \
+	common/selftest.c \
 	common/signals.c \
 	common/signals-state-save-restore.c \
 	common/tdesc.c \
@@ -1092,6 +1093,7 @@ COMMON_SFILES = \
 	remote-notif.c \
 	reverse.c \
 	rust-lang.c \
+	selftest-arch.c \
 	sentinel-frame.c \
 	ser-event.c \
 	serial.c \
@@ -1162,7 +1164,8 @@ SFILES = \
 	$(SUBDIR_CLI_SRCS) \
 	$(SUBDIR_TARGET_SRCS) \
 	$(COMMON_SFILES) \
-	$(SUBDIR_GCC_COMPILE_SRCS)
+	$(SUBDIR_GCC_COMPILE_SRCS) \
+	$(SUBDIR_UNITTESTS_SRCS)
 
 # Header files that need to have srcdir added.  Note that in the cases
 # where we use a macro like $(gdbcmd_h), things are carefully arranged
@@ -1452,6 +1455,7 @@ HFILES_NO_SRCDIR = \
 	common/queue.h \
 	common/rsp-low.h \
 	common/run-time-clock.h \
+	common/selftest.h \
 	common/signals-state-save-restore.h \
 	common/symbol.h \
 	common/tdesc.h \
@@ -1566,7 +1570,8 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
 	$(patsubst %.c,%.o,$(COMMON_SFILES)) \
 	$(SUBDIR_CLI_OBS) \
 	$(SUBDIR_TARGET_OBS) \
-	$(SUBDIR_GCC_COMPILE_OBS)
+	$(SUBDIR_GCC_COMPILE_OBS) \
+	$(SUBDIR_UNITTESTS_OBS)
 
 SUBDIRS = doc @subdirs@ data-directory $(GNULIB_BUILDDIR)
 CLEANDIRS = $(SUBDIRS)
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index 5c6eb98545..00f9456954 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -516,7 +516,6 @@ aarch64_analyze_prologue (struct gdbarch *gdbarch,
 				   reader);
 }
 
-#if GDB_SELF_TEST
 
 namespace selftests {
 
@@ -640,7 +639,6 @@ aarch64_analyze_prologue_test (void)
   }
 }
 } // namespace selftests
-#endif /* GDB_SELF_TEST */
 
 /* Implement the "skip_prologue" gdbarch method.  */
 
@@ -3154,12 +3152,10 @@ aarch64_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
 		      paddress (gdbarch, tdep->lowest_pc));
 }
 
-#if GDB_SELF_TEST
 namespace selftests
 {
 static void aarch64_process_record_test (void);
 }
-#endif
 
 void
 _initialize_aarch64_tdep (void)
@@ -3176,14 +3172,12 @@ When on, AArch64 specific debugging is enabled."),
 			    show_aarch64_debug,
 			    &setdebuglist, &showdebuglist);
 
-#if GDB_SELF_TEST
   selftests::register_test ("aarch64-analyze-prologue",
 			    selftests::aarch64_analyze_prologue_test);
   selftests::register_test ("aarch64-process-record",
 			    selftests::aarch64_process_record_test);
   selftests::record_xml_tdesc ("aarch64.xml",
 			       aarch64_create_target_description (0));
-#endif
 }
 
 /* AArch64 process record-replay related structures, defines etc.  */
@@ -4085,7 +4079,6 @@ deallocate_reg_mem (insn_decode_record *record)
   xfree (record->aarch64_mems);
 }
 
-#if GDB_SELF_TEST
 namespace selftests {
 
 static void
@@ -4118,7 +4111,6 @@ aarch64_process_record_test (void)
 }
 
 } // namespace selftests
-#endif /* GDB_SELF_TEST */
 
 /* Parse the current instruction and record the values of the registers and
    memory that will be changed in current instruction to record_arch_list
diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index 7ab43897ab..19432b3fda 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -2280,7 +2280,6 @@ _initialize_amd64_linux_tdep (void)
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x64_32,
 			  GDB_OSABI_LINUX, amd64_x32_linux_init_abi);
 
-#if GDB_SELF_TEST
   struct
   {
     const char *xml;
@@ -2306,5 +2305,4 @@ _initialize_amd64_linux_tdep (void)
 
       selftests::record_xml_tdesc (a.xml, tdesc);
     }
-#endif /* GDB_SELF_TEST */
 }
diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
index 088542d72b..4c88ce66ca 100644
--- a/gdb/amd64-tdep.c
+++ b/gdb/amd64-tdep.c
@@ -3300,7 +3300,6 @@ _initialize_amd64_tdep (void)
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x64_32, GDB_OSABI_NONE,
  			  amd64_x32_none_init_abi);
 
-#if GDB_SELF_TEST
   struct
   {
     const char *xml;
@@ -3321,7 +3320,6 @@ _initialize_amd64_tdep (void)
 
       selftests::record_xml_tdesc (a.xml, tdesc);
     }
-#endif /* GDB_SELF_TEST */
 }
 
 
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index c3280ee211..ac63594e5f 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -69,9 +69,7 @@
 #include "features/arm/arm-with-vfpv3.c"
 #include "features/arm/arm-with-neon.c"
 
-#if GDB_SELF_TEST
 #include "selftest.h"
-#endif
 
 static int arm_debug;
 
@@ -9523,12 +9521,10 @@ arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
 		      (unsigned long) tdep->lowest_pc);
 }
 
-#if GDB_SELF_TEST
 namespace selftests
 {
 static void arm_record_test (void);
 }
-#endif
 
 void
 _initialize_arm_tdep (void)
@@ -9664,9 +9660,7 @@ vfp - VFP co-processor."),
 			   NULL, /* FIXME: i18n: "ARM debugging is %s.  */
 			   &setdebuglist, &showdebuglist);
 
-#if GDB_SELF_TEST
   selftests::register_test ("arm-record", selftests::arm_record_test);
-#endif
 
 }
 
@@ -13199,7 +13193,6 @@ decode_insn (abstract_memory_reader &reader, insn_decode_record *arm_record,
   return ret;
 }
 
-#if GDB_SELF_TEST
 namespace selftests {
 
 /* Provide both 16-bit and 32-bit thumb instructions.  */
@@ -13303,7 +13296,6 @@ arm_record_test (void)
   }
 }
 } // namespace selftests
-#endif /* GDB_SELF_TEST */
 
 /* Cleans up local record registers and memory allocations.  */
 
diff --git a/gdb/config.in b/gdb/config.in
index 01acda124b..75c1dd2930 100644
--- a/gdb/config.in
+++ b/gdb/config.in
@@ -65,9 +65,6 @@
 /* Define to the default OS ABI for this configuration. */
 #undef GDB_OSABI_DEFAULT
 
-/* Define if self-testing features should be enabled */
-#undef GDB_SELF_TEST
-
 /* Define to 1 if you have `alloca', as a function or macro. */
 #undef HAVE_ALLOCA
 
diff --git a/gdb/configure b/gdb/configure
index 9cd0036848..e30e67034b 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -17740,14 +17740,6 @@ ac_config_links="$ac_config_links $ac_config_links_1"
 $as_echo "#define GDB_DEFAULT_HOST_CHARSET \"UTF-8\"" >>confdefs.h
 
 
-if $development; then
-
-$as_echo "#define GDB_SELF_TEST 1" >>confdefs.h
-
-  CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_UNITTESTS_OBS) common/selftest.o selftest-arch.o"
-  CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_UNITTESTS_SRCS) common/selftest.c selftest-arch.c"
-fi
-
 
   gdb_ac_transform=`echo "$program_transform_name" | sed -e 's/\\$\\$/\\$/g'`
   GDB_TRANSFORM_NAME=`echo gdb | sed -e "$gdb_ac_transform"`
diff --git a/gdb/configure.ac b/gdb/configure.ac
index 13bc5f9a8f..ac41b4595b 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -2279,13 +2279,6 @@ dnl  At the moment, we just assume it's UTF-8.
 AC_DEFINE(GDB_DEFAULT_HOST_CHARSET, "UTF-8",
           [Define to be a string naming the default host character set.])
 
-if $development; then
-  AC_DEFINE(GDB_SELF_TEST, 1,
-            [Define if self-testing features should be enabled])
-  CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_UNITTESTS_OBS) common/selftest.o selftest-arch.o"
-  CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_UNITTESTS_SRCS) common/selftest.c selftest-arch.c"
-fi
-
 GDB_AC_TRANSFORM([gdb], [GDB_TRANSFORM_NAME])
 GDB_AC_TRANSFORM([gcore], [GCORE_TRANSFORM_NAME])
 AC_CONFIG_FILES([gcore], [chmod +x gcore])
diff --git a/gdb/cp-support.c b/gdb/cp-support.c
index 3ce5f60b12..074bc44263 100644
--- a/gdb/cp-support.c
+++ b/gdb/cp-support.c
@@ -1801,7 +1801,6 @@ cp_get_symbol_name_matcher (const lookup_name_info &lookup_name)
   gdb_assert_not_reached ("");
 }
 
-#if GDB_SELF_TEST
 
 namespace selftests {
 
@@ -2114,8 +2113,6 @@ test_cp_remove_params ()
 
 } // namespace selftests
 
-#endif /* GDB_SELF_CHECK */
-
 /* Don't allow just "maintenance cplus".  */
 
 static  void
@@ -2199,10 +2196,8 @@ display the offending symbol."),
 			   &maintenance_show_cmdlist);
 #endif
 
-#if GDB_SELF_TEST
   selftests::register_test ("cp_symbol_name_matches",
 			    selftests::test_cp_symbol_name_matches);
   selftests::register_test ("cp_remove_params",
 			    selftests::test_cp_remove_params);
-#endif
 }
diff --git a/gdb/disasm-selftests.c b/gdb/disasm-selftests.c
index f7d0ecca0e..38a5e16e7e 100644
--- a/gdb/disasm-selftests.c
+++ b/gdb/disasm-selftests.c
@@ -20,7 +20,6 @@
 #include "defs.h"
 #include "disasm.h"
 
-#if GDB_SELF_TEST
 #include "selftest.h"
 #include "selftest-arch.h"
 
@@ -205,15 +204,12 @@ memory_error_test (struct gdbarch *gdbarch)
 }
 
 } // namespace selftests
-#endif /* GDB_SELF_TEST */
 
 void
 _initialize_disasm_selftests (void)
 {
-#if GDB_SELF_TEST
   selftests::register_test_foreach_arch ("print_one_insn",
 					 selftests::print_one_insn_test);
   selftests::register_test_foreach_arch ("memory_error",
 					 selftests::memory_error_test);
-#endif
 }
diff --git a/gdb/dwarf-index-cache.c b/gdb/dwarf-index-cache.c
index 966630b60c..07ddf4f466 100644
--- a/gdb/dwarf-index-cache.c
+++ b/gdb/dwarf-index-cache.c
@@ -346,7 +346,8 @@ show_index_cache_stats_command (const char *arg, int from_tty)
 		     indent, global_index_cache.n_misses ());
 }
 
-#if GDB_SELF_TEST && defined (HAVE_MKDTEMP)
+#if defined (HAVE_MKDTEMP)
+
 namespace selftests
 {
 
@@ -400,7 +401,8 @@ test_mkdir_recursive ()
   SELF_CHECK (create_dir_and_check (dir.c_str ()));
 }
 }
-#endif /*  GDB_SELF_TEST && defined (HAVE_MKDTEMP) */
+
+#endif /* defined (HAVE_MKDTEMP) */
 
 void
 _initialize_index_cache ()
@@ -457,7 +459,7 @@ When non-zero, debugging output for the index cache is displayed."),
 			    NULL, NULL,
 			    &setdebuglist, &showdebuglist);
 
-#if GDB_SELF_TEST && defined (HAVE_MKDTEMP)
+#if defined (HAVE_MKDTEMP)
   selftests::register_test ("mkdir_recursive", selftests::test_mkdir_recursive);
 #endif
 }
diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c
index 58f1ba4f2f..f648962fec 100644
--- a/gdb/dwarf2-frame.c
+++ b/gdb/dwarf2-frame.c
@@ -39,10 +39,8 @@
 #include "ax.h"
 #include "dwarf2loc.h"
 #include "dwarf2-frame-tailcall.h"
-#if GDB_SELF_TEST
 #include "selftest.h"
 #include "selftest-arch.h"
-#endif
 
 struct comp_unit;
 
@@ -607,7 +605,6 @@ bad CFI data; mismatched DW_CFA_restore_state at %s"),
   return insn_ptr;
 }
 
-#if GDB_SELF_TEST
 
 namespace selftests {
 
@@ -665,7 +662,6 @@ execute_cfa_program_test (struct gdbarch *gdbarch)
 }
 
 } // namespace selftests
-#endif /* GDB_SELF_TEST */
 
 
 
@@ -2431,8 +2427,6 @@ architecture that doesn't support them will have no effect."),
 			   &set_dwarf_cmdlist,
 			   &show_dwarf_cmdlist);
 
-#if GDB_SELF_TEST
   selftests::register_test_foreach_arch ("execute_cfa_program",
 					 selftests::execute_cfa_program_test);
-#endif
 }
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
index a98b676b30..df5f0059f6 100644
--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -1612,7 +1612,6 @@ copy_bitwise (gdb_byte *dest, ULONGEST dest_offset,
     }
 }
 
-#if GDB_SELF_TEST
 
 namespace selftests {
 
@@ -1745,7 +1744,6 @@ copy_bitwise_tests (void)
 
 } /* namespace selftests */
 
-#endif /* GDB_SELF_TEST */
 
 /* Return the number of bytes overlapping a contiguous chunk of N_BITS
    bits whose first bit is located at bit offset START.  */
@@ -4681,7 +4679,5 @@ _initialize_dwarf2loc (void)
 			     show_entry_values_debug,
 			     &setdebuglist, &showdebuglist);
 
-#if GDB_SELF_TEST
   selftests::register_test ("copy_bitwise", selftests::copy_bitwise_tests);
-#endif
 }
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 81a0087c26..55391cbd4a 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -4566,7 +4566,6 @@ dw2_expand_symtabs_matching_symbol
   static_assert (sizeof (prev) > sizeof (offset_type), "");
 }
 
-#if GDB_SELF_TEST
 
 namespace selftests { namespace dw2_expand_symtabs_matching {
 
@@ -4989,7 +4988,6 @@ run_test ()
 
 }} // namespace selftests::dw2_expand_symtabs_matching
 
-#endif /* GDB_SELF_TEST */
 
 /* If FILE_MATCHER is NULL or if PER_CU has
    dwarf2_per_cu_quick_data::MARK set (see
@@ -25593,8 +25591,6 @@ Warning: This option must be enabled before gdb reads the file."),
   dwarf2_loclist_block_index = register_symbol_block_impl (LOC_BLOCK,
 					&dwarf2_block_frame_base_loclist_funcs);
 
-#if GDB_SELF_TEST
   selftests::register_test ("dw2_expand_symtabs_matching",
 			    selftests::dw2_expand_symtabs_matching::run_test);
-#endif
 }
diff --git a/gdb/findvar.c b/gdb/findvar.c
index ebaff923a1..74df206660 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -1010,7 +1010,6 @@ address_from_register (int regnum, struct frame_info *frame)
   return result;
 }
 
-#if GDB_SELF_TEST
 namespace selftests {
 namespace findvar_tests {
 
@@ -1089,14 +1088,11 @@ copy_integer_to_size_test ()
 } // namespace findvar_test
 } // namespace selftests
 
-#endif
 
 void
 _initialize_findvar (void)
 {
-#if GDB_SELF_TEST
   selftests::register_test
     ("copy_integer_to_size",
      selftests::findvar_tests::copy_integer_to_size_test);
-#endif
 }
diff --git a/gdb/gdbarch-selftests.c b/gdb/gdbarch-selftests.c
index 73a31244b4..317cfa3b2f 100644
--- a/gdb/gdbarch-selftests.c
+++ b/gdb/gdbarch-selftests.c
@@ -18,7 +18,6 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#if GDB_SELF_TEST
 #include "selftest.h"
 #include "selftest-arch.h"
 #include "inferior.h"
@@ -168,13 +167,10 @@ register_to_value_test (struct gdbarch *gdbarch)
 }
 
 } // namespace selftests
-#endif /* GDB_SELF_TEST */
 
 void
 _initialize_gdbarch_selftests (void)
 {
-#if GDB_SELF_TEST
   selftests::register_test_foreach_arch ("register_to_value",
 					 selftests::register_to_value_test);
-#endif
 }
diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
index f2f8a084bd..fcda9e725d 100644
--- a/gdb/gdbserver/Makefile.in
+++ b/gdb/gdbserver/Makefile.in
@@ -217,6 +217,7 @@ SFILES = \
 	$(srcdir)/common/print-utils.c \
 	$(srcdir)/common/ptid.c \
 	$(srcdir)/common/rsp-low.c \
+	$(srcdir)/common/selftest.c \
 	$(srcdir)/common/tdesc.c \
 	$(srcdir)/common/vec.c \
 	$(srcdir)/common/xml-utils.c \
@@ -261,6 +262,7 @@ OBS = \
 	common/print-utils.o \
 	common/ptid.o \
 	common/rsp-low.o \
+	common/selftest.o \
 	common/signals.o \
 	common/signals-state-save-restore.o \
 	common/tdesc.o \
diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in
index 05537df81e..ac404afd04 100644
--- a/gdb/gdbserver/config.in
+++ b/gdb/gdbserver/config.in
@@ -8,9 +8,6 @@
 /* Define to 1 if using `alloca.c'. */
 #undef C_ALLOCA
 
-/* Define if self-testing features should be enabled */
-#undef GDB_SELF_TEST
-
 /* Define to 1 if you have `alloca', as a function or macro. */
 #undef HAVE_ALLOCA
 
diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure
index 043bc216e4..fbd59d7268 100755
--- a/gdb/gdbserver/configure
+++ b/gdb/gdbserver/configure
@@ -5889,13 +5889,6 @@ fi
   fi
 
 
-if $development; then
-  srv_selftest_objs="common/selftest.o"
-
-$as_echo "#define GDB_SELF_TEST 1" >>confdefs.h
-
-fi
-
  case ${build_alias} in
   "") build_noncanonical=${build} ;;
   *) build_noncanonical=${build_alias} ;;
diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac
index 99bc46221c..6fc3cc1fa2 100644
--- a/gdb/gdbserver/configure.ac
+++ b/gdb/gdbserver/configure.ac
@@ -54,12 +54,6 @@ else
 fi
 GDB_AC_LIBMCHECK(${libmcheck_default})
 
-if $development; then
-  srv_selftest_objs="common/selftest.o"
-  AC_DEFINE(GDB_SELF_TEST, 1,
-            [Define if self-testing features should be enabled])
-fi
-
 ACX_NONCANONICAL_TARGET
 ACX_NONCANONICAL_HOST
 
@@ -410,7 +404,7 @@ if test "$srv_xmlfiles" != ""; then
   done
 fi
 
-GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles $srv_host_obs $srv_selftest_objs"
+GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles $srv_host_obs"
 GDBSERVER_LIBS="$srv_libs"
 
 dnl Check whether the target supports __sync_*_compare_and_swap.
diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index 72e6a0d87f..46ea3ff142 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -24,13 +24,8 @@
 # Default hostio_last_error implementation
 srv_hostio_err_objs="hostio-errno.o"
 
-if $development; then
-   srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-avx-avx512-linux.o i386-avx-mpx-avx512-pku-linux.o i386-mpx-linux.o i386-avx-mpx-linux.o i386-mmx-linux.o linux-x86-tdesc-selftest.o"
-   srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o amd64-avx-avx512-linux.o amd64-avx-mpx-avx512-pku-linux.o amd64-mpx-linux.o amd64-avx-mpx-linux.o x32-linux.o x32-avx-linux.o x32-avx-avx512-linux.o"
-else
-   srv_i386_linux_regobj=""
-   srv_amd64_linux_regobj=""
-fi
+srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-avx-avx512-linux.o i386-avx-mpx-avx512-pku-linux.o i386-mpx-linux.o i386-avx-mpx-linux.o i386-mmx-linux.o linux-x86-tdesc-selftest.o"
+srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o amd64-avx-avx512-linux.o amd64-avx-mpx-avx512-pku-linux.o amd64-mpx-linux.o amd64-avx-mpx-linux.o x32-linux.o x32-avx-linux.o x32-avx-avx512-linux.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-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"
 
@@ -43,10 +38,8 @@ srv_linux_obj="linux-low.o linux-osdata.o linux-procfs.o linux-ptrace.o linux-wa
 case "${target}" in
   aarch64*-*-linux*)
 			srv_regobj="arm-with-neon.o"
-			if $development; then
-			  srv_regobj="${srv_regobj} aarch64.o"
-			  srv_regobj="${srv_regobj} linux-aarch64-tdesc-selftest.o"
-                        fi
+			srv_regobj="${srv_regobj} aarch64.o"
+			srv_regobj="${srv_regobj} linux-aarch64-tdesc-selftest.o"
 			srv_tgtobj="linux-aarch64-low.o aarch64-linux-hw-point.o"
 			srv_tgtobj="$srv_tgtobj linux-aarch32-low.o"
 			srv_tgtobj="${srv_tgtobj} arch/arm.o"
@@ -343,13 +336,9 @@ case "${target}" in
   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"
-			  srv_regobj="${srv_regobj} tic6x-c62x-linux.o"
-                        else
-			  srv_regobj=""
-                        fi
+  tic6x-*-uclinux)	srv_regobj="tic6x-c64xp-linux.o"
+			srv_regobj="${srv_regobj} tic6x-c64x-linux.o"
+			srv_regobj="${srv_regobj} tic6x-c62x-linux.o"
 			srv_tgtobj="$srv_linux_obj linux-tic6x-low.o"
 			srv_tgtobj="${srv_tgtobj} arch/tic6x.o"
 			srv_linux_regsets=yes
diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c
index 1d34e319df..b77e18d2f3 100644
--- a/gdb/gdbserver/linux-aarch64-low.c
+++ b/gdb/gdbserver/linux-aarch64-low.c
@@ -3085,7 +3085,5 @@ initialize_low_arch (void)
   initialize_regsets_info (&aarch64_regsets_info);
   initialize_regsets_info (&aarch64_sve_regsets_info);
 
-#if GDB_SELF_TEST
   initialize_low_tdesc ();
-#endif
 }
diff --git a/gdb/gdbserver/linux-aarch64-tdesc.h b/gdb/gdbserver/linux-aarch64-tdesc.h
index 4d2b883b55..51bc08bd2c 100644
--- a/gdb/gdbserver/linux-aarch64-tdesc.h
+++ b/gdb/gdbserver/linux-aarch64-tdesc.h
@@ -19,6 +19,4 @@
 
 const target_desc * aarch64_linux_read_description (uint64_t vq);
 
-#if GDB_SELF_TEST
 void initialize_low_tdesc ();
-#endif
diff --git a/gdb/gdbserver/linux-tic6x-low.c b/gdb/gdbserver/linux-tic6x-low.c
index d90bbcfe51..99f2f8cad0 100644
--- a/gdb/gdbserver/linux-tic6x-low.c
+++ b/gdb/gdbserver/linux-tic6x-low.c
@@ -423,7 +423,6 @@ struct linux_target_ops the_low_target = {
   tic6x_supports_hardware_single_step,
 };
 
-#if GDB_SELF_TEST
 #include "common/selftest.h"
 
 namespace selftests {
@@ -437,19 +436,16 @@ tic6x_tdesc_test ()
 }
 }
 }
-#endif
 
 void
 initialize_low_arch (void)
 {
-#if GDB_SELF_TEST
   /* Initialize the Linux target descriptions.  */
   init_registers_tic6x_c64xp_linux ();
   init_registers_tic6x_c64x_linux ();
   init_registers_tic6x_c62x_linux ();
 
   selftests::register_test ("tic6x-tdesc", selftests::tdesc::tic6x_tdesc_test);
-#endif
 
   initialize_regsets_info (&tic6x_regsets_info);
 }
diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c
index 80b43802c7..daa603398a 100644
--- a/gdb/gdbserver/linux-x86-low.c
+++ b/gdb/gdbserver/linux-x86-low.c
@@ -2897,9 +2897,7 @@ initialize_low_arch (void)
   tdesc_amd64_linux_no_xml->xmltarget = xmltarget_amd64_linux_no_xml;
 #endif
 
-#if GDB_SELF_TEST
   initialize_low_tdesc ();
-#endif
 
   tdesc_i386_linux_no_xml = allocate_target_description ();
   copy_target_description (tdesc_i386_linux_no_xml,
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index a491ae0257..8bc51c8e3c 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -3573,9 +3573,7 @@ captured_main (int argc, char *argv[])
   volatile int attach = 0;
   int was_running;
   bool selftest = false;
-#if GDB_SELF_TEST
   const char *selftest_filter = NULL;
-#endif
 
   current_directory = getcwd (NULL, 0);
   client_state &cs = get_client_state ();
@@ -3708,9 +3706,7 @@ captured_main (int argc, char *argv[])
       else if (startswith (*next_arg, "--selftest="))
 	{
 	  selftest = true;
-#if GDB_SELF_TEST
 	  selftest_filter = *next_arg + strlen ("--selftest=");
-#endif
 	}
       else
 	{
@@ -3787,11 +3783,7 @@ captured_main (int argc, char *argv[])
 
   if (selftest)
     {
-#if GDB_SELF_TEST
       selftests::run_tests (selftest_filter);
-#else
-      printf (_("Selftests are not available in a non-development build.\n"));
-#endif
       throw_quit ("Quit");
     }
 
@@ -4495,7 +4487,6 @@ handle_target_event (int err, gdb_client_data client_data)
   return 0;
 }
 
-#if GDB_SELF_TEST
 namespace selftests
 {
 
@@ -4504,4 +4495,3 @@ reset ()
 {}
 
 } // namespace selftests
-#endif /* GDB_SELF_TEST */
diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c
index 802c41fe72..efb9b1a7a1 100644
--- a/gdb/i386-linux-tdep.c
+++ b/gdb/i386-linux-tdep.c
@@ -1083,7 +1083,6 @@ _initialize_i386_linux_tdep (void)
   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_LINUX,
 			  i386_linux_init_abi);
 
-#if GDB_SELF_TEST
   struct
   {
     const char *xml;
@@ -1105,5 +1104,4 @@ _initialize_i386_linux_tdep (void)
 
       selftests::record_xml_tdesc (a.xml, tdesc);
     }
-#endif /* GDB_SELF_TEST */
 }
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index a6994aaf12..4e8bd9caa4 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -9053,7 +9053,6 @@ Show Intel Memory Protection Extensions specific variables."),
   /* Tell remote stub that we support XML target description.  */
   register_remote_support_xml ("i386");
 
-#if GDB_SELF_TEST
   struct
   {
     const char *xml;
@@ -9075,5 +9074,4 @@ Show Intel Memory Protection Extensions specific variables."),
 
       selftests::record_xml_tdesc (a.xml, tdesc);
     }
-#endif /* GDB_SELF_TEST */
 }
diff --git a/gdb/maint.c b/gdb/maint.c
index 5d4701cfac..446047227b 100644
--- a/gdb/maint.c
+++ b/gdb/maint.c
@@ -939,26 +939,16 @@ show_per_command_cmd (const char *args, int from_tty)
 static void
 maintenance_selftest (const char *args, int from_tty)
 {
-#if GDB_SELF_TEST
   selftests::run_tests (args);
-#else
-  printf_filtered (_("\
-Selftests are not available in a non-development build.\n"));
-#endif
 }
 
 static void
 maintenance_info_selftests (const char *arg, int from_tty)
 {
-#if GDB_SELF_TEST
   printf_filtered ("Registered selftests:\n");
   selftests::for_each_selftest ([] (const std::string &name) {
     printf_filtered (" - %s\n", name.c_str ());
   });
-#else
-  printf_filtered (_("\
-Selftests are not available in a non-development build.\n"));
-#endif
 }
 
 
diff --git a/gdb/producer.c b/gdb/producer.c
index f21aae93ac..459ced494c 100644
--- a/gdb/producer.c
+++ b/gdb/producer.c
@@ -125,7 +125,6 @@ producer_is_icc (const char *producer, int *major, int *minor)
   return false;
 }
 
-#if defined GDB_SELF_TEST
 namespace selftests {
 namespace producer {
 
@@ -206,13 +205,10 @@ Version 18.0 Beta";
 }
 }
 }
-#endif
 
 void
 _initialize_producer ()
 {
-#if defined GDB_SELF_TEST
   selftests::register_test
     ("producer-parser", selftests::producer::producer_parsing_tests);
-#endif
 }
diff --git a/gdb/regcache.c b/gdb/regcache.c
index f3f845aad6..91561ad3fc 100644
--- a/gdb/regcache.c
+++ b/gdb/regcache.c
@@ -1419,7 +1419,6 @@ register_dump::dump (ui_file *file)
 			footnote_register_type_name_null);
 }
 
-#if GDB_SELF_TEST
 #include "selftest.h"
 #include "selftest-arch.h"
 #include "gdbthread.h"
@@ -1846,7 +1845,6 @@ cooked_write_test (struct gdbarch *gdbarch)
 }
 
 } // namespace selftests
-#endif /* GDB_SELF_TEST */
 
 void
 _initialize_regcache (void)
@@ -1861,12 +1859,10 @@ _initialize_regcache (void)
   add_com ("flushregs", class_maintenance, reg_flush_command,
 	   _("Force gdb to flush its register cache (maintainer command)"));
 
-#if GDB_SELF_TEST
   selftests::register_test ("current_regcache", selftests::current_regcache_test);
 
   selftests::register_test_foreach_arch ("regcache::cooked_read_test",
 					 selftests::cooked_read_test);
   selftests::register_test_foreach_arch ("regcache::cooked_write_test",
 					 selftests::cooked_write_test);
-#endif
 }
diff --git a/gdb/rust-exp.y b/gdb/rust-exp.y
index 248e558a54..70a8acf9ae 100644
--- a/gdb/rust-exp.y
+++ b/gdb/rust-exp.y
@@ -2545,7 +2545,6 @@ rustyyerror (rust_parser *parser, const char *msg)
 
 
 
-#if GDB_SELF_TEST
 
 /* Initialize the lexer for testing.  */
 
@@ -2803,7 +2802,6 @@ rust_lex_tests (void)
   rust_lex_test_push_back (&parser);
 }
 
-#endif /* GDB_SELF_TEST */
 
 void
 _initialize_rust_exp (void)
@@ -2813,7 +2811,5 @@ _initialize_rust_exp (void)
      error.  */
   gdb_assert (code == 0);
 
-#if GDB_SELF_TEST
   selftests::register_test ("rust-lex", rust_lex_tests);
-#endif
 }
diff --git a/gdb/selftest-arch.c b/gdb/selftest-arch.c
index 7045c45660..835145c939 100644
--- a/gdb/selftest-arch.c
+++ b/gdb/selftest-arch.c
@@ -18,7 +18,6 @@
 
 #include "defs.h"
 
-#if GDB_SELF_TEST
 #include "selftest.h"
 #include "selftest-arch.h"
 #include "arch-utils.h"
@@ -104,4 +103,3 @@ reset ()
   reinit_frame_cache ();
 }
 } // namespace selftests
-#endif /* GDB_SELF_TEST */
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 20697d9dca..c61a6890ad 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -3791,7 +3791,6 @@ map_symbol_filenames (symbol_filename_ftype *fun, void *data,
   }
 }
 
-#if GDB_SELF_TEST
 
 namespace selftests {
 namespace filename_language {
@@ -3848,7 +3847,6 @@ test_set_ext_lang_command ()
 } /* namespace filename_language */
 } /* namespace selftests */
 
-#endif /* GDB_SELF_TEST */
 
 void
 _initialize_symfile (void)
@@ -3975,11 +3973,9 @@ Show printing of separate debug info file search debug."), _("\
 When on, GDB prints the searched locations while looking for separate debug \
 info files."), NULL, NULL, &setdebuglist, &showdebuglist);
 
-#if GDB_SELF_TEST
   selftests::register_test
     ("filename_language", selftests::filename_language::test_filename_language);
   selftests::register_test
     ("set_ext_lang_command",
      selftests::filename_language::test_set_ext_lang_command);
-#endif
 }
diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c
index 087de141f7..10f2f34eb8 100644
--- a/gdb/target-descriptions.c
+++ b/gdb/target-descriptions.c
@@ -1748,7 +1748,6 @@ struct xml_test_tdesc
 
 static std::vector<xml_test_tdesc> xml_tdesc;
 
-#if GDB_SELF_TEST
 
 /* See target-descritpions.h.  */
 
@@ -1757,7 +1756,6 @@ record_xml_tdesc (const char *xml_file, const struct target_desc *tdesc)
 {
   xml_tdesc.emplace_back (xml_file, std::unique_ptr<const target_desc> (tdesc));
 }
-#endif
 
 }
 
diff --git a/gdb/target-descriptions.h b/gdb/target-descriptions.h
index 96290b7d97..1aa8f5c79c 100644
--- a/gdb/target-descriptions.h
+++ b/gdb/target-descriptions.h
@@ -210,7 +210,6 @@ void set_tdesc_property (struct target_desc *,
 void tdesc_add_compatible (struct target_desc *,
 			   const struct bfd_arch_info *);
 
-#if GDB_SELF_TEST
 namespace selftests {
 
 /* Record that XML_FILE should generate a target description that equals
@@ -220,6 +219,5 @@ namespace selftests {
 void record_xml_tdesc (const char *xml_file,
 		       const struct target_desc *tdesc);
 }
-#endif
 
 #endif /* TARGET_DESCRIPTIONS_H */
diff --git a/gdb/target.c b/gdb/target.c
index 2d98954b54..6f46575a19 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -192,7 +192,6 @@ target_command (const char *arg, int from_tty)
 		  gdb_stdout);
 }
 
-#if GDB_SELF_TEST
 namespace selftests {
 
 /* A mock process_stratum target_ops that doesn't read/write registers
@@ -211,7 +210,6 @@ test_target_ops::info () const
 }
 
 } /* namespace selftests */
-#endif /* GDB_SELF_TEST */
 
 /* Default target_has_* methods for process_stratum targets.  */
 
diff --git a/gdb/target.h b/gdb/target.h
index 39aa8c3c73..9c2cb38279 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -2543,7 +2543,6 @@ extern void target_prepare_to_generate_core (void);
 /* See to_done_generating_core.  */
 extern void target_done_generating_core (void);
 
-#if GDB_SELF_TEST
 namespace selftests {
 
 /* A mock process_stratum target_ops that doesn't read/write registers
@@ -2586,6 +2585,5 @@ public:
 
 
 } // namespace selftests
-#endif /* GDB_SELF_TEST */
 
 #endif /* !defined (TARGET_H) */
diff --git a/gdb/testsuite/gdb.gdb/unittest.exp b/gdb/testsuite/gdb.gdb/unittest.exp
index 1c835850b8..c962964284 100644
--- a/gdb/testsuite/gdb.gdb/unittest.exp
+++ b/gdb/testsuite/gdb.gdb/unittest.exp
@@ -23,10 +23,6 @@ gdb_test_multiple $test $test {
 	set num_ran $expect_out(1,string)
 	gdb_assert "$num_ran > 0" $test
   }
-
-  -re "Selftests are not available in a non-development build.\r\n$gdb_prompt $" {
-	unsupported $test
-  }
 }
 
 if { ![is_remote host] && $do_xml_test } {
diff --git a/gdb/testsuite/gdb.server/unittest.exp b/gdb/testsuite/gdb.server/unittest.exp
index e947ff2c30..c050989416 100644
--- a/gdb/testsuite/gdb.server/unittest.exp
+++ b/gdb/testsuite/gdb.server/unittest.exp
@@ -38,10 +38,6 @@ gdb_expect {
 	gdb_assert "$num_ran > 0" $test
     }
 
-    -re "Selftests are not available in a non-development build.\r\n$" {
-	unsupported $test
-    }
-
     default {
 	fail $test
     }
diff --git a/gdb/utils.c b/gdb/utils.c
index 7a8c80c64e..67850c93e7 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -2809,7 +2809,6 @@ string_to_core_addr (const char *my_string)
   return addr;
 }
 
-#if GDB_SELF_TEST
 
 static void
 gdb_realpath_check_trailer (const char *input, const char *trailer)
@@ -2843,7 +2842,6 @@ gdb_realpath_tests ()
   gdb_realpath_check_trailer ("", "");
 }
 
-#endif /* GDB_SELF_TEST */
 
 /* Allocation function for the libiberty hash table which uses an
    obstack.  The obstack is passed as DATA.  */
@@ -3239,7 +3237,5 @@ _initialize_utils (void)
   add_internal_problem_command (&internal_warning_problem);
   add_internal_problem_command (&demangler_warning_problem);
 
-#if GDB_SELF_TEST
   selftests::register_test ("gdb_realpath", gdb_realpath_tests);
-#endif
 }
diff --git a/gdb/value.c b/gdb/value.c
index b0f22f1117..0d2307ebdb 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -3921,7 +3921,6 @@ isvoid_internal_fn (struct gdbarch *gdbarch,
   return value_from_longest (builtin_type (gdbarch)->builtin_int, ret);
 }
 
-#if GDB_SELF_TEST
 namespace selftests
 {
 
@@ -4061,7 +4060,6 @@ test_insert_into_bit_range_vector ()
 }
 
 } /* namespace selftests */
-#endif /* GDB_SELF_TEST */
 
 void
 _initialize_values (void)
@@ -4114,9 +4112,7 @@ prevents future values, larger than this size, from being allocated."),
 			    set_max_value_size,
 			    show_max_value_size,
 			    &setlist, &showlist);
-#if GDB_SELF_TEST
   selftests::register_test ("ranges_contain", selftests::test_ranges_contain);
   selftests::register_test ("insert_into_bit_range_vector",
 			    selftests::test_insert_into_bit_range_vector);
-#endif
 }
