gas, bfd: Rename Arm v8/v9 architecture tags

Message ID 20260526153155.196966-1-sivan.shani@arm.com
State New
Headers
Series gas, bfd: Rename Arm v8/v9 architecture tags |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 fail Build failed
linaro-tcwg-bot/tcwg_binutils_build--master-arm fail Build failed

Commit Message

Sivan Shani May 26, 2026, 3:31 p.m. UTC
  Rename the Arm AEABI CPU architecture tag constants to include the
profile suffix for A-profile architectures. This makes the naming
consistent with existing v8-R and v8-M tag names, while preserving the
existing numeric tag values.

Update BFD and GAS usage accordingly, including attribute combination
tables, architecture checks, and mach selection.
---
 bfd/elf32-arm.c     | 116 ++++++++++++++++++++++----------------------
 elfcpp/arm.h        |  12 ++---
 gas/config/tc-arm.c |  38 +++++++--------
 include/elf/arm.h   |  12 ++---
 4 files changed, 89 insertions(+), 89 deletions(-)
  

Comments

Richard Earnshaw May 27, 2026, 11:56 a.m. UTC | #1
On 26/05/2026 16:31, Sivan Shani wrote:
> Rename the Arm AEABI CPU architecture tag constants to include the
> profile suffix for A-profile architectures. This makes the naming
> consistent with existing v8-R and v8-M tag names, while preserving the
> existing numeric tag values.
> 
> Update BFD and GAS usage accordingly, including attribute combination
> tables, architecture checks, and mach selection.

This is a nice cleanup, but you need to fix the build failures (in gold) that the linaro checkers picked up on.

Try building with --enable-gold.

R.

> ---
>  bfd/elf32-arm.c     | 116 ++++++++++++++++++++++----------------------
>  elfcpp/arm.h        |  12 ++---
>  gas/config/tc-arm.c |  38 +++++++--------
>  include/elf/arm.h   |  12 ++---
>  4 files changed, 89 insertions(+), 89 deletions(-)
> 
> diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
> index bb0a24127ab..68b4152296e 100644
> --- a/bfd/elf32-arm.c
> +++ b/bfd/elf32-arm.c
> @@ -3876,7 +3876,7 @@ using_thumb2 (struct elf32_arm_link_hash_table *globals)
>    return (arch == TAG_CPU_ARCH_V6T2
>  	  || arch == TAG_CPU_ARCH_V7
>  	  || arch == TAG_CPU_ARCH_V7E_M
> -	  || arch == TAG_CPU_ARCH_V8
> +	  || arch == TAG_CPU_ARCH_V8A
>  	  || arch == TAG_CPU_ARCH_V8R
>  	  || arch == TAG_CPU_ARCH_V8M_MAIN
>  	  || arch == TAG_CPU_ARCH_V8_1M_MAIN);
> @@ -3891,7 +3891,7 @@ using_thumb2_bl (struct elf32_arm_link_hash_table *globals)
>      bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, Tag_CPU_arch);
>  
>    /* Force return logic to be reviewed for each new architecture.  */
> -  BFD_ASSERT (arch <= TAG_CPU_ARCH_V9);
> +  BFD_ASSERT (arch <= TAG_CPU_ARCH_V9A);
>  
>    /* Architecture was introduced after ARMv6T2 (eg. ARMv6-M).  */
>    return (arch == TAG_CPU_ARCH_V6T2
> @@ -4032,14 +4032,14 @@ arch_has_arm_nop (struct elf32_arm_link_hash_table *globals)
>  					     Tag_CPU_arch);
>  
>    /* Force return logic to be reviewed for each new architecture.  */
> -  BFD_ASSERT (arch <= TAG_CPU_ARCH_V9);
> +  BFD_ASSERT (arch <= TAG_CPU_ARCH_V9A);
>  
>    return (arch == TAG_CPU_ARCH_V6T2
>  	  || arch == TAG_CPU_ARCH_V6K
>  	  || arch == TAG_CPU_ARCH_V7
> -	  || arch == TAG_CPU_ARCH_V8
> +	  || arch == TAG_CPU_ARCH_V8A
>  	  || arch == TAG_CPU_ARCH_V8R
> -	  || arch == TAG_CPU_ARCH_V9);
> +	  || arch == TAG_CPU_ARCH_V9A);
>  }
>  
>  static bool
> @@ -13767,7 +13767,7 @@ bfd_arm_get_mach_from_attributes (bfd * abfd)
>  	return bfd_mach_arm_6SM;
>      case TAG_CPU_ARCH_V7E_M:
>  	return bfd_mach_arm_7EM;
> -    case TAG_CPU_ARCH_V8:
> +    case TAG_CPU_ARCH_V8A:
>  	return bfd_mach_arm_8;
>      case TAG_CPU_ARCH_V8R:
>  	return bfd_mach_arm_8R;
> @@ -13777,7 +13777,7 @@ bfd_arm_get_mach_from_attributes (bfd * abfd)
>  	return bfd_mach_arm_8M_MAIN;
>      case TAG_CPU_ARCH_V8_1M_MAIN:
>  	return bfd_mach_arm_8_1M_MAIN;
> -    case TAG_CPU_ARCH_V9:
> +    case TAG_CPU_ARCH_V9A:
>  	return bfd_mach_arm_9;
>  
>      default:
> @@ -14111,28 +14111,28 @@ tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
>      };
>    static const int v8[] =
>      {
> -      T(V8),		/* PRE_V4.  */
> -      T(V8),		/* V4.  */
> -      T(V8),		/* V4T.  */
> -      T(V8),		/* V5T.  */
> -      T(V8),		/* V5TE.  */
> -      T(V8),		/* V5TEJ.  */
> -      T(V8),		/* V6.  */
> -      T(V8),		/* V6KZ.  */
> -      T(V8),		/* V6T2.  */
> -      T(V8),		/* V6K.  */
> -      T(V8),		/* V7.  */
> -      T(V8),		/* V6_M.  */
> -      T(V8),		/* V6S_M.  */
> -      T(V8),		/* V7E_M.  */
> -      T(V8),		/* V8.  */
> -      T(V8),		/* V8-R.  */
> -      T(V8),		/* V8-M.BASE.  */
> -      T(V8),		/* V8-M.MAIN.  */
> -      T(V8),		/* V8.1.  */
> -      T(V8),		/* V8.2.  */
> -      T(V8),		/* V8.3.  */
> -      T(V8),		/* V8.1-M.MAIN.  */
> +      T(V8A),		/* PRE_V4.  */
> +      T(V8A),		/* V4.  */
> +      T(V8A),		/* V4T.  */
> +      T(V8A),		/* V5T.  */
> +      T(V8A),		/* V5TE.  */
> +      T(V8A),		/* V5TEJ.  */
> +      T(V8A),		/* V6.  */
> +      T(V8A),		/* V6KZ.  */
> +      T(V8A),		/* V6T2.  */
> +      T(V8A),		/* V6K.  */
> +      T(V8A),		/* V7.  */
> +      T(V8A),		/* V6_M.  */
> +      T(V8A),		/* V6S_M.  */
> +      T(V8A),		/* V7E_M.  */
> +      T(V8A),		/* V8A.  */
> +      T(V8A),		/* V8-R.  */
> +      T(V8A),		/* V8-M.BASE.  */
> +      T(V8A),		/* V8-M.MAIN.  */
> +      T(V8A),		/* V8.1.  */
> +      T(V8A),		/* V8.2.  */
> +      T(V8A),		/* V8.3.  */
> +      T(V8A),		/* V8.1-M.MAIN.  */
>      };
>    static const int v8r[] =
>      {
> @@ -14150,7 +14150,7 @@ tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
>        T(V8R),		/* V6_M.  */
>        T(V8R),		/* V6S_M.  */
>        T(V8R),		/* V7E_M.  */
> -      T(V8),		/* V8.  */
> +      T(V8A),		/* V8A.  */
>        T(V8R),		/* V8R.  */
>      };
>    static const int v8m_baseline[] =
> @@ -14169,7 +14169,7 @@ tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
>        T(V8M_BASE),	/* V6_M.  */
>        T(V8M_BASE),	/* V6S_M.  */
>        -1,		/* V7E_M.  */
> -      -1,		/* V8.  */
> +      -1,		/* V8A.  */
>        -1,		/* V8R.  */
>        T(V8M_BASE)	/* V8-M BASELINE.  */
>      };
> @@ -14189,7 +14189,7 @@ tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
>        T(V8M_MAIN),	/* V6_M.  */
>        T(V8M_MAIN),	/* V6S_M.  */
>        T(V8M_MAIN),	/* V7E_M.  */
> -      -1,		/* V8.  */
> +      -1,		/* V8A.  */
>        -1,		/* V8R.  */
>        T(V8M_MAIN),	/* V8-M BASELINE.  */
>        T(V8M_MAIN)	/* V8-M MAINLINE.  */
> @@ -14210,7 +14210,7 @@ tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
>        T(V8_1M_MAIN),	/* V6_M.  */
>        T(V8_1M_MAIN),	/* V6S_M.  */
>        T(V8_1M_MAIN),	/* V7E_M.  */
> -      -1,		/* V8.  */
> +      -1,		/* V8A.  */
>        -1,		/* V8R.  */
>        T(V8_1M_MAIN),	/* V8-M BASELINE.  */
>        T(V8_1M_MAIN),	/* V8-M MAINLINE.  */
> @@ -14221,29 +14221,29 @@ tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
>      };
>    static const int v9[] =
>      {
> -      T(V9),		/* PRE_V4.  */
> -      T(V9),		/* V4.  */
> -      T(V9),		/* V4T.  */
> -      T(V9),		/* V5T.  */
> -      T(V9),		/* V5TE.  */
> -      T(V9),		/* V5TEJ.  */
> -      T(V9),		/* V6.  */
> -      T(V9),		/* V6KZ.  */
> -      T(V9),		/* V6T2.  */
> -      T(V9),		/* V6K.  */
> -      T(V9),		/* V7.  */
> -      T(V9),		/* V6_M.  */
> -      T(V9),		/* V6S_M.  */
> -      T(V9),		/* V7E_M.  */
> -      T(V9),		/* V8.  */
> -      T(V9),		/* V8-R.  */
> -      T(V9),		/* V8-M.BASE.  */
> -      T(V9),		/* V8-M.MAIN.  */
> -      T(V9),		/* V8.1.  */
> -      T(V9),		/* V8.2.  */
> -      T(V9),		/* V8.3.  */
> -      T(V9),		/* V8.1-M.MAIN.  */
> -      T(V9),		/* V9.  */
> +      T(V9A),		/* PRE_V4.  */
> +      T(V9A),		/* V4.  */
> +      T(V9A),		/* V4T.  */
> +      T(V9A),		/* V5T.  */
> +      T(V9A),		/* V5TE.  */
> +      T(V9A),		/* V5TEJ.  */
> +      T(V9A),		/* V6.  */
> +      T(V9A),		/* V6KZ.  */
> +      T(V9A),		/* V6T2.  */
> +      T(V9A),		/* V6K.  */
> +      T(V9A),		/* V7.  */
> +      T(V9A),		/* V6_M.  */
> +      T(V9A),		/* V6S_M.  */
> +      T(V9A),		/* V7E_M.  */
> +      T(V9A),		/* V8A.  */
> +      T(V9A),		/* V8-R.  */
> +      T(V9A),		/* V8-M.BASE.  */
> +      T(V9A),		/* V8-M.MAIN.  */
> +      T(V9A),		/* V8.1.  */
> +      T(V9A),		/* V8.2.  */
> +      T(V9A),		/* V8.3.  */
> +      T(V9A),		/* V8.1-M.MAIN.  */
> +      T(V9A),		/* V9A.  */
>       };
>    static const int v4t_plus_v6_m[] =
>      {
> @@ -14261,7 +14261,7 @@ tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
>        T(V6_M),		/* V6_M.  */
>        T(V6S_M),		/* V6S_M.  */
>        T(V7E_M),		/* V7E_M.  */
> -      T(V8),		/* V8.  */
> +      T(V8A),		/* V8A.  */
>        -1,		/* V8R.  */
>        T(V8M_BASE),	/* V8-M BASELINE.  */
>        T(V8M_MAIN),	/* V8-M MAINLINE.  */
> @@ -14269,7 +14269,7 @@ tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
>        -1,		/* Unused (19).  */
>        -1,		/* Unused (20).  */
>        T(V8_1M_MAIN),	/* V8.1-M MAINLINE.  */
> -      T(V9),		/* V9.  */
> +      T(V9A),		/* V9A.  */
>        T(V4T_PLUS_V6_M)	/* V4T plus V6_M.  */
>      };
>    static const int *const comb[] =
> diff --git a/elfcpp/arm.h b/elfcpp/arm.h
> index 86f9ab0ed51..6f1c595af0e 100644
> --- a/elfcpp/arm.h
> +++ b/elfcpp/arm.h
> @@ -253,16 +253,16 @@ enum
>    TAG_CPU_ARCH_V6_M,
>    TAG_CPU_ARCH_V6S_M,
>    TAG_CPU_ARCH_V7E_M,
> -  TAG_CPU_ARCH_V8,
> +  TAG_CPU_ARCH_V8A,
>    TAG_CPU_ARCH_V8R,
>    TAG_CPU_ARCH_V8M_BASE,
>    TAG_CPU_ARCH_V8M_MAIN,
> -  TAG_CPU_ARCH_8_1A,
> -  TAG_CPU_ARCH_8_2A,
> -  TAG_CPU_ARCH_8_3A,
> +  TAG_CPU_ARCH_V8_1A,
> +  TAG_CPU_ARCH_V8_2A,
> +  TAG_CPU_ARCH_V8_3A,
>    TAG_CPU_ARCH_V8_1M_MAIN,
> -  TAG_CPU_ARCH_V9,
> -  MAX_TAG_CPU_ARCH = TAG_CPU_ARCH_V9,
> +  TAG_CPU_ARCH_V9A,
> +  MAX_TAG_CPU_ARCH = TAG_CPU_ARCH_V9A,
>    // Pseudo-architecture to allow objects to be compatible with the subset of
>    // armv4t and armv6-m.  This value should never be stored in object files.
>    TAG_CPU_ARCH_V4T_PLUS_V6_M = (MAX_TAG_CPU_ARCH + 1)
> diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
> index 392ae8d761d..3ff29542411 100644
> --- a/gas/config/tc-arm.c
> +++ b/gas/config/tc-arm.c
> @@ -32100,26 +32100,26 @@ static const cpu_arch_ver_table cpu_arch_ver[] =
>      {TAG_CPU_ARCH_V7,	      ARM_ARCH_V7M},
>      {TAG_CPU_ARCH_V7,	      ARM_ARCH_V7VE},
>      {TAG_CPU_ARCH_V7E_M,      ARM_ARCH_V7EM},
> -    {TAG_CPU_ARCH_V8,	      ARM_ARCH_V8A},
> -    {TAG_CPU_ARCH_V8,	      ARM_ARCH_V8_1A},
> -    {TAG_CPU_ARCH_V8,	      ARM_ARCH_V8_2A},
> -    {TAG_CPU_ARCH_V8,	      ARM_ARCH_V8_3A},
> +    {TAG_CPU_ARCH_V8A,	      ARM_ARCH_V8A},
> +    {TAG_CPU_ARCH_V8A,	      ARM_ARCH_V8_1A},
> +    {TAG_CPU_ARCH_V8A,	      ARM_ARCH_V8_2A},
> +    {TAG_CPU_ARCH_V8A,	      ARM_ARCH_V8_3A},
>      {TAG_CPU_ARCH_V8M_BASE,   ARM_ARCH_V8M_BASE},
>      {TAG_CPU_ARCH_V8M_MAIN,   ARM_ARCH_V8M_MAIN},
>      {TAG_CPU_ARCH_V8R,	      ARM_ARCH_V8R},
> -    {TAG_CPU_ARCH_V8,	      ARM_ARCH_V8_4A},
> -    {TAG_CPU_ARCH_V8,	      ARM_ARCH_V8_5A},
> +    {TAG_CPU_ARCH_V8A,	      ARM_ARCH_V8_4A},
> +    {TAG_CPU_ARCH_V8A,	      ARM_ARCH_V8_5A},
>      {TAG_CPU_ARCH_V8_1M_MAIN, ARM_ARCH_V8_1M_MAIN},
> -    {TAG_CPU_ARCH_V8,	    ARM_ARCH_V8_6A},
> -    {TAG_CPU_ARCH_V8,	    ARM_ARCH_V8_7A},
> -    {TAG_CPU_ARCH_V8,	    ARM_ARCH_V8_8A},
> -    {TAG_CPU_ARCH_V8,	    ARM_ARCH_V8_9A},
> -    {TAG_CPU_ARCH_V9,	    ARM_ARCH_V9A},
> -    {TAG_CPU_ARCH_V9,	    ARM_ARCH_V9_1A},
> -    {TAG_CPU_ARCH_V9,	    ARM_ARCH_V9_2A},
> -    {TAG_CPU_ARCH_V9,	    ARM_ARCH_V9_3A},
> -    {TAG_CPU_ARCH_V9,	    ARM_ARCH_V9_4A},
> -    {TAG_CPU_ARCH_V9,	    ARM_ARCH_V9_5A},
> +    {TAG_CPU_ARCH_V8A,	    ARM_ARCH_V8_6A},
> +    {TAG_CPU_ARCH_V8A,	    ARM_ARCH_V8_7A},
> +    {TAG_CPU_ARCH_V8A,	    ARM_ARCH_V8_8A},
> +    {TAG_CPU_ARCH_V8A,	    ARM_ARCH_V8_9A},
> +    {TAG_CPU_ARCH_V9A,	    ARM_ARCH_V9A},
> +    {TAG_CPU_ARCH_V9A,	    ARM_ARCH_V9_1A},
> +    {TAG_CPU_ARCH_V9A,	    ARM_ARCH_V9_2A},
> +    {TAG_CPU_ARCH_V9A,	    ARM_ARCH_V9_3A},
> +    {TAG_CPU_ARCH_V9A,	    ARM_ARCH_V9_4A},
> +    {TAG_CPU_ARCH_V9A,	    ARM_ARCH_V9_5A},
>      {-1,		    ARM_ARCH_NONE}
>  };
>  
> @@ -32207,9 +32207,9 @@ get_aeabi_cpu_arch_from_fset (const arm_feature_set *arch_ext_fset,
>    if (ARM_FEATURE_EQUAL (*arch_ext_fset, arm_arch_any))
>      {
>        /* Force revisiting of decision for each new architecture.  */
> -      gas_assert (MAX_TAG_CPU_ARCH <= TAG_CPU_ARCH_V9);
> +      gas_assert (MAX_TAG_CPU_ARCH <= TAG_CPU_ARCH_V9A);
>        *profile = 'A';
> -      return TAG_CPU_ARCH_V9;
> +      return TAG_CPU_ARCH_V9A;
>      }
>  
>    ARM_CLEAR_FEATURE (arch_fset, *arch_ext_fset, *ext_fset);
> @@ -32485,7 +32485,7 @@ aeabi_set_public_attributes (void)
>       by the base architecture.
>  
>       For new architectures we will have to check these tests.  */
> -  gas_assert (arch <= TAG_CPU_ARCH_V9);
> +  gas_assert (arch <= TAG_CPU_ARCH_V9A);
>    if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v8)
>        || ARM_CPU_HAS_FEATURE (flags, arm_ext_v8m))
>      aeabi_set_attribute_int (Tag_DIV_use, 0);
> diff --git a/include/elf/arm.h b/include/elf/arm.h
> index 091eea5d5d8..9dd0e6089fe 100644
> --- a/include/elf/arm.h
> +++ b/include/elf/arm.h
> @@ -108,16 +108,16 @@
>  #define TAG_CPU_ARCH_V6_M	11
>  #define TAG_CPU_ARCH_V6S_M	12
>  #define TAG_CPU_ARCH_V7E_M	13
> -#define TAG_CPU_ARCH_V8		14
> +#define TAG_CPU_ARCH_V8A		14
>  #define TAG_CPU_ARCH_V8R	15
>  #define TAG_CPU_ARCH_V8M_BASE	16
>  #define TAG_CPU_ARCH_V8M_MAIN	17
> -#define TAG_CPU_ARCH_8_1A       18
> -#define TAG_CPU_ARCH_8_2A       19
> -#define TAG_CPU_ARCH_8_3A       20
> +#define TAG_CPU_ARCH_V8_1A       18
> +#define TAG_CPU_ARCH_V8_2A       19
> +#define TAG_CPU_ARCH_V8_3A       20
>  #define TAG_CPU_ARCH_V8_1M_MAIN 21
> -#define TAG_CPU_ARCH_V9         22
> -#define MAX_TAG_CPU_ARCH	TAG_CPU_ARCH_V9
> +#define TAG_CPU_ARCH_V9A         22
> +#define MAX_TAG_CPU_ARCH	TAG_CPU_ARCH_V9A
>  /* Pseudo-architecture to allow objects to be compatible with the subset of
>     armv4t and armv6-m.  This value should never be stored in object files.  */
>  #define TAG_CPU_ARCH_V4T_PLUS_V6_M (MAX_TAG_CPU_ARCH + 1)
  

Patch

diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index bb0a24127ab..68b4152296e 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -3876,7 +3876,7 @@  using_thumb2 (struct elf32_arm_link_hash_table *globals)
   return (arch == TAG_CPU_ARCH_V6T2
 	  || arch == TAG_CPU_ARCH_V7
 	  || arch == TAG_CPU_ARCH_V7E_M
-	  || arch == TAG_CPU_ARCH_V8
+	  || arch == TAG_CPU_ARCH_V8A
 	  || arch == TAG_CPU_ARCH_V8R
 	  || arch == TAG_CPU_ARCH_V8M_MAIN
 	  || arch == TAG_CPU_ARCH_V8_1M_MAIN);
@@ -3891,7 +3891,7 @@  using_thumb2_bl (struct elf32_arm_link_hash_table *globals)
     bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, Tag_CPU_arch);
 
   /* Force return logic to be reviewed for each new architecture.  */
-  BFD_ASSERT (arch <= TAG_CPU_ARCH_V9);
+  BFD_ASSERT (arch <= TAG_CPU_ARCH_V9A);
 
   /* Architecture was introduced after ARMv6T2 (eg. ARMv6-M).  */
   return (arch == TAG_CPU_ARCH_V6T2
@@ -4032,14 +4032,14 @@  arch_has_arm_nop (struct elf32_arm_link_hash_table *globals)
 					     Tag_CPU_arch);
 
   /* Force return logic to be reviewed for each new architecture.  */
-  BFD_ASSERT (arch <= TAG_CPU_ARCH_V9);
+  BFD_ASSERT (arch <= TAG_CPU_ARCH_V9A);
 
   return (arch == TAG_CPU_ARCH_V6T2
 	  || arch == TAG_CPU_ARCH_V6K
 	  || arch == TAG_CPU_ARCH_V7
-	  || arch == TAG_CPU_ARCH_V8
+	  || arch == TAG_CPU_ARCH_V8A
 	  || arch == TAG_CPU_ARCH_V8R
-	  || arch == TAG_CPU_ARCH_V9);
+	  || arch == TAG_CPU_ARCH_V9A);
 }
 
 static bool
@@ -13767,7 +13767,7 @@  bfd_arm_get_mach_from_attributes (bfd * abfd)
 	return bfd_mach_arm_6SM;
     case TAG_CPU_ARCH_V7E_M:
 	return bfd_mach_arm_7EM;
-    case TAG_CPU_ARCH_V8:
+    case TAG_CPU_ARCH_V8A:
 	return bfd_mach_arm_8;
     case TAG_CPU_ARCH_V8R:
 	return bfd_mach_arm_8R;
@@ -13777,7 +13777,7 @@  bfd_arm_get_mach_from_attributes (bfd * abfd)
 	return bfd_mach_arm_8M_MAIN;
     case TAG_CPU_ARCH_V8_1M_MAIN:
 	return bfd_mach_arm_8_1M_MAIN;
-    case TAG_CPU_ARCH_V9:
+    case TAG_CPU_ARCH_V9A:
 	return bfd_mach_arm_9;
 
     default:
@@ -14111,28 +14111,28 @@  tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
     };
   static const int v8[] =
     {
-      T(V8),		/* PRE_V4.  */
-      T(V8),		/* V4.  */
-      T(V8),		/* V4T.  */
-      T(V8),		/* V5T.  */
-      T(V8),		/* V5TE.  */
-      T(V8),		/* V5TEJ.  */
-      T(V8),		/* V6.  */
-      T(V8),		/* V6KZ.  */
-      T(V8),		/* V6T2.  */
-      T(V8),		/* V6K.  */
-      T(V8),		/* V7.  */
-      T(V8),		/* V6_M.  */
-      T(V8),		/* V6S_M.  */
-      T(V8),		/* V7E_M.  */
-      T(V8),		/* V8.  */
-      T(V8),		/* V8-R.  */
-      T(V8),		/* V8-M.BASE.  */
-      T(V8),		/* V8-M.MAIN.  */
-      T(V8),		/* V8.1.  */
-      T(V8),		/* V8.2.  */
-      T(V8),		/* V8.3.  */
-      T(V8),		/* V8.1-M.MAIN.  */
+      T(V8A),		/* PRE_V4.  */
+      T(V8A),		/* V4.  */
+      T(V8A),		/* V4T.  */
+      T(V8A),		/* V5T.  */
+      T(V8A),		/* V5TE.  */
+      T(V8A),		/* V5TEJ.  */
+      T(V8A),		/* V6.  */
+      T(V8A),		/* V6KZ.  */
+      T(V8A),		/* V6T2.  */
+      T(V8A),		/* V6K.  */
+      T(V8A),		/* V7.  */
+      T(V8A),		/* V6_M.  */
+      T(V8A),		/* V6S_M.  */
+      T(V8A),		/* V7E_M.  */
+      T(V8A),		/* V8A.  */
+      T(V8A),		/* V8-R.  */
+      T(V8A),		/* V8-M.BASE.  */
+      T(V8A),		/* V8-M.MAIN.  */
+      T(V8A),		/* V8.1.  */
+      T(V8A),		/* V8.2.  */
+      T(V8A),		/* V8.3.  */
+      T(V8A),		/* V8.1-M.MAIN.  */
     };
   static const int v8r[] =
     {
@@ -14150,7 +14150,7 @@  tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
       T(V8R),		/* V6_M.  */
       T(V8R),		/* V6S_M.  */
       T(V8R),		/* V7E_M.  */
-      T(V8),		/* V8.  */
+      T(V8A),		/* V8A.  */
       T(V8R),		/* V8R.  */
     };
   static const int v8m_baseline[] =
@@ -14169,7 +14169,7 @@  tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
       T(V8M_BASE),	/* V6_M.  */
       T(V8M_BASE),	/* V6S_M.  */
       -1,		/* V7E_M.  */
-      -1,		/* V8.  */
+      -1,		/* V8A.  */
       -1,		/* V8R.  */
       T(V8M_BASE)	/* V8-M BASELINE.  */
     };
@@ -14189,7 +14189,7 @@  tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
       T(V8M_MAIN),	/* V6_M.  */
       T(V8M_MAIN),	/* V6S_M.  */
       T(V8M_MAIN),	/* V7E_M.  */
-      -1,		/* V8.  */
+      -1,		/* V8A.  */
       -1,		/* V8R.  */
       T(V8M_MAIN),	/* V8-M BASELINE.  */
       T(V8M_MAIN)	/* V8-M MAINLINE.  */
@@ -14210,7 +14210,7 @@  tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
       T(V8_1M_MAIN),	/* V6_M.  */
       T(V8_1M_MAIN),	/* V6S_M.  */
       T(V8_1M_MAIN),	/* V7E_M.  */
-      -1,		/* V8.  */
+      -1,		/* V8A.  */
       -1,		/* V8R.  */
       T(V8_1M_MAIN),	/* V8-M BASELINE.  */
       T(V8_1M_MAIN),	/* V8-M MAINLINE.  */
@@ -14221,29 +14221,29 @@  tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
     };
   static const int v9[] =
     {
-      T(V9),		/* PRE_V4.  */
-      T(V9),		/* V4.  */
-      T(V9),		/* V4T.  */
-      T(V9),		/* V5T.  */
-      T(V9),		/* V5TE.  */
-      T(V9),		/* V5TEJ.  */
-      T(V9),		/* V6.  */
-      T(V9),		/* V6KZ.  */
-      T(V9),		/* V6T2.  */
-      T(V9),		/* V6K.  */
-      T(V9),		/* V7.  */
-      T(V9),		/* V6_M.  */
-      T(V9),		/* V6S_M.  */
-      T(V9),		/* V7E_M.  */
-      T(V9),		/* V8.  */
-      T(V9),		/* V8-R.  */
-      T(V9),		/* V8-M.BASE.  */
-      T(V9),		/* V8-M.MAIN.  */
-      T(V9),		/* V8.1.  */
-      T(V9),		/* V8.2.  */
-      T(V9),		/* V8.3.  */
-      T(V9),		/* V8.1-M.MAIN.  */
-      T(V9),		/* V9.  */
+      T(V9A),		/* PRE_V4.  */
+      T(V9A),		/* V4.  */
+      T(V9A),		/* V4T.  */
+      T(V9A),		/* V5T.  */
+      T(V9A),		/* V5TE.  */
+      T(V9A),		/* V5TEJ.  */
+      T(V9A),		/* V6.  */
+      T(V9A),		/* V6KZ.  */
+      T(V9A),		/* V6T2.  */
+      T(V9A),		/* V6K.  */
+      T(V9A),		/* V7.  */
+      T(V9A),		/* V6_M.  */
+      T(V9A),		/* V6S_M.  */
+      T(V9A),		/* V7E_M.  */
+      T(V9A),		/* V8A.  */
+      T(V9A),		/* V8-R.  */
+      T(V9A),		/* V8-M.BASE.  */
+      T(V9A),		/* V8-M.MAIN.  */
+      T(V9A),		/* V8.1.  */
+      T(V9A),		/* V8.2.  */
+      T(V9A),		/* V8.3.  */
+      T(V9A),		/* V8.1-M.MAIN.  */
+      T(V9A),		/* V9A.  */
      };
   static const int v4t_plus_v6_m[] =
     {
@@ -14261,7 +14261,7 @@  tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
       T(V6_M),		/* V6_M.  */
       T(V6S_M),		/* V6S_M.  */
       T(V7E_M),		/* V7E_M.  */
-      T(V8),		/* V8.  */
+      T(V8A),		/* V8A.  */
       -1,		/* V8R.  */
       T(V8M_BASE),	/* V8-M BASELINE.  */
       T(V8M_MAIN),	/* V8-M MAINLINE.  */
@@ -14269,7 +14269,7 @@  tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
       -1,		/* Unused (19).  */
       -1,		/* Unused (20).  */
       T(V8_1M_MAIN),	/* V8.1-M MAINLINE.  */
-      T(V9),		/* V9.  */
+      T(V9A),		/* V9A.  */
       T(V4T_PLUS_V6_M)	/* V4T plus V6_M.  */
     };
   static const int *const comb[] =
diff --git a/elfcpp/arm.h b/elfcpp/arm.h
index 86f9ab0ed51..6f1c595af0e 100644
--- a/elfcpp/arm.h
+++ b/elfcpp/arm.h
@@ -253,16 +253,16 @@  enum
   TAG_CPU_ARCH_V6_M,
   TAG_CPU_ARCH_V6S_M,
   TAG_CPU_ARCH_V7E_M,
-  TAG_CPU_ARCH_V8,
+  TAG_CPU_ARCH_V8A,
   TAG_CPU_ARCH_V8R,
   TAG_CPU_ARCH_V8M_BASE,
   TAG_CPU_ARCH_V8M_MAIN,
-  TAG_CPU_ARCH_8_1A,
-  TAG_CPU_ARCH_8_2A,
-  TAG_CPU_ARCH_8_3A,
+  TAG_CPU_ARCH_V8_1A,
+  TAG_CPU_ARCH_V8_2A,
+  TAG_CPU_ARCH_V8_3A,
   TAG_CPU_ARCH_V8_1M_MAIN,
-  TAG_CPU_ARCH_V9,
-  MAX_TAG_CPU_ARCH = TAG_CPU_ARCH_V9,
+  TAG_CPU_ARCH_V9A,
+  MAX_TAG_CPU_ARCH = TAG_CPU_ARCH_V9A,
   // Pseudo-architecture to allow objects to be compatible with the subset of
   // armv4t and armv6-m.  This value should never be stored in object files.
   TAG_CPU_ARCH_V4T_PLUS_V6_M = (MAX_TAG_CPU_ARCH + 1)
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 392ae8d761d..3ff29542411 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -32100,26 +32100,26 @@  static const cpu_arch_ver_table cpu_arch_ver[] =
     {TAG_CPU_ARCH_V7,	      ARM_ARCH_V7M},
     {TAG_CPU_ARCH_V7,	      ARM_ARCH_V7VE},
     {TAG_CPU_ARCH_V7E_M,      ARM_ARCH_V7EM},
-    {TAG_CPU_ARCH_V8,	      ARM_ARCH_V8A},
-    {TAG_CPU_ARCH_V8,	      ARM_ARCH_V8_1A},
-    {TAG_CPU_ARCH_V8,	      ARM_ARCH_V8_2A},
-    {TAG_CPU_ARCH_V8,	      ARM_ARCH_V8_3A},
+    {TAG_CPU_ARCH_V8A,	      ARM_ARCH_V8A},
+    {TAG_CPU_ARCH_V8A,	      ARM_ARCH_V8_1A},
+    {TAG_CPU_ARCH_V8A,	      ARM_ARCH_V8_2A},
+    {TAG_CPU_ARCH_V8A,	      ARM_ARCH_V8_3A},
     {TAG_CPU_ARCH_V8M_BASE,   ARM_ARCH_V8M_BASE},
     {TAG_CPU_ARCH_V8M_MAIN,   ARM_ARCH_V8M_MAIN},
     {TAG_CPU_ARCH_V8R,	      ARM_ARCH_V8R},
-    {TAG_CPU_ARCH_V8,	      ARM_ARCH_V8_4A},
-    {TAG_CPU_ARCH_V8,	      ARM_ARCH_V8_5A},
+    {TAG_CPU_ARCH_V8A,	      ARM_ARCH_V8_4A},
+    {TAG_CPU_ARCH_V8A,	      ARM_ARCH_V8_5A},
     {TAG_CPU_ARCH_V8_1M_MAIN, ARM_ARCH_V8_1M_MAIN},
-    {TAG_CPU_ARCH_V8,	    ARM_ARCH_V8_6A},
-    {TAG_CPU_ARCH_V8,	    ARM_ARCH_V8_7A},
-    {TAG_CPU_ARCH_V8,	    ARM_ARCH_V8_8A},
-    {TAG_CPU_ARCH_V8,	    ARM_ARCH_V8_9A},
-    {TAG_CPU_ARCH_V9,	    ARM_ARCH_V9A},
-    {TAG_CPU_ARCH_V9,	    ARM_ARCH_V9_1A},
-    {TAG_CPU_ARCH_V9,	    ARM_ARCH_V9_2A},
-    {TAG_CPU_ARCH_V9,	    ARM_ARCH_V9_3A},
-    {TAG_CPU_ARCH_V9,	    ARM_ARCH_V9_4A},
-    {TAG_CPU_ARCH_V9,	    ARM_ARCH_V9_5A},
+    {TAG_CPU_ARCH_V8A,	    ARM_ARCH_V8_6A},
+    {TAG_CPU_ARCH_V8A,	    ARM_ARCH_V8_7A},
+    {TAG_CPU_ARCH_V8A,	    ARM_ARCH_V8_8A},
+    {TAG_CPU_ARCH_V8A,	    ARM_ARCH_V8_9A},
+    {TAG_CPU_ARCH_V9A,	    ARM_ARCH_V9A},
+    {TAG_CPU_ARCH_V9A,	    ARM_ARCH_V9_1A},
+    {TAG_CPU_ARCH_V9A,	    ARM_ARCH_V9_2A},
+    {TAG_CPU_ARCH_V9A,	    ARM_ARCH_V9_3A},
+    {TAG_CPU_ARCH_V9A,	    ARM_ARCH_V9_4A},
+    {TAG_CPU_ARCH_V9A,	    ARM_ARCH_V9_5A},
     {-1,		    ARM_ARCH_NONE}
 };
 
@@ -32207,9 +32207,9 @@  get_aeabi_cpu_arch_from_fset (const arm_feature_set *arch_ext_fset,
   if (ARM_FEATURE_EQUAL (*arch_ext_fset, arm_arch_any))
     {
       /* Force revisiting of decision for each new architecture.  */
-      gas_assert (MAX_TAG_CPU_ARCH <= TAG_CPU_ARCH_V9);
+      gas_assert (MAX_TAG_CPU_ARCH <= TAG_CPU_ARCH_V9A);
       *profile = 'A';
-      return TAG_CPU_ARCH_V9;
+      return TAG_CPU_ARCH_V9A;
     }
 
   ARM_CLEAR_FEATURE (arch_fset, *arch_ext_fset, *ext_fset);
@@ -32485,7 +32485,7 @@  aeabi_set_public_attributes (void)
      by the base architecture.
 
      For new architectures we will have to check these tests.  */
-  gas_assert (arch <= TAG_CPU_ARCH_V9);
+  gas_assert (arch <= TAG_CPU_ARCH_V9A);
   if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v8)
       || ARM_CPU_HAS_FEATURE (flags, arm_ext_v8m))
     aeabi_set_attribute_int (Tag_DIV_use, 0);
diff --git a/include/elf/arm.h b/include/elf/arm.h
index 091eea5d5d8..9dd0e6089fe 100644
--- a/include/elf/arm.h
+++ b/include/elf/arm.h
@@ -108,16 +108,16 @@ 
 #define TAG_CPU_ARCH_V6_M	11
 #define TAG_CPU_ARCH_V6S_M	12
 #define TAG_CPU_ARCH_V7E_M	13
-#define TAG_CPU_ARCH_V8		14
+#define TAG_CPU_ARCH_V8A		14
 #define TAG_CPU_ARCH_V8R	15
 #define TAG_CPU_ARCH_V8M_BASE	16
 #define TAG_CPU_ARCH_V8M_MAIN	17
-#define TAG_CPU_ARCH_8_1A       18
-#define TAG_CPU_ARCH_8_2A       19
-#define TAG_CPU_ARCH_8_3A       20
+#define TAG_CPU_ARCH_V8_1A       18
+#define TAG_CPU_ARCH_V8_2A       19
+#define TAG_CPU_ARCH_V8_3A       20
 #define TAG_CPU_ARCH_V8_1M_MAIN 21
-#define TAG_CPU_ARCH_V9         22
-#define MAX_TAG_CPU_ARCH	TAG_CPU_ARCH_V9
+#define TAG_CPU_ARCH_V9A         22
+#define MAX_TAG_CPU_ARCH	TAG_CPU_ARCH_V9A
 /* Pseudo-architecture to allow objects to be compatible with the subset of
    armv4t and armv6-m.  This value should never be stored in object files.  */
 #define TAG_CPU_ARCH_V4T_PLUS_V6_M (MAX_TAG_CPU_ARCH + 1)