Hi,

We have decided to backport this patch fixing testing for ARMv8-M Baseline to our embedded-6-branch.



*** gcc/testsuite/ChangeLog ***

2016-07-15  Thomas Preud'homme  <thomas.preudho...@arm.com>

        * lib/target-supports.exp (add_options_for_arm_arch_v6m): Add
        -mfloat-abi=soft option.
        (add_options_for_arm_arch_v8m_base): Likewise.


Best regards,

Thomas
--- Begin Message ---
On 22/09/16 16:47, Richard Earnshaw (lists) wrote:
On 22/09/16 15:51, Thomas Preudhomme wrote:
Sorry, noticed an error in the patch. It was not caught during testing
because GCC was built with --with-mode=thumb. Correct patch attached.

Best regards,

Thomas

On 22/09/16 14:49, Thomas Preudhomme wrote:
Hi,

ARMv6-M and ARMv8-M Baseline only support soft float ABI. Therefore, the
arm_arch_v8m_base add option should pass -mfloat-abi=soft, much like
-mthumb is
passed for architectures that only support Thumb instruction set. This
patch
adds -mfloat-abi=soft to both arm_arch_v6m and arm_arch_v8m_base add
options.
Patch is in attachment.

ChangeLog entry is as follows:

*** gcc/testsuite/ChangeLog ***

2016-07-15  Thomas Preud'homme  <thomas.preudho...@arm.com>

        * lib/target-supports.exp (add_options_for_arm_arch_v6m): Add
        -mfloat-abi=soft option.
        (add_options_for_arm_arch_v8m_base): Likewise.


Is this ok for trunk?

Best regards,

Thomas

6_softfloat_testing_v6m_v8m_baseline.patch


diff --git a/gcc/testsuite/lib/target-supports.exp 
b/gcc/testsuite/lib/target-supports.exp
index 
0dabea0850124947a7fe333e0b94c4077434f278..b5d72f1283be6a6e4736a1d20936e169c1384398
 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -3540,24 +3540,25 @@ proc check_effective_target_arm_fp16_hw { } {
 # Usage: /* { dg-require-effective-target arm_arch_v5_ok } */
 #        /* { dg-add-options arm_arch_v5 } */
 #       /* { dg-require-effective-target arm_arch_v5_multilib } */
-foreach { armfunc armflag armdef } { v4 "-march=armv4 -marm" __ARM_ARCH_4__
-                                    v4t "-march=armv4t" __ARM_ARCH_4T__
-                                    v5 "-march=armv5 -marm" __ARM_ARCH_5__
-                                    v5t "-march=armv5t" __ARM_ARCH_5T__
-                                    v5te "-march=armv5te" __ARM_ARCH_5TE__
-                                    v6 "-march=armv6" __ARM_ARCH_6__
-                                    v6k "-march=armv6k" __ARM_ARCH_6K__
-                                    v6t2 "-march=armv6t2" __ARM_ARCH_6T2__
-                                    v6z "-march=armv6z" __ARM_ARCH_6Z__
-                                    v6m "-march=armv6-m -mthumb" 
__ARM_ARCH_6M__
-                                    v7a "-march=armv7-a" __ARM_ARCH_7A__
-                                    v7r "-march=armv7-r" __ARM_ARCH_7R__
-                                    v7m "-march=armv7-m -mthumb" 
__ARM_ARCH_7M__
-                                    v7em "-march=armv7e-m -mthumb" 
__ARM_ARCH_7EM__
-                                    v8a "-march=armv8-a" __ARM_ARCH_8A__
-                                    v8_1a "-march=armv8.1a" __ARM_ARCH_8A__
-                                    v8m_base "-march=armv8-m.base -mthumb" 
__ARM_ARCH_8M_BASE__
-                                    v8m_main "-march=armv8-m.main -mthumb" 
__ARM_ARCH_8M_MAIN__ } {
+foreach { armfunc armflag armdef } {
+       v4 "-march=armv4 -marm" __ARM_ARCH_4__
+       v4t "-march=armv4t" __ARM_ARCH_4T__
+       v5 "-march=armv5 -marm" __ARM_ARCH_5__
+       v5t "-march=armv5t" __ARM_ARCH_5T__
+       v5te "-march=armv5te" __ARM_ARCH_5TE__
+       v6 "-march=armv6" __ARM_ARCH_6__
+       v6k "-march=armv6k" __ARM_ARCH_6K__
+       v6t2 "-march=armv6t2" __ARM_ARCH_6T2__
+       v6z "-march=armv6z" __ARM_ARCH_6Z__
+       v6m "-march=armv6-m -mthumb -mfloat-abi=soft" __ARM_ARCH_6M__
+       v7a "-march=armv7-a" __ARM_ARCH_7A__
+       v7r "-march=armv7-r" __ARM_ARCH_7R__
+       v7m "-march=armv7-m -mthumb" __ARM_ARCH_7M__
+       v7em "-march=armv7e-m -mthumb" __ARM_ARCH_7EM__
+       v8a "-march=armv8-a" __ARM_ARCH_8A__
+       v8_1a "-march=armv8.1a" __ARM_ARCH_8A__
+       v8m_base "-march=armv8-m.base -mthumb -mfloat-abi=soft" 
__ARM_ARCH_8M_BASE__
+       v8m_main "-march=armv8-m.main -mthumb" __ARM_ARCH_8M_MAIN__ } {
     eval [string map [list FUNC $armfunc FLAG $armflag DEF $armdef ] {
        proc check_effective_target_arm_arch_FUNC_ok { } {
            if { [ string match "*-marm*" "FLAG" ] &&


I think if you're going to do this you need to also check that changing
the ABI in this way isn't incompatible with other aspects of how the
user has invoked dejagnu.

The reason this patch was made is that without it dg-require-effective-target arm_arch_v8m_base_ok evaluates to true for an arm-none-linux-gnueabihf toolchain but then any testcase containing a function for such a target (such as the atomic-op-* in gcc.target/arm) will error out because ARMv8-M Baseline does not support hard float ABI.

I see 2 ways to fix this:

1) the approach taken in this patch, ie saying that to select ARMv8-M baseline architecture you need the right -march, -mthumb but also the right float ABI.

Note that the comment at the top of that procedure says:
# Creates a series of routines that return 1 if the given architecture
# can be selected and a routine to give the flags to select that architecture

2) Add a function to the assembly that is used to test support for the 
architecture.

The reason I favor the first one is that it enables more test while the second test would just skip ARMv6-M and ARMv8-M Baseline tests for arm-none-linux-gnueabihf toolchains.

Is this patch ok for trunk?

Best regards,

Thomas
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index b5a9faab5a47d01371c6402a5b07d34071dbc34b..ce2fc0af116a4ffbec272642dff21ed5797a3028 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -3679,25 +3679,26 @@ proc check_effective_target_arm_fp16_hw { } {
 # Usage: /* { dg-require-effective-target arm_arch_v5_ok } */
 #        /* { dg-add-options arm_arch_v5 } */
 #	 /* { dg-require-effective-target arm_arch_v5_multilib } */
-foreach { armfunc armflag armdef } { v4 "-march=armv4 -marm" __ARM_ARCH_4__
-				     v4t "-march=armv4t" __ARM_ARCH_4T__
-				     v5 "-march=armv5 -marm" __ARM_ARCH_5__
-				     v5t "-march=armv5t" __ARM_ARCH_5T__
-				     v5te "-march=armv5te" __ARM_ARCH_5TE__
-				     v6 "-march=armv6" __ARM_ARCH_6__
-				     v6k "-march=armv6k" __ARM_ARCH_6K__
-				     v6t2 "-march=armv6t2" __ARM_ARCH_6T2__
-				     v6z "-march=armv6z" __ARM_ARCH_6Z__
-				     v6m "-march=armv6-m -mthumb" __ARM_ARCH_6M__
-				     v7a "-march=armv7-a" __ARM_ARCH_7A__
-				     v7r "-march=armv7-r" __ARM_ARCH_7R__
-				     v7m "-march=armv7-m -mthumb" __ARM_ARCH_7M__
-				     v7em "-march=armv7e-m -mthumb" __ARM_ARCH_7EM__
-				     v8a "-march=armv8-a" __ARM_ARCH_8A__
-				     v8_1a "-march=armv8.1a" __ARM_ARCH_8A__
-				     v8_2a "-march=armv8.2a" __ARM_ARCH_8A__
-				     v8m_base "-march=armv8-m.base -mthumb" __ARM_ARCH_8M_BASE__
-				     v8m_main "-march=armv8-m.main -mthumb" __ARM_ARCH_8M_MAIN__ } {
+foreach { armfunc armflag armdef } {
+	v4 "-march=armv4 -marm" __ARM_ARCH_4__
+	v4t "-march=armv4t" __ARM_ARCH_4T__
+	v5 "-march=armv5 -marm" __ARM_ARCH_5__
+	v5t "-march=armv5t" __ARM_ARCH_5T__
+	v5te "-march=armv5te" __ARM_ARCH_5TE__
+	v6 "-march=armv6" __ARM_ARCH_6__
+	v6k "-march=armv6k" __ARM_ARCH_6K__
+	v6t2 "-march=armv6t2" __ARM_ARCH_6T2__
+	v6z "-march=armv6z" __ARM_ARCH_6Z__
+	v6m "-march=armv6-m -mthumb -mfloat-abi=soft" __ARM_ARCH_6M__
+	v7a "-march=armv7-a" __ARM_ARCH_7A__
+	v7r "-march=armv7-r" __ARM_ARCH_7R__
+	v7m "-march=armv7-m -mthumb" __ARM_ARCH_7M__
+	v7em "-march=armv7e-m -mthumb" __ARM_ARCH_7EM__
+	v8a "-march=armv8-a" __ARM_ARCH_8A__
+	v8_1a "-march=armv8.1a" __ARM_ARCH_8A__
+	v8_2a "-march=armv8.2a" __ARM_ARCH_8A__
+	v8m_base "-march=armv8-m.base -mthumb -mfloat-abi=soft" __ARM_ARCH_8M_BASE__
+	v8m_main "-march=armv8-m.main -mthumb" __ARM_ARCH_8M_MAIN__ } {
     eval [string map [list FUNC $armfunc FLAG $armflag DEF $armdef ] {
 	proc check_effective_target_arm_arch_FUNC_ok { } {
 	    if { [ string match "*-marm*" "FLAG" ] &&

--- End Message ---

Reply via email to