[PATCH] gas, bfd: Rename Arm v8/v9 architecture tags

Sivan Shani sivan.shani@arm.com
Tue May 26 15:31:55 GMT 2026


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(-)

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)
-- 
2.43.0



More information about the Binutils mailing list