diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index 74942b1..248d87c 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -59,13 +59,13 @@
 #include "record.h"
 #include "record-full.h"
 
-#include "features/arm-with-m.c"
-#include "features/arm-with-m-fpa-layout.c"
-#include "features/arm-with-m-vfp-d16.c"
-#include "features/arm-with-iwmmxt.c"
-#include "features/arm-with-vfpv2.c"
-#include "features/arm-with-vfpv3.c"
-#include "features/arm-with-neon.c"
+#include "features/arm/with-m.c"
+#include "features/arm/with-m-fpa-layout.c"
+#include "features/arm/with-m-vfp-d16.c"
+#include "features/arm/with-iwmmxt.c"
+#include "features/arm/with-vfpv2.c"
+#include "features/arm/with-vfpv3.c"
+#include "features/arm/with-neon.c"
 
 static int arm_debug;
 
@@ -9802,14 +9802,14 @@ arm_register_g_packet_guesses (struct gdbarch *gdbarch)
 				      (16 * INT_REGISTER_SIZE)
 				      + (8 * FP_REGISTER_SIZE)
 				      + (2 * INT_REGISTER_SIZE),
-				      tdesc_arm_with_m_fpa_layout);
+				      tdesc_with_m_fpa_layout);
 
       /* The regular M-profile layout.  */
       register_remote_g_packet_guess (gdbarch,
 				      /* r0-r12,sp,lr,pc; xpsr */
 				      (16 * INT_REGISTER_SIZE)
 				      + INT_REGISTER_SIZE,
-				      tdesc_arm_with_m);
+				      tdesc_with_m);
 
       /* M-profile plus M4F VFP.  */
       register_remote_g_packet_guess (gdbarch,
@@ -9817,7 +9817,7 @@ arm_register_g_packet_guesses (struct gdbarch *gdbarch)
 				      (16 * INT_REGISTER_SIZE)
 				      + (16 * VFP_REGISTER_SIZE)
 				      + (2 * INT_REGISTER_SIZE),
-				      tdesc_arm_with_m_vfp_d16);
+				      tdesc_with_m_vfp_d16);
     }
 
   /* Otherwise we don't have a useful guess.  */
@@ -10452,13 +10452,13 @@ _initialize_arm_tdep (void)
 				  arm_elf_osabi_sniffer);
 
   /* Initialize the standard target descriptions.  */
-  initialize_tdesc_arm_with_m ();
-  initialize_tdesc_arm_with_m_fpa_layout ();
-  initialize_tdesc_arm_with_m_vfp_d16 ();
-  initialize_tdesc_arm_with_iwmmxt ();
-  initialize_tdesc_arm_with_vfpv2 ();
-  initialize_tdesc_arm_with_vfpv3 ();
-  initialize_tdesc_arm_with_neon ();
+  initialize_tdesc_with_m ();
+  initialize_tdesc_with_m_fpa_layout ();
+  initialize_tdesc_with_m_vfp_d16 ();
+  initialize_tdesc_with_iwmmxt ();
+  initialize_tdesc_with_vfpv2 ();
+  initialize_tdesc_with_vfpv3 ();
+  initialize_tdesc_with_neon ();
 
   /* Get the number of possible sets of register names defined in opcodes.  */
   num_disassembly_options = get_arm_regname_num_options ();
diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index dbf4963..93ddbe2 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -31,8 +31,8 @@
 #   make GDB=/path/to/gdb XMLTOC="xml files" cfiles
 
 WHICH = aarch64 \
-	arm-with-iwmmxt arm-with-vfpv2 arm-with-vfpv3 arm-with-neon \
-	arm-with-m arm-with-m-fpa-layout arm-with-m-vfp-d16 \
+	arm/with-iwmmxt arm/with-vfpv2 arm/with-vfpv3 arm/with-neon \
+	arm/with-m arm/with-m-fpa-layout arm/with-m-vfp-d16 \
 	i386/i386 i386/i386-linux \
 	i386/i386-mmx i386/i386-mmx-linux \
 	i386/amd64 i386/amd64-linux \
@@ -61,7 +61,7 @@ WHICH = aarch64 \
 
 # Record which registers should be sent to GDB by default after stop.
 aarch64-expedite = x29,sp,pc
-arm-expedite = r11,sp,pc
+arm/arm-expedite = r11,sp,pc
 i386/i386-expedite = ebp,esp,eip
 i386/i386-linux-expedite = ebp,esp,eip
 i386/amd64-expedite = rbp,rsp,rip
@@ -141,7 +141,7 @@ cfiles: $(CFILES)
 	sh ../../move-if-change $@.tmp $@
 
 # Other dependencies.
-$(outdir)/arm-with-iwmmxt.dat: arm-core.xml xscale-iwmmxt.xml
+$(outdir)/arm/with-iwmmxt.dat: arm/core.xml arm/xscale-iwmmxt.xml
 $(outdir)/i386/i386.dat: i386/32bit-core.xml i386/32bit-sse.xml
 $(outdir)/i386/i386-linux.dat: i386/32bit-core.xml i386/32bit-sse.xml \
 			       i386/32bit-linux.xml
diff --git a/gdb/features/arm-core.xml b/gdb/features/arm/core.xml
similarity index 100%
rename from gdb/features/arm-core.xml
rename to gdb/features/arm/core.xml
diff --git a/gdb/features/arm-fpa.xml b/gdb/features/arm/fpa.xml
similarity index 100%
rename from gdb/features/arm-fpa.xml
rename to gdb/features/arm/fpa.xml
diff --git a/gdb/features/arm-m-profile.xml b/gdb/features/arm/m-profile.xml
similarity index 100%
rename from gdb/features/arm-m-profile.xml
rename to gdb/features/arm/m-profile.xml
diff --git a/gdb/features/arm-vfpv2.xml b/gdb/features/arm/vfpv2.xml
similarity index 100%
rename from gdb/features/arm-vfpv2.xml
rename to gdb/features/arm/vfpv2.xml
diff --git a/gdb/features/arm-vfpv3.xml b/gdb/features/arm/vfpv3.xml
similarity index 100%
rename from gdb/features/arm-vfpv3.xml
rename to gdb/features/arm/vfpv3.xml
diff --git a/gdb/features/arm-with-iwmmxt.c b/gdb/features/arm/with-iwmmxt.c
similarity index 96%
rename from gdb/features/arm-with-iwmmxt.c
rename to gdb/features/arm/with-iwmmxt.c
index 1770e03..378286f 100644
--- a/gdb/features/arm-with-iwmmxt.c
+++ b/gdb/features/arm/with-iwmmxt.c
@@ -1,13 +1,13 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: arm-with-iwmmxt.xml */
+  Original: with-iwmmxt.xml */
 
 #include "defs.h"
 #include "osabi.h"
 #include "target-descriptions.h"
 
-struct target_desc *tdesc_arm_with_iwmmxt;
+struct target_desc *tdesc_with_iwmmxt;
 static void
-initialize_tdesc_arm_with_iwmmxt (void)
+initialize_tdesc_with_iwmmxt (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
@@ -78,5 +78,5 @@ initialize_tdesc_arm_with_iwmmxt (void)
   tdesc_create_reg (feature, "wCGR2", 46, 1, "vector", 32, "int");
   tdesc_create_reg (feature, "wCGR3", 47, 1, "vector", 32, "int");
 
-  tdesc_arm_with_iwmmxt = result;
+  tdesc_with_iwmmxt = result;
 }
diff --git a/gdb/features/arm-with-iwmmxt.xml b/gdb/features/arm/with-iwmmxt.xml
similarity index 92%
rename from gdb/features/arm-with-iwmmxt.xml
rename to gdb/features/arm/with-iwmmxt.xml
index 5adadee..6b2939d 100644
--- a/gdb/features/arm-with-iwmmxt.xml
+++ b/gdb/features/arm/with-iwmmxt.xml
@@ -8,6 +8,6 @@
 <!DOCTYPE target SYSTEM "gdb-target.dtd">
 <target>
   <architecture>iwmmxt</architecture>
-  <xi:include href="arm-core.xml"/>
+  <xi:include href="core.xml"/>
   <xi:include href="xscale-iwmmxt.xml"/>
 </target>
diff --git a/gdb/features/arm-with-m-fpa-layout.c b/gdb/features/arm/with-m-fpa-layout.c
similarity index 91%
rename from gdb/features/arm-with-m-fpa-layout.c
rename to gdb/features/arm/with-m-fpa-layout.c
index bc51f05..941f21b 100644
--- a/gdb/features/arm-with-m-fpa-layout.c
+++ b/gdb/features/arm/with-m-fpa-layout.c
@@ -1,13 +1,13 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: arm-with-m-fpa-layout.xml */
+  Original: with-m-fpa-layout.xml */
 
 #include "defs.h"
 #include "osabi.h"
 #include "target-descriptions.h"
 
-struct target_desc *tdesc_arm_with_m_fpa_layout;
+struct target_desc *tdesc_with_m_fpa_layout;
 static void
-initialize_tdesc_arm_with_m_fpa_layout (void)
+initialize_tdesc_with_m_fpa_layout (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
@@ -40,5 +40,5 @@ initialize_tdesc_arm_with_m_fpa_layout (void)
   tdesc_create_reg (feature, "", 24, 1, NULL, 32, "int");
   tdesc_create_reg (feature, "xpsr", 25, 1, NULL, 32, "int");
 
-  tdesc_arm_with_m_fpa_layout = result;
+  tdesc_with_m_fpa_layout = result;
 }
diff --git a/gdb/features/arm-with-m-fpa-layout.xml b/gdb/features/arm/with-m-fpa-layout.xml
similarity index 100%
rename from gdb/features/arm-with-m-fpa-layout.xml
rename to gdb/features/arm/with-m-fpa-layout.xml
diff --git a/gdb/features/arm-with-m-vfp-d16.c b/gdb/features/arm/with-m-vfp-d16.c
similarity index 94%
rename from gdb/features/arm-with-m-vfp-d16.c
rename to gdb/features/arm/with-m-vfp-d16.c
index a0da583..5f47e3d 100644
--- a/gdb/features/arm-with-m-vfp-d16.c
+++ b/gdb/features/arm/with-m-vfp-d16.c
@@ -1,13 +1,13 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: arm-with-m-vfp-d16.xml */
+  Original: with-m-vfp-d16.xml */
 
 #include "defs.h"
 #include "osabi.h"
 #include "target-descriptions.h"
 
-struct target_desc *tdesc_arm_with_m_vfp_d16;
+struct target_desc *tdesc_with_m_vfp_d16;
 static void
-initialize_tdesc_arm_with_m_vfp_d16 (void)
+initialize_tdesc_with_m_vfp_d16 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
@@ -50,5 +50,5 @@ initialize_tdesc_arm_with_m_vfp_d16 (void)
   tdesc_create_reg (feature, "d15", 41, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 42, 1, "float", 32, "int");
 
-  tdesc_arm_with_m_vfp_d16 = result;
+  tdesc_with_m_vfp_d16 = result;
 }
diff --git a/gdb/features/arm-with-m-vfp-d16.xml b/gdb/features/arm/with-m-vfp-d16.xml
similarity index 83%
rename from gdb/features/arm-with-m-vfp-d16.xml
rename to gdb/features/arm/with-m-vfp-d16.xml
index a6527ab..7fb6fb9 100644
--- a/gdb/features/arm-with-m-vfp-d16.xml
+++ b/gdb/features/arm/with-m-vfp-d16.xml
@@ -7,7 +7,7 @@
 
 <!DOCTYPE target SYSTEM "gdb-target.dtd">
 <target>
-  <xi:include href="arm-m-profile.xml"/>
+  <xi:include href="m-profile.xml"/>
   <!-- Layout of vfpv4-sp-d16 is identical to vfpv2 -->
-  <xi:include href="arm-vfpv2.xml"/>
+  <xi:include href="vfpv2.xml"/>
 </target>
diff --git a/gdb/features/arm-with-m.c b/gdb/features/arm/with-m.c
similarity index 91%
rename from gdb/features/arm-with-m.c
rename to gdb/features/arm/with-m.c
index 8e27a80..5ce95d6 100644
--- a/gdb/features/arm-with-m.c
+++ b/gdb/features/arm/with-m.c
@@ -1,13 +1,13 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: arm-with-m.xml */
+  Original: with-m.xml */
 
 #include "defs.h"
 #include "osabi.h"
 #include "target-descriptions.h"
 
-struct target_desc *tdesc_arm_with_m;
+struct target_desc *tdesc_with_m;
 static void
-initialize_tdesc_arm_with_m (void)
+initialize_tdesc_with_m (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
@@ -31,5 +31,5 @@ initialize_tdesc_arm_with_m (void)
   tdesc_create_reg (feature, "pc", 15, 1, NULL, 32, "code_ptr");
   tdesc_create_reg (feature, "xpsr", 25, 1, NULL, 32, "int");
 
-  tdesc_arm_with_m = result;
+  tdesc_with_m = result;
 }
diff --git a/gdb/features/arm-with-m.xml b/gdb/features/arm/with-m.xml
similarity index 89%
rename from gdb/features/arm-with-m.xml
rename to gdb/features/arm/with-m.xml
index 6b82405..b1a4316 100644
--- a/gdb/features/arm-with-m.xml
+++ b/gdb/features/arm/with-m.xml
@@ -7,5 +7,5 @@
 
 <!DOCTYPE target SYSTEM "gdb-target.dtd">
 <target>
-  <xi:include href="arm-m-profile.xml"/>
+  <xi:include href="m-profile.xml"/>
 </target>
diff --git a/gdb/features/arm-with-neon.c b/gdb/features/arm/with-neon.c
similarity index 96%
rename from gdb/features/arm-with-neon.c
rename to gdb/features/arm/with-neon.c
index 61c9a3a..2139a59 100644
--- a/gdb/features/arm-with-neon.c
+++ b/gdb/features/arm/with-neon.c
@@ -1,13 +1,13 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: arm-with-neon.xml */
+  Original: with-neon.xml */
 
 #include "defs.h"
 #include "osabi.h"
 #include "target-descriptions.h"
 
-struct target_desc *tdesc_arm_with_neon;
+struct target_desc *tdesc_with_neon;
 static void
-initialize_tdesc_arm_with_neon (void)
+initialize_tdesc_with_neon (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
@@ -68,5 +68,5 @@ initialize_tdesc_arm_with_neon (void)
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.arm.neon");
 
-  tdesc_arm_with_neon = result;
+  tdesc_with_neon = result;
 }
diff --git a/gdb/features/arm-with-neon.xml b/gdb/features/arm/with-neon.xml
similarity index 83%
rename from gdb/features/arm-with-neon.xml
rename to gdb/features/arm/with-neon.xml
index 53d1618..096bb5a 100644
--- a/gdb/features/arm-with-neon.xml
+++ b/gdb/features/arm/with-neon.xml
@@ -7,7 +7,7 @@
 
 <!DOCTYPE target SYSTEM "gdb-target.dtd">
 <target>
-  <xi:include href="arm-core.xml"/>
-  <xi:include href="arm-vfpv3.xml"/>
+  <xi:include href="core.xml"/>
+  <xi:include href="vfpv3.xml"/>
   <feature name="org.gnu.gdb.arm.neon"/>
 </target>
diff --git a/gdb/features/arm-with-vfpv2.c b/gdb/features/arm/with-vfpv2.c
similarity index 94%
rename from gdb/features/arm-with-vfpv2.c
rename to gdb/features/arm/with-vfpv2.c
index 78e3c81..484bf24 100644
--- a/gdb/features/arm-with-vfpv2.c
+++ b/gdb/features/arm/with-vfpv2.c
@@ -1,13 +1,13 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: arm-with-vfpv2.xml */
+  Original: with-vfpv2.xml */
 
 #include "defs.h"
 #include "osabi.h"
 #include "target-descriptions.h"
 
-struct target_desc *tdesc_arm_with_vfpv2;
+struct target_desc *tdesc_with_vfpv2;
 static void
-initialize_tdesc_arm_with_vfpv2 (void)
+initialize_tdesc_with_vfpv2 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
@@ -50,5 +50,5 @@ initialize_tdesc_arm_with_vfpv2 (void)
   tdesc_create_reg (feature, "d15", 41, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 42, 1, "float", 32, "int");
 
-  tdesc_arm_with_vfpv2 = result;
+  tdesc_with_vfpv2 = result;
 }
diff --git a/gdb/features/arm-with-vfpv3.xml b/gdb/features/arm/with-vfpv2.xml
similarity index 82%
rename from gdb/features/arm-with-vfpv3.xml
rename to gdb/features/arm/with-vfpv2.xml
index aa39548..136c694 100644
--- a/gdb/features/arm-with-vfpv3.xml
+++ b/gdb/features/arm/with-vfpv2.xml
@@ -7,6 +7,6 @@
 
 <!DOCTYPE target SYSTEM "gdb-target.dtd">
 <target>
-  <xi:include href="arm-core.xml"/>
-  <xi:include href="arm-vfpv3.xml"/>
+  <xi:include href="core.xml"/>
+  <xi:include href="vfpv2.xml"/>
 </target>
diff --git a/gdb/features/arm-with-vfpv3.c b/gdb/features/arm/with-vfpv3.c
similarity index 96%
rename from gdb/features/arm-with-vfpv3.c
rename to gdb/features/arm/with-vfpv3.c
index e48ca79..e6d5dae 100644
--- a/gdb/features/arm-with-vfpv3.c
+++ b/gdb/features/arm/with-vfpv3.c
@@ -1,13 +1,13 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: arm-with-vfpv3.xml */
+  Original: with-vfpv3.xml */
 
 #include "defs.h"
 #include "osabi.h"
 #include "target-descriptions.h"
 
-struct target_desc *tdesc_arm_with_vfpv3;
+struct target_desc *tdesc_with_vfpv3;
 static void
-initialize_tdesc_arm_with_vfpv3 (void)
+initialize_tdesc_with_vfpv3 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
@@ -66,5 +66,5 @@ initialize_tdesc_arm_with_vfpv3 (void)
   tdesc_create_reg (feature, "d31", 57, 1, NULL, 64, "ieee_double");
   tdesc_create_reg (feature, "fpscr", 58, 1, "float", 32, "int");
 
-  tdesc_arm_with_vfpv3 = result;
+  tdesc_with_vfpv3 = result;
 }
diff --git a/gdb/features/arm-with-vfpv2.xml b/gdb/features/arm/with-vfpv3.xml
similarity index 82%
rename from gdb/features/arm-with-vfpv2.xml
rename to gdb/features/arm/with-vfpv3.xml
index 98a5a1c..855ad13 100644
--- a/gdb/features/arm-with-vfpv2.xml
+++ b/gdb/features/arm/with-vfpv3.xml
@@ -7,6 +7,6 @@
 
 <!DOCTYPE target SYSTEM "gdb-target.dtd">
 <target>
-  <xi:include href="arm-core.xml"/>
-  <xi:include href="arm-vfpv2.xml"/>
+  <xi:include href="core.xml"/>
+  <xi:include href="vfpv3.xml"/>
 </target>
diff --git a/gdb/features/xscale-iwmmxt.xml b/gdb/features/arm/xscale-iwmmxt.xml
similarity index 100%
rename from gdb/features/xscale-iwmmxt.xml
rename to gdb/features/arm/xscale-iwmmxt.xml
diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index cc4f53d..1b816ec 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -58,19 +58,19 @@ case "${target}" in
 			srv_linux_regsets=yes
 			srv_linux_thread_db=yes
 			;;
-  arm*-*-linux*)	srv_regobj="reg-arm.o arm-with-iwmmxt.o"
-			srv_regobj="${srv_regobj} arm-with-vfpv2.o"
-			srv_regobj="${srv_regobj} arm-with-vfpv3.o"
-			srv_regobj="${srv_regobj} arm-with-neon.o"
+  arm*-*-linux*)	srv_regobj="reg-arm.o with-iwmmxt.o"
+			srv_regobj="${srv_regobj} with-vfpv2.o"
+			srv_regobj="${srv_regobj} with-vfpv3.o"
+			srv_regobj="${srv_regobj} with-neon.o"
 			srv_tgtobj="$srv_linux_obj linux-arm-low.o"
-			srv_xmlfiles="arm-with-iwmmxt.xml"
-			srv_xmlfiles="${srv_xmlfiles} arm-with-vfpv2.xml"
-			srv_xmlfiles="${srv_xmlfiles} arm-with-vfpv3.xml"
-			srv_xmlfiles="${srv_xmlfiles} arm-with-neon.xml"
-			srv_xmlfiles="${srv_xmlfiles} arm-core.xml"
-			srv_xmlfiles="${srv_xmlfiles} xscale-iwmmxt.xml"
-			srv_xmlfiles="${srv_xmlfiles} arm-vfpv2.xml"
-			srv_xmlfiles="${srv_xmlfiles} arm-vfpv3.xml"
+			srv_xmlfiles="arm/with-iwmmxt.xml"
+			srv_xmlfiles="${srv_xmlfiles} arm/with-vfpv2.xml"
+			srv_xmlfiles="${srv_xmlfiles} arm/with-vfpv3.xml"
+			srv_xmlfiles="${srv_xmlfiles} arm/with-neon.xml"
+			srv_xmlfiles="${srv_xmlfiles} arm/core.xml"
+			srv_xmlfiles="${srv_xmlfiles} arm/xscale-iwmmxt.xml"
+			srv_xmlfiles="${srv_xmlfiles} arm/vfpv2.xml"
+			srv_xmlfiles="${srv_xmlfiles} arm/vfpv3.xml"
 			srv_linux_usrregs=yes
 			srv_linux_regsets=yes
 			srv_linux_thread_db=yes
diff --git a/gdb/testsuite/gdb.xml/tdesc-regs.exp b/gdb/testsuite/gdb.xml/tdesc-regs.exp
index 0e4547c..18a99ba 100644
--- a/gdb/testsuite/gdb.xml/tdesc-regs.exp
+++ b/gdb/testsuite/gdb.xml/tdesc-regs.exp
@@ -28,7 +28,8 @@ set regdir ""
 set architecture ""
 switch -glob -- [istarget] {
     "arm*-*-*" {
-        set core-regs {arm-core.xml}
+        set regdir "arm/"
+        set core-regs {core.xml}
     }
     "*m68k-*-*" {
         set core-regs {m68k-core.xml}
