aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorChristophe Lyon <christophe.lyon@foss.st.com>2021-07-15 12:57:18 +0000
committerChristophe Lyon <christophe.lyon@foss.st.com>2021-08-23 09:05:43 +0000
commit63f68535550f77998ad907ba3d3be05a4324fbe8 (patch)
treebb089e61af7f1135490395142dc2eb112fca69a3 /gcc
parent3bc75533d1f87f0617be6c1af98804f9127ec637 (diff)
downloadgcc-63f68535550f77998ad907ba3d3be05a4324fbe8.zip
gcc-63f68535550f77998ad907ba3d3be05a4324fbe8.tar.gz
gcc-63f68535550f77998ad907ba3d3be05a4324fbe8.tar.bz2
arm: Fix multilib mapping for CDE extensions [PR100856]
This is a followup to Srinath's recent patch: the newly added test is failing e.g. on arm-linux-gnueabihf without R/M profile multilibs. It is also failing on arm-eabi with R/M profile multilibs if the execution engine does not support v8.1-M instructions. The patch avoids this by adding check_effective_target_FUNC_multilib in target-supports.exp which effectively checks whether the target supports linking and execution, like what is already done for other ARM effective targets. pr100856.c is updated to use it instead of arm_v8_1m_main_cde_mve_ok (which makes the testcase a bit of a duplicate with check_effective_target_FUNC_multilib). In addition, I noticed that requiring MVE does not seem necessary and this enables the test to pass even when targeting a CPU without MVE: since the test does not involve actual CDE instructions, it can pass on other architecture versions. For instance, when requiring MVE, we have to use cortex-m55 under QEMU for the test to pass because the memset() that comes from v8.1-m.main+mve multilib uses LOB instructions (DLS) (memset is used during startup). Keeping arm_v8_1m_main_cde_mve_ok would mean we would enable the test provided we have the right multilibs, causing a runtime error if the simulator does not support LOB instructions (e.g. when targeting cortex-m7). I do not update sourcebuild.texi since the CDE effective targets are already collectively documented. Finally, the patch fixes two typos in comments. 2021-07-15 Christophe Lyon <christophe.lyon@foss.st.com> PR target/100856 gcc/ * config/arm/arm.opt: Fix typo. * config/arm/t-rmprofile: Fix typo. gcc/testsuite/ * gcc.target/arm/acle/pr100856.c: Use arm_v8m_main_cde_multilib and arm_v8m_main_cde. * lib/target-supports.exp: Add check_effective_target_FUNC_multilib for ARM CDE.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/arm/arm.opt2
-rw-r--r--gcc/config/arm/t-rmprofile2
-rw-r--r--gcc/testsuite/gcc.target/arm/acle/pr100856.c4
-rw-r--r--gcc/testsuite/lib/target-supports.exp18
4 files changed, 22 insertions, 4 deletions
diff --git a/gcc/config/arm/arm.opt b/gcc/config/arm/arm.opt
index af478a9..7417b55 100644
--- a/gcc/config/arm/arm.opt
+++ b/gcc/config/arm/arm.opt
@@ -82,7 +82,7 @@ EnumValue
Enum(arm_arch) String(native) Value(-1) DriverOnly
; Set to the name of target architecture which is required for
-; multilib linking. This option is undocumented becuase it
+; multilib linking. This option is undocumented because it
; should not be used by the users.
mlibarch=
Target RejectNegative JoinedOrMissing NoDWARFRecord DriverOnly Undocumented
diff --git a/gcc/config/arm/t-rmprofile b/gcc/config/arm/t-rmprofile
index 3e75fcc..a6036bf 100644
--- a/gcc/config/arm/t-rmprofile
+++ b/gcc/config/arm/t-rmprofile
@@ -54,7 +54,7 @@ MULTILIB_REQUIRED += mthumb/march=armv8.1-m.main+mve/mfloat-abi=hard
MULTILIB_MATCHES += march?armv6s-m=march?armv6-m
# For all MULITIB_MATCHES for v8-m and above add mlibarch? on the right hand side
-# of = in the variant string instead of march?. This is needed becuase all the
+# of = in the variant string instead of march?. This is needed because all the
# MULITIB_MATCHES variant strings are compared with mlibarch option for multilib
# linking.
diff --git a/gcc/testsuite/gcc.target/arm/acle/pr100856.c b/gcc/testsuite/gcc.target/arm/acle/pr100856.c
index 5bc030e..adbe1ab 100644
--- a/gcc/testsuite/gcc.target/arm/acle/pr100856.c
+++ b/gcc/testsuite/gcc.target/arm/acle/pr100856.c
@@ -1,6 +1,6 @@
/* { dg-do run } */
-/* { dg-require-effective-target arm_v8_1m_main_cde_mve_ok } */
-/* { dg-add-options arm_v8_1m_main_cde_mve } */
+/* { dg-require-effective-target arm_v8m_main_cde_multilib } */
+/* { dg-add-options arm_v8m_main_cde } */
#include "arm_cde.h"
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 44465b1..66ce48d 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -5518,6 +5518,24 @@ foreach { armfunc armflag armdef arminc } {
global et_FUNC_flags
return "$flags $et_FUNC_flags"
}
+
+ proc check_effective_target_FUNC_multilib { } {
+ if { ! [check_effective_target_FUNC_ok] } {
+ return 0;
+ }
+ return [check_runtime FUNC_multilib {
+ #if !(DEF)
+ #error "DEF failed"
+ #endif
+ #include <arm_cde.h>
+ INC
+ int
+ main (void)
+ {
+ return 0;
+ }
+ } [add_options_for_FUNC ""]]
+ }
}]
}