Arm: Allow version strings in the triplet regexp
authorAlan Hayward <alan.hayward@arm.com>
Wed, 26 Jun 2019 13:10:08 +0000 (14:10 +0100)
committerAlan Hayward <alan.hayward@arm.com>
Wed, 26 Jun 2019 13:11:07 +0000 (14:11 +0100)
On Arm, the OS may use the full version string for the arch name when
installing the compiler, for example armv7hl-redhat-linux-gnueabi-gcc.

Implement gdbarch_gnu_triplet_regexp for Arm to allow this to be detected.
Ensure that other Arm targets (eg iwmmxt) are not affected.

This fixes the compile/ set of tests on those systems.

gdb/ChangeLog:

2019-06-26  Alan Hayward  <alan.hayward@arm.com>

* arm-tdep.c (arm_gnu_triplet_regexp): New function.
(arm_gdbarch_init): Add arm_gnu_triplet_regexp.

gdb/ChangeLog
gdb/arm-tdep.c

index 3de4e19..3e6a170 100644 (file)
@@ -1,3 +1,8 @@
+2019-06-26  Alan Hayward  <alan.hayward@arm.com>
+
+       * arm-tdep.c (arm_gnu_triplet_regexp): New function.
+       (arm_gdbarch_init): Add arm_gnu_triplet_regexp.
+
 2019-06-25  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * arm-tdep.c (struct arm_per_objfile) <section_maps_sorted>: New
index 2ba77e2..039b2f0 100644 (file)
@@ -8831,7 +8831,17 @@ arm_code_of_frame_writable (struct gdbarch *gdbarch, struct frame_info *frame)
     return 1;
 }
 
-\f
+/* Implement gdbarch_gnu_triplet_regexp.  If the arch name is arm then allow it
+   to be postfixed by a version (eg armv7hl).  */
+
+static const char *
+arm_gnu_triplet_regexp (struct gdbarch *gdbarch)
+{
+  if (strcmp (gdbarch_bfd_arch_info (gdbarch)->arch_name, "arm") == 0)
+    return "arm(v[^- ]*)?";
+  return gdbarch_bfd_arch_info (gdbarch)->arch_name;
+}
+
 /* Initialize the current architecture based on INFO.  If possible,
    re-use an architecture from ARCHES, which is a list of
    architectures already created during this debugging session.
@@ -9433,6 +9443,8 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_disassembler_options (gdbarch, &arm_disassembler_options);
   set_gdbarch_valid_disassembler_options (gdbarch, disassembler_options_arm ());
 
+  set_gdbarch_gnu_triplet_regexp (gdbarch, arm_gnu_triplet_regexp);
+
   return gdbarch;
 }