ld: Pass -fno-lto to non LTO tests
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 22 Oct 2020 13:04:21 +0000 (06:04 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 22 Oct 2020 13:04:36 +0000 (06:04 -0700)
* testsuite/config/default.exp (NOLTO_CFLAGS): New.
* ld/testsuite/ld-elfcomm/elfcomm.exp: Add $NOLTO_CFLAGS to CC.
* testsuite/ld-elfvers/vers.exp: Likewise.
* testsuite/ld-elfvsb/elfvsb.exp: Likewise.
* testsuite/ld-gc/gc.exp: Likewise.
* testsuite/ld-plugin/plugin.exp: Likewise.
* testsuite/ld-scripts/crossref.exp: Likewise.
* testsuite/ld-selective/selective.exp: Likewise.
* testsuite/ld-undefined/undefined.exp: Likewise.
* testsuite/ld-srec/srec.exp: Add $NOLTO_CFLAGS to CC.  Override
CXXFLAGS.
* testsuite/lib/ld-lib.exp (run_ld_link_tests): Prepend -fno-lto
to cflags.

12 files changed:
ld/ChangeLog
ld/testsuite/config/default.exp
ld/testsuite/ld-elfcomm/elfcomm.exp
ld/testsuite/ld-elfvers/vers.exp
ld/testsuite/ld-elfvsb/elfvsb.exp
ld/testsuite/ld-gc/gc.exp
ld/testsuite/ld-plugin/plugin.exp
ld/testsuite/ld-scripts/crossref.exp
ld/testsuite/ld-selective/selective.exp
ld/testsuite/ld-srec/srec.exp
ld/testsuite/ld-undefined/undefined.exp
ld/testsuite/lib/ld-lib.exp

index 8d5fb456e43bd444cf060bf0e5b9afa9ad7de5d9..2e6cfd4a8b2f68585815f52ed68336fc70b25079 100644 (file)
@@ -1,3 +1,19 @@
+2020-10-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * testsuite/config/default.exp (NOLTO_CFLAGS): New.
+       * ld/testsuite/ld-elfcomm/elfcomm.exp: Add $NOLTO_CFLAGS to CC.
+       * testsuite/ld-elfvers/vers.exp: Likewise.
+       * testsuite/ld-elfvsb/elfvsb.exp: Likewise.
+       * testsuite/ld-gc/gc.exp: Likewise.
+       * testsuite/ld-plugin/plugin.exp: Likewise.
+       * testsuite/ld-scripts/crossref.exp: Likewise.
+       * testsuite/ld-selective/selective.exp: Likewise.
+       * testsuite/ld-undefined/undefined.exp: Likewise.
+       * testsuite/ld-srec/srec.exp: Add $NOLTO_CFLAGS to CC.  Override
+       CXXFLAGS.
+       * testsuite/lib/ld-lib.exp (run_ld_link_tests): Prepend -fno-lto
+       to cflags.
+
 2020-10-19  Alan Modra  <amodra@gmail.com>
 
        * testsuite/config/default.exp: Provide dummy libraries for
index dfb633406dcd055757bb08665a7aef136c529f8a..e5730ff565476770e32dfdd3728d4098806e529a 100644 (file)
@@ -398,6 +398,13 @@ if { ![info exists NOSANITIZE_CFLAGS] } then {
     }
 }
 
+if { ![info exists NOLTO_CFLAGS] } then {
+    set NOLTO_CFLAGS ""
+    if [compiler_supports "-fno-lto"] {
+       set NOLTO_CFLAGS "-fno-lto"
+    }
+}
+
 # Provide dummy libraries that alpha-vms-ld always loads
 if { [istarget alpha*-*-*vms*] } {
     set src tmpdir/empty.s
index c4836d9c46d1a31fdc67be7cac412f3cea0db654..856a6db5c622696b633b56a1c23bae70dfef9615 100644 (file)
@@ -169,9 +169,9 @@ if [istarget nios2*-*-*] {
 
 # Explicitly use "-fcommon" so that even if $CFLAGS includes
 # "-fno-common", these tests are compiled as expected.
-if {   ![ld_compile "$CC $CFLAGS -fcommon $NOSANITIZE_CFLAGS" $srcdir/$subdir/common1a.c tmpdir/common1a.o]
-    || ![ld_compile "$CC $CFLAGS -fcommon $NOSANITIZE_CFLAGS" $srcdir/$subdir/common1b.c tmpdir/common1b.o]
-    || ![ld_compile "$CC $CFLAGS $NOSANITIZE_CFLAGS -Wa,--elf-stt-common=yes -fcommon" $srcdir/$subdir/common1b.c tmpdir/common1c.o] } {
+if {   ![ld_compile "$CC $CFLAGS -fcommon $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" $srcdir/$subdir/common1a.c tmpdir/common1a.o]
+    || ![ld_compile "$CC $CFLAGS -fcommon $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" $srcdir/$subdir/common1b.c tmpdir/common1b.o]
+    || ![ld_compile "$CC $CFLAGS $NOSANITIZE_CFLAGS $NOLTO_CFLAGS -Wa,--elf-stt-common=yes -fcommon" $srcdir/$subdir/common1b.c tmpdir/common1c.o] } {
     unresolved $test1
     unresolved $test1
     return
index 91ff8f1448e5b7bd7e971f87fe3ddf67300823f0..817e8be6d4d73a9a4c677656bdd570fa8f59d1c1 100644 (file)
@@ -490,8 +490,9 @@ proc build_binary { shared pic test source libname other mapfile verexp versymex
     global CFLAGS
     global script
     global NOSANITIZE_CFLAGS
+    global NOLTO_CFLAGS
 
-    if ![ld_compile "$CC -S $pic $CFLAGS $NOSANITIZE_CFLAGS" $srcdir/$subdir/$source $tmpdir/$libname.s]     {
+    if ![ld_compile "$CC -S $pic $CFLAGS $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" $srcdir/$subdir/$source $tmpdir/$libname.s]     {
        unresolved "$test"
        return
     }
@@ -619,8 +620,9 @@ proc test_asfail { test flag source execname whyfail } {
     global as
     global CC
     global CFLAGS
+    global NOLTO_CFLAGS
 
-    if ![ld_compile "$CC -S $flag $CFLAGS" $srcdir/$subdir/$source $tmpdir/$execname.s]     {
+    if ![ld_compile "$CC -S $flag $CFLAGS $NOLTO_CFLAGS" $srcdir/$subdir/$source $tmpdir/$execname.s]     {
        unresolved "$test"
        return
     }
@@ -689,6 +691,7 @@ proc build_exec { test source execname flags solibname verexp versymexp symexp }
     global CC
     global CFLAGS
     global NOSANITIZE_CFLAGS
+    global NOLTO_CFLAGS
 
     set shared "--shared --no-undefined-version"
     set script --version-script
@@ -699,8 +702,8 @@ proc build_exec { test source execname flags solibname verexp versymexp symexp }
        append cc_cmd " -fno-lto"
     }
 
-    # Disable all sanitizers.
-    append cc_cmd " $NOSANITIZE_CFLAGS"
+    # Disable all sanitizers and LTO.
+    append cc_cmd " $NOSANITIZE_CFLAGS $NOLTO_CFLAGS"
 
     if ![ld_compile $cc_cmd $srcdir/$subdir/$source $tmpdir/$execname.s]     {
        unresolved "$test"
index 05052cc3ba4fddc353c98c1c7fe64b3c7e8cc654..a729df3f01a218a06edb27918f4915aa124715e3 100644 (file)
@@ -198,6 +198,7 @@ proc visibility_run {visibility} {
     global NOPIE_CFLAGS
     global COMPRESS_LDFLAG
     global NOSANITIZE_CFLAGS
+    global NOLTO_CFLAGS
 
     if [ string match $visibility "hidden" ] {
        set VSBCFLAG "-DHIDDEN_TEST"
@@ -236,7 +237,7 @@ proc visibility_run {visibility} {
     } else {
     # Compile the main program.  Make sure that PLT is used since PLT
     # is expected.
-    if ![ld_compile "$CC -g $PLT_CFLAGS $CFLAGS $SHCFLAG $VSBCFLAG $NOSANITIZE_CFLAGS" $srcdir/$subdir/main.c $tmpdir/mainnp.o] {
+    if ![ld_compile "$CC -g $PLT_CFLAGS $CFLAGS $SHCFLAG $VSBCFLAG $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" $srcdir/$subdir/main.c $tmpdir/mainnp.o] {
        unresolved "visibility ($visibility) (non PIC)"
        unresolved "visibility ($visibility)"
     } else {
@@ -246,8 +247,8 @@ proc visibility_run {visibility} {
        # will need to do more relocation work.  However, note that not
        # using -fpic will cause some of the tests to return different
        # results.  Make sure that PLT is used since PLT is expected.
-       if { ![ld_compile "$CC -g $NOPIE_CFLAGS $PLT_CFLAGS $CFLAGS $SHCFLAG $VSBCFLAG $NOSANITIZE_CFLAGS" $srcdir/$subdir/sh1.c $tmpdir/sh1np.o]
-            || ![ld_compile "$CC -g $NOPIE_CFLAGS $PLT_CFLAGS $CFLAGS $SHCFLAG $VSBCFLAG $NOSANITIZE_CFLAGS" $srcdir/$subdir/sh2.c $tmpdir/sh2np.o] } {
+       if { ![ld_compile "$CC -g $NOPIE_CFLAGS $PLT_CFLAGS $CFLAGS $SHCFLAG $VSBCFLAG $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" $srcdir/$subdir/sh1.c $tmpdir/sh1np.o]
+            || ![ld_compile "$CC -g $NOPIE_CFLAGS $PLT_CFLAGS $CFLAGS $SHCFLAG $VSBCFLAG $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" $srcdir/$subdir/sh2.c $tmpdir/sh2np.o] } {
            unresolved "visibility ($visibility) (non PIC)"
        } else {
            # SunOS non PIC shared libraries don't permit some cases of
@@ -335,8 +336,8 @@ proc visibility_run {visibility} {
 
        # Now compile the code using -fpic.
 
-       if { ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG $NOSANITIZE_CFLAGS -DSHARED $picflag" $srcdir/$subdir/sh1.c $tmpdir/sh1p.o]
-           || ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG $NOSANITIZE_CFLAGS -DSHARED $picflag" $srcdir/$subdir/sh2.c $tmpdir/sh2p.o] } {
+       if { ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG $NOSANITIZE_CFLAGS $NOLTO_CFLAGS -DSHARED $picflag" $srcdir/$subdir/sh1.c $tmpdir/sh1p.o]
+           || ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG $NOSANITIZE_CFLAGS $NOLTO_CFLAGS -DSHARED $picflag" $srcdir/$subdir/sh2.c $tmpdir/sh2p.o] } {
            unresolved "visibility ($visibility)"
        } else {
            if { [ string match $visibility "protected" ]
@@ -353,7 +354,7 @@ proc visibility_run {visibility} {
        # Don't bother.
     } else {
     # Now do the same tests again, but this time compile main.c PIC.
-    if ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG $NOSANITIZE_CFLAGS -DSHARED $picflag" $srcdir/$subdir/main.c $tmpdir/mainp.o] {
+    if ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG $NOSANITIZE_CFLAGS $NOLTO_CFLAGS -DSHARED $picflag" $srcdir/$subdir/main.c $tmpdir/mainp.o] {
        unresolved "visibility ($visibility) (PIC main, non PIC so)"
        unresolved "visibility ($visibility) (PIC main)"
     } else {
@@ -445,7 +446,7 @@ visibility_run protected_undef_def
 visibility_run protected_weak
 visibility_run normal
 
-if { ![ld_compile "$CC -g $CFLAGS $NOSANITIZE_CFLAGS" $srcdir/$subdir/common.c tmpdir/common.o] } {
+if { ![ld_compile "$CC -g $CFLAGS $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" $srcdir/$subdir/common.c tmpdir/common.o] } {
     unresolved "common hidden symbol"
 } else {
     if ![ld_link $ld tmpdir/common "tmpdir/common.o"] {
@@ -455,10 +456,10 @@ if { ![ld_compile "$CC -g $CFLAGS $NOSANITIZE_CFLAGS" $srcdir/$subdir/common.c t
     }
 }
 
-if { ![ld_compile "$CC -g $CFLAGS $NOSANITIZE_CFLAGS" $srcdir/$subdir/test.c tmpdir/test.o] } {
+if { ![ld_compile "$CC -g $CFLAGS $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" $srcdir/$subdir/test.c tmpdir/test.o] } {
     unresolved "weak hidden symbol"
 } else {
-   if { ![ld_compile "$CC -g $CFLAGS $NOSANITIZE_CFLAGS -DSHARED $picflag" $srcdir/$subdir/sh3.c tmpdir/sh3.o] } {
+   if { ![ld_compile "$CC -g $CFLAGS $NOSANITIZE_CFLAGS $NOLTO_CFLAGS -DSHARED $picflag" $srcdir/$subdir/sh3.c tmpdir/sh3.o] } {
        unresolved "weak hidden symbol"
     } else {
        if ![ld_link $ld tmpdir/sh3.so "-shared tmpdir/sh3.o"] {
index 02da44f27a0ccb6e39fe660c8a63c40b78e7d41c..aa0152373676b3c4cd353149c9ca194bb9c1372d 100644 (file)
@@ -23,7 +23,7 @@ if ![check_gc_sections_available] {
     return
 }
 
-set cflags "-ffunction-sections -fdata-sections $NOSANITIZE_CFLAGS"
+set cflags "-ffunction-sections -fdata-sections $NOSANITIZE_CFLAGS $NOLTO_CFLAGS"
 set objfile "tmpdir/gc.o"
 
 if { [istarget powerpc*-*-*] && ![istarget powerpc64*-*-*] } {
index b30b05f1449eea0e7f3158f609aef22fb329c2b7..4b6b2fc7cda2fcfcb9174317fde08869026b56c2 100644 (file)
@@ -94,7 +94,7 @@ set failed_compile 0
 set _ ""
 set plugin_nm_output ""
 set old_CFLAGS "$CFLAGS"
-append CFLAGS " $NOSANITIZE_CFLAGS"
+append CFLAGS " $NOSANITIZE_CFLAGS $NOLTO_CFLAGS"
 
 if { $can_compile && \
        (![ld_compile "$CC $CFLAGS" $srcdir/$subdir/main.c tmpdir/main.o] \
index 94452f747948ed0a519775034db023f9d418e2d4..d5cd5079c82eb0ba9678b45245887fce305463a6 100644 (file)
@@ -63,8 +63,8 @@ if [istarget tic6x*-*-*] {
     set CFLAGS "-mno-dsbt -msdata=none"
 }
 
-if { ![ld_compile "$CC $NOSANITIZE_CFLAGS" "$srcdir/$subdir/cross1.c" tmpdir/cross1.o] \
-     || ![ld_compile "$CC $NOSANITIZE_CFLAGS" "$srcdir/$subdir/cross2.c" tmpdir/cross2.o] } {
+if { ![ld_compile "$CC $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" "$srcdir/$subdir/cross1.c" tmpdir/cross1.o] \
+     || ![ld_compile "$CC $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" "$srcdir/$subdir/cross2.c" tmpdir/cross2.o] } {
     unresolved $test1
     unresolved $test2
     set CFLAGS "$old_CFLAGS"
@@ -101,7 +101,7 @@ if [string match "" $exec_output] then {
 
 # Check cross references within a single object.
 
-if { ![ld_compile "$CC $NOSANITIZE_CFLAGS" "$srcdir/$subdir/cross3.c" tmpdir/cross3.o] } {
+if { ![ld_compile "$CC $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" "$srcdir/$subdir/cross3.c" tmpdir/cross3.o] } {
     unresolved $test2
     set CFLAGS "$old_CFLAGS"
     set CC "$old_CC"
@@ -126,7 +126,7 @@ if [string match "" $exec_output] then {
 
 # Check cross references for ld -r
 
-if { ![ld_compile "$CC $NOSANITIZE_CFLAGS" "$srcdir/$subdir/cross4.c" tmpdir/cross4.o] } {
+if { ![ld_compile "$CC $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" "$srcdir/$subdir/cross4.c" tmpdir/cross4.o] } {
     unresolved $test3
     set CFLAGS "$old_CFLAGS"
     set CC "$old_CC"
index f8c143fa15b4949afc8a12146a0e300c2794aabc..8c34699203e2ab1ada812019341cb1a1b7cdd7e0 100644 (file)
@@ -46,8 +46,8 @@ set seltests {
     {A::foo() B::foo() dropme1() dropme2()} {*-*-*}}
 }
 
-set cflags "-w -O -ffunction-sections -fdata-sections $NOSANITIZE_CFLAGS"
-set cxxflags "-fno-exceptions -fno-rtti $NOSANITIZE_CFLAGS"
+set cflags "-w -O -ffunction-sections -fdata-sections $NOSANITIZE_CFLAGS $NOLTO_CFLAGS"
+set cxxflags "-fno-exceptions -fno-rtti $NOSANITIZE_CFLAGS $NOLTO_CFLAGS"
 set ldflags "--gc-sections -Bstatic"
 
 if [istarget mips*-*] {
index 3b279fe805ca353d6d07a345f54b1c079739aa3e..1842f35bfa4bb82b600d9e135dcd8ce87a38f70e 100644 (file)
@@ -353,9 +353,10 @@ if { ![check_compiler_available] } {
 # with S-records.  Also add $NOCF_PROTECTION_CFLAGS for S-records.
 # Also add $NOSANITIZE_CFLAGS for S-records.
 set old_CC "$CC"
-set CC "$CC $PLT_CFLAGS $NOPIE_CFLAGS $NOPIE_LDFLAGS $NOCF_PROTECTION_CFLAGS $NOSANITIZE_CFLAGS"
+set CC "$CC $PLT_CFLAGS $NOPIE_CFLAGS $NOPIE_LDFLAGS $NOCF_PROTECTION_CFLAGS $NOSANITIZE_CFLAGS $NOLTO_CFLAGS"
 set old_CXX "$CXX"
-set CXX "$CXX $PLT_CFLAGS $NOPIE_CFLAGS $NOPIE_LDFLAGS $NOCF_PROTECTION_CFLAGS $NOSANITIZE_CFLAGS"
+set old_CXXFLAGS "$CXXFLAGS"
+set CXXFLAGS "$CXXFLAGS $PLT_CFLAGS $NOPIE_CFLAGS $NOPIE_LDFLAGS $NOCF_PROTECTION_CFLAGS $NOSANITIZE_CFLAGS $NOLTO_CFLAGS"
 
 # S-records can't handle .note.gnu.property sections.
 if { [is_elf_format] \
@@ -370,6 +371,7 @@ if { ![ld_compile $CC $srcdir/$subdir/sr1.c tmpdir/sr1.o] \
     unresolved $test2
     set CC "$old_CC"
     set CXX "$old_CXX"
+    set CXXFLAGS "$old_CXXFLAGS"
     return
 }
 
@@ -443,6 +445,7 @@ if { ![is_remote host] && [which $CXX] == 0 } {
     untested $test2
     set CC "$old_CC"
     set CXX "$old_CXX"
+    set CXXFLAGS "$old_CXXFLAGS"
     return
 }
 
@@ -450,6 +453,7 @@ if ![ld_compile "$CXX $CXXFLAGS -fno-exceptions" $srcdir/$subdir/sr3.cc tmpdir/s
     unresolved $test2
     set CC "$old_CC"
     set CXX "$old_CXX"
+    set CXXFLAGS "$old_CXXFLAGS"
     return
 }
 
@@ -477,3 +481,4 @@ run_srec_test $test2 "tmpdir/sr3.o"
 
 set CC "$old_CC"
 set CXX "$old_CXX"
+set CXXFLAGS "$old_CXXFLAGS"
index b1b39ea3600c73e2ef6cd1bc9493f5f907bdd697..ea7172a7ec5e17295199cd6f2fb5a544b0d57cc7 100644 (file)
@@ -29,7 +29,7 @@ if { ![check_compiler_available] } {
     untested $testund
     untested $testfn
     untested $testline
-} elseif { ![ld_compile "$CC -g" $srcdir/$subdir/undefined.c tmpdir/undefined.o] } {
+} elseif { ![ld_compile "$CC -g $NOLTO_CFLAGS" $srcdir/$subdir/undefined.c tmpdir/undefined.o] } {
     verbose "Unable to compile test file!" 1
     unresolved $testund
     unresolved $testfn
index c02640761994a84d02bafb214cde8c5eae8194ed..1aa614fa36266b5e56d52bb0030d0474fcc1d0e5 100644 (file)
@@ -499,6 +499,11 @@ proc run_ld_link_tests { ldtests args } {
        set maybe_failed 0
        set ld_output ""
 
+       # Add -fno-lto.  LTO should be tested explicitly by $cflags.
+       if {[check_lto_available]} {
+           set cflags "-fno-lto $cflags"
+       }
+
 #      verbose -log "Testname is $testname"
 #      verbose -log "ld_options is $ld_options"
 #      verbose -log "ld_after is $ld_after"