Arm: Allow version strings in the triplet regexp
Commit Message
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-12 Alan Hayward <alan.hayward@arm.com>
* arm-tdep.c (arm_gnu_triplet_regexp): New function.
(arm_gdbarch_init): Add arm_gnu_triplet_regexp.
---
gdb/arm-tdep.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
--
2.20.1 (Apple Git-117)
Comments
I pushed this.
> On 12 Jun 2019, at 10:59, Alan Hayward <Alan.Hayward@arm.com> wrote:
>
> 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-12 Alan Hayward <alan.hayward@arm.com>
>
> * arm-tdep.c (arm_gnu_triplet_regexp): New function.
> (arm_gdbarch_init): Add arm_gnu_triplet_regexp.
> ---
> gdb/arm-tdep.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
> index 742bfa5706..09a8b51849 100644
> --- a/gdb/arm-tdep.c
> +++ b/gdb/arm-tdep.c
> @@ -8838,7 +8838,17 @@ arm_code_of_frame_writable (struct gdbarch *gdbarch, struct frame_info *frame)
> return 1;
> }
>
> -
> +/* 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.
> @@ -9440,6 +9450,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;
> }
>
> --
> 2.20.1 (Apple Git-117)
>
@@ -8838,7 +8838,17 @@ arm_code_of_frame_writable (struct gdbarch *gdbarch, struct frame_info *frame)
return 1;
}
-
+/* 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.
@@ -9440,6 +9450,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;
}