[03/11] aarch64: Fix option parsing to disallow prefixes of valid options

Message ID 7d75b2f2-1dd4-009d-33db-80fc3a776206@e124511.cambridge.arm.com
State Not Applicable
Headers
Series None |

Checks

Context Check Description
snail/binutils-gdb-check fail Git am fail log

Commit Message

Andrew Carlotti Jan. 12, 2024, 1:42 a.m. UTC
  Add "+rdm" as an explicit alias for "+rdma", to maintain existing compatibility
with Clang.
  

Patch

diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 6b11c4e3368c25fa5bc176d5282a5804a2174db9..c2f77a40ef225efc6998855885ae0d0757a86479 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -10274,6 +10274,7 @@  static const struct aarch64_option_cpu_value_table aarch64_features[] = {
   {"lor",		AARCH64_FEATURE (LOR), AARCH64_NO_FEATURES},
   {"ras",		AARCH64_FEATURE (RAS), AARCH64_NO_FEATURES},
   {"rdma",		AARCH64_FEATURE (RDMA), AARCH64_FEATURE (SIMD)},
+  {"rdm",		AARCH64_FEATURE (RDMA), AARCH64_FEATURE (SIMD)},
   {"fp16",		AARCH64_FEATURE (F16), AARCH64_FEATURE (FP)},
   {"fp16fml",		AARCH64_FEATURE (F16_FML), AARCH64_FEATURE (F16)},
   {"profile",		AARCH64_FEATURE (PROFILE), AARCH64_NO_FEATURES},
@@ -10438,7 +10439,8 @@  aarch64_parse_features (const char *str, const aarch64_feature_set **opt_p,
       gas_assert (adding_value != -1);
 
       for (opt = aarch64_features; opt->name != NULL; opt++)
-	if (strncmp (opt->name, str, optlen) == 0)
+	if (optlen == (int) strlen(opt->name)
+	    && strncmp (opt->name, str, optlen) == 0)
 	  {
 	    aarch64_feature_set set;
 
diff --git a/gas/testsuite/gas/aarch64/opt-invalid.d b/gas/testsuite/gas/aarch64/opt-invalid.d
new file mode 100644
index 0000000000000000000000000000000000000000..500c68ad3497792f7b9d336b2c0674ef8844d30a
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/opt-invalid.d
@@ -0,0 +1 @@ 
+#error: .*: Error: unknown architectural extension `s'
diff --git a/gas/testsuite/gas/aarch64/opt-invalid.s b/gas/testsuite/gas/aarch64/opt-invalid.s
new file mode 100644
index 0000000000000000000000000000000000000000..058d4c1c8895f5f7aace9747c8cf2de09b633427
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/opt-invalid.s
@@ -0,0 +1 @@ 
+.arch armv8-a+s
diff --git a/gas/testsuite/gas/aarch64/rdma.d b/gas/testsuite/gas/aarch64/rdma.d
index d634909c21d2b614366667b1095ef64bddfdd583..b506d7d89357e54457018ab8a08445687b906eac 100644
--- a/gas/testsuite/gas/aarch64/rdma.d
+++ b/gas/testsuite/gas/aarch64/rdma.d
@@ -1,5 +1,6 @@ 
 #objdump: -dr
 #as: -march=armv8-a+rdma
+#as: -march=armv8-a+rdm
 
 .*:     file format .*