Arm: Allow version strings in the triplet regexp

Message ID 20190612095912.86640-1-alan.hayward@arm.com
State New
Headers show
Series
  • Arm: Allow version strings in the triplet regexp
Related show

Commit Message

Alan Hayward June 12, 2019, 9:59 a.m.
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

Alan Hayward June 26, 2019, 1:16 p.m. | #1
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)

>

Patch

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;
 }