Rename the Arm AEABI CPU architecture tag constants and macro definitions 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, GAS and Gold usage accordingly, including attribute combination
tables, architecture checks, and mach selection.
.#define bfd_mach_arm_6M 20
.#define bfd_mach_arm_6SM 21
.#define bfd_mach_arm_7EM 22
-.#define bfd_mach_arm_8 23
+.#define bfd_mach_arm_8A 23
.#define bfd_mach_arm_8R 24
.#define bfd_mach_arm_8M_BASE 25
.#define bfd_mach_arm_8M_MAIN 26
.#define bfd_mach_arm_8_1M_MAIN 27
-.#define bfd_mach_arm_9 28
+.#define bfd_mach_arm_9A 28
. bfd_arch_nds32, {* Andes NDS32. *}
.#define bfd_mach_n1 1
.#define bfd_mach_n1h 2
#define bfd_mach_arm_6M 20
#define bfd_mach_arm_6SM 21
#define bfd_mach_arm_7EM 22
-#define bfd_mach_arm_8 23
+#define bfd_mach_arm_8A 23
#define bfd_mach_arm_8R 24
#define bfd_mach_arm_8M_BASE 25
#define bfd_mach_arm_8M_MAIN 26
#define bfd_mach_arm_8_1M_MAIN 27
-#define bfd_mach_arm_9 28
+#define bfd_mach_arm_9A 28
bfd_arch_nds32, /* Andes NDS32. */
#define bfd_mach_n1 1
#define bfd_mach_n1h 2
{ bfd_mach_arm_7, "cortex-a12" },
{ bfd_mach_arm_7, "cortex-a15" },
{ bfd_mach_arm_7, "cortex-a17" },
- { bfd_mach_arm_8, "cortex-a32" },
- { bfd_mach_arm_8, "cortex-a35" },
- { bfd_mach_arm_8, "cortex-a53" },
- { bfd_mach_arm_8, "cortex-a55" },
- { bfd_mach_arm_8, "cortex-a57" },
- { bfd_mach_arm_8, "cortex-a72" },
- { bfd_mach_arm_8, "cortex-a73" },
- { bfd_mach_arm_8, "cortex-a75" },
- { bfd_mach_arm_8, "cortex-a76" },
- { bfd_mach_arm_8, "cortex-a76ae" },
- { bfd_mach_arm_8, "cortex-a77" },
- { bfd_mach_arm_8, "cortex-a78" },
- { bfd_mach_arm_8, "cortex-a78ae" },
- { bfd_mach_arm_8, "cortex-a78c" },
+ { bfd_mach_arm_8A, "cortex-a32" },
+ { bfd_mach_arm_8A, "cortex-a35" },
+ { bfd_mach_arm_8A, "cortex-a53" },
+ { bfd_mach_arm_8A, "cortex-a55" },
+ { bfd_mach_arm_8A, "cortex-a57" },
+ { bfd_mach_arm_8A, "cortex-a72" },
+ { bfd_mach_arm_8A, "cortex-a73" },
+ { bfd_mach_arm_8A, "cortex-a75" },
+ { bfd_mach_arm_8A, "cortex-a76" },
+ { bfd_mach_arm_8A, "cortex-a76ae" },
+ { bfd_mach_arm_8A, "cortex-a77" },
+ { bfd_mach_arm_8A, "cortex-a78" },
+ { bfd_mach_arm_8A, "cortex-a78ae" },
+ { bfd_mach_arm_8A, "cortex-a78c" },
{ bfd_mach_arm_6SM, "cortex-m0" },
{ bfd_mach_arm_6SM, "cortex-m0plus" },
{ bfd_mach_arm_6SM, "cortex-m1" },
{ bfd_mach_arm_7, "cortex-r4f" },
{ bfd_mach_arm_7, "cortex-r5" },
{ bfd_mach_arm_8R, "cortex-r52" },
- { bfd_mach_arm_8R, "cortex-r52plus" },
+ { bfd_mach_arm_8R, "cortex-r52plus" },
{ bfd_mach_arm_7, "cortex-r7" },
{ bfd_mach_arm_7, "cortex-r8" },
- { bfd_mach_arm_8, "cortex-x1" },
- { bfd_mach_arm_8, "cortex-x1c" },
+ { bfd_mach_arm_8A, "cortex-x1" },
+ { bfd_mach_arm_8A, "cortex-x1c" },
{ bfd_mach_arm_4T, "ep9312" },
- { bfd_mach_arm_8, "exynos-m1" },
+ { bfd_mach_arm_8A, "exynos-m1" },
{ bfd_mach_arm_4, "fa526" },
{ bfd_mach_arm_5TE, "fa606te" },
{ bfd_mach_arm_5TE, "fa616te" },
{ bfd_mach_arm_4, "strongarm1100" },
{ bfd_mach_arm_4, "strongarm1110" },
{ bfd_mach_arm_XScale, "xscale" },
- { bfd_mach_arm_8, "xgene1" },
- { bfd_mach_arm_8, "xgene2" },
- { bfd_mach_arm_9, "cortex-a710" },
+ { bfd_mach_arm_8A, "xgene1" },
+ { bfd_mach_arm_8A, "xgene2" },
+ { bfd_mach_arm_9A, "cortex-a710" },
{ bfd_mach_arm_iWMMXt, "iwmmxt" },
{ bfd_mach_arm_iWMMXt2, "iwmmxt2" },
{ bfd_mach_arm_unknown, "arm_any" }
N (bfd_mach_arm_6M, "armv6-m", false, & arch_info_struct[19]),
N (bfd_mach_arm_6SM, "armv6s-m", false, & arch_info_struct[20]),
N (bfd_mach_arm_7EM, "armv7e-m", false, & arch_info_struct[21]),
- N (bfd_mach_arm_8, "armv8-a", false, & arch_info_struct[22]),
+ N (bfd_mach_arm_8A, "armv8-a", false, & arch_info_struct[22]),
N (bfd_mach_arm_8R, "armv8-r", false, & arch_info_struct[23]),
N (bfd_mach_arm_8M_BASE, "armv8-m.base", false, & arch_info_struct[24]),
N (bfd_mach_arm_8M_MAIN, "armv8-m.main", false, & arch_info_struct[25]),
N (bfd_mach_arm_8_1M_MAIN, "armv8.1-m.main", false, & arch_info_struct[26]),
- N (bfd_mach_arm_9, "armv9-a", false, & arch_info_struct[27]),
+ N (bfd_mach_arm_9A, "armv9-a", false, & arch_info_struct[27]),
N (bfd_mach_arm_unknown, "arm_any", false, NULL)
};
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);
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
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
return bfd_mach_arm_6SM;
case TAG_CPU_ARCH_V7E_M:
return bfd_mach_arm_7EM;
- case TAG_CPU_ARCH_V8:
- return bfd_mach_arm_8;
+ case TAG_CPU_ARCH_V8A:
+ return bfd_mach_arm_8A;
case TAG_CPU_ARCH_V8R:
return bfd_mach_arm_8R;
case TAG_CPU_ARCH_V8M_BASE:
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:
- return bfd_mach_arm_9;
+ case TAG_CPU_ARCH_V9A:
+ return bfd_mach_arm_9A;
default:
/* Force entry to be added for any new known Tag_CPU_arch value. */
};
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[] =
{
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[] =
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. */
};
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. */
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. */
};
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[] =
{
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. */
-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[] =
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)
{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}
};
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);
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);
};
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(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) // V8.
};
static const int v4t_plus_v6_m[] =
{
T(V6_M), // V6_M.
T(V6S_M), // V6S_M.
T(V7E_M), // V7E_M.
- T(V8), // V8.
+ T(V8A), // V8.
T(V4T_PLUS_V6_M) // V4T plus V6_M.
};
static const int* comb[] =
#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)
case bfd_mach_arm_6M: ARM_SET_FEATURES (ARM_ARCH_V6M); break;
case bfd_mach_arm_6SM: ARM_SET_FEATURES (ARM_ARCH_V6SM); break;
case bfd_mach_arm_7EM: ARM_SET_FEATURES (ARM_ARCH_V7EM); break;
- case bfd_mach_arm_8:
+ case bfd_mach_arm_8A:
{
/* Add bits for extensions that Armv8.6-A recognizes. */
arm_feature_set armv8_6_ext_fset
ARM_MERGE_FEATURE_SETS (arch_fset, arch_fset, mve_all);
force_thumb = 1;
break;
- case bfd_mach_arm_9: ARM_SET_FEATURES (ARM_ARCH_V9A); break;
+ case bfd_mach_arm_9A: ARM_SET_FEATURES (ARM_ARCH_V9A); break;
/* If the machine type is unknown allow all architecture types and all
extensions, with the exception of MVE as that clashes with NEON. */
case bfd_mach_arm_unknown: