From 99a93836a8cef7691db22d59efce0a7348ec1c88 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 17 Feb 2026 15:27:25 +0000 Subject: [PATCH] further fixes for testing non-production cross compilers (RHEL-114521) - include libsanitizer.spec and static sanitizer libraries in packages - enable tests involving target environment variables in cross testing - disable color for more sanitizer tests Related: RHEL-114521 --- gcc.spec | 60 +++++++++++++++++++- gcc14-tests-color.patch | 107 +++++++++++++++++++++++++++++++++++ gcc14-tests-env-native.patch | 26 +++++++++ 3 files changed, 191 insertions(+), 2 deletions(-) create mode 100644 gcc14-tests-color.patch create mode 100644 gcc14-tests-env-native.patch diff --git a/gcc.spec b/gcc.spec index 0c6b17f..605c4ec 100644 --- a/gcc.spec +++ b/gcc.spec @@ -166,7 +166,7 @@ Summary: Various compilers (C, C++, Objective-C, ...) Name: gcc Version: %{gcc_version} -Release: %{gcc_release}.3%{?dist} +Release: %{gcc_release}.4%{?dist} # License notes for some of the less obvious ones: # gcc/doc/cppinternals.texi: Linux-man-pages-copyleft-2-para # isl: MIT, BSD-2-Clause @@ -351,6 +351,8 @@ Patch3006: gcc14-tests-simulate-thread-native.patch Patch3007: gcc14-tests-gcov-native.patch Patch3008: gcc14-tests-misc-native.patch Patch3009: gcc14-tests-tree-prof-native.patch +Patch3010: gcc14-tests-color.patch +Patch3011: gcc14-tests-env-native.patch # On ARM EABI systems, we do want -gnueabi to be part of the # target triple. @@ -1214,6 +1216,8 @@ touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m %patch -P3007 -p1 -b .gcc14-tests-gcov-native %patch -P3008 -p1 -b .gcc14-tests-misc-native %patch -P3009 -p1 -b .gcc14-tests-tree-prof-native +%patch -P3010 -p1 -b .gcc14-tests-color +%patch -P3011 -p1 -b .gcc14-tests-env-native %ifarch %{arm} rm -f gcc/testsuite/go.test/test/fixedbugs/issue19182.go @@ -2048,6 +2052,10 @@ INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/libitm.a )" > $CROSS_LIBPATH/ OUTPUT_FORMAT($OUTPUT_FORMAT_FOR_ARCH) INPUT ( =%{_prefix}/lib64/libasan.so.8 )" > $CROSS_LIBPATH/libasan.so + echo "/* GNU ld script + Use the static library from sysroot. */ +INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/libasan.a )" > $CROSS_LIBPATH/libasan.a + echo "/* GNU ld script Use the object from sysroot. */ INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/libasan_preinit.o )" > $CROSS_LIBPATH/libasan_preinit.o @@ -2057,6 +2065,10 @@ INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/libasan_preinit.o )" > $CROSS OUTPUT_FORMAT($OUTPUT_FORMAT_FOR_ARCH) INPUT ( =%{_prefix}/lib64/libhwasan.so.0 )" > $CROSS_LIBPATH/libhwasan.so + echo "/* GNU ld script + Use the static library from sysroot. */ +INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/libhwasan.a )" > $CROSS_LIBPATH/libhwasan.a + echo "/* GNU ld script Use the object from sysroot. */ INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/libhwasan_preinit.o )" > $CROSS_LIBPATH/libhwasan_preinit.o @@ -2066,6 +2078,10 @@ INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/libhwasan_preinit.o )" > $CRO OUTPUT_FORMAT($OUTPUT_FORMAT_FOR_ARCH) INPUT ( =%{_prefix}/lib64/libtsan.so.2 )" > $CROSS_LIBPATH/libtsan.so + echo "/* GNU ld script + Use the static library from sysroot. */ +INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/libtsan.a )" > $CROSS_LIBPATH/libtsan.a + echo "/* GNU ld script Use the object from sysroot. */ INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/libtsan_preinit.o )" > $CROSS_LIBPATH/libtsan_preinit.o @@ -2075,6 +2091,10 @@ INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/libtsan_preinit.o )" > $CROSS OUTPUT_FORMAT($OUTPUT_FORMAT_FOR_ARCH) INPUT ( =%{_prefix}/lib64/liblsan.so.0 )" > $CROSS_LIBPATH/liblsan.so + echo "/* GNU ld script + Use the static library from sysroot. */ +INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/liblsan.a )" > $CROSS_LIBPATH/liblsan.a + echo "/* GNU ld script Use the object from sysroot. */ INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/liblsan_preinit.o )" > $CROSS_LIBPATH/liblsan_preinit.o @@ -2084,6 +2104,10 @@ INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/liblsan_preinit.o )" > $CROSS OUTPUT_FORMAT($OUTPUT_FORMAT_FOR_ARCH) INPUT ( =%{_prefix}/lib64/libubsan.so.1 )" > $CROSS_LIBPATH/libubsan.so + echo "/* GNU ld script + Use the static library from sysroot. */ +INPUT( =%{_prefix}/lib/gcc/$crossarch/%{gcc_major}/libubsan.a )" > $CROSS_LIBPATH/libubsan.a + # Help plugins find out nvra. echo gcc-%{version}-%{release}.%{_arch} > $CROSS_LIBPATH/rpmver @@ -2925,6 +2949,7 @@ ln -s usr/lib64 lib64 hwasan_sysroot_libs= %if %{build_libhwasan} hwasan_sysroot_libs="%{_prefix}/lib64/libhwasan.so.0 \ + %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libhwasan.a \ %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libhwasan_preinit.o" %endif for f in /lib64/libgcc_s.so.1 \ @@ -2939,13 +2964,17 @@ for f in /lib64/libgcc_s.so.1 \ %{_prefix}/lib64/libitm.so.1 \ %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libitm.a \ %{_prefix}/lib64/libasan.so.8 \ + %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libasan.a \ %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libasan_preinit.o \ $hwasan_sysroot_libs \ %{_prefix}/lib64/libtsan.so.2 \ + %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libtsan.a \ %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libtsan_preinit.o \ %{_prefix}/lib64/liblsan.so.0 \ + %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/liblsan.a \ %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/liblsan_preinit.o \ - %{_prefix}/lib64/libubsan.so.1; do + %{_prefix}/lib64/libubsan.so.1 \ + %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libubsan.a; do mkdir -p %{buildroot}/%{sysroot_prefix}/$(dirname $f) cp %{buildroot}$f %{buildroot}/%{sysroot_prefix}/$f done @@ -4286,15 +4315,21 @@ end %{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libitm.a %{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libitm.spec %endif +%{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libasan.a %{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libasan.so %{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libasan_preinit.o +%{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libhwasan.a %{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libhwasan.so %{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libhwasan_preinit.o +%{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libtsan.a %{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libtsan.so %{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libtsan_preinit.o +%{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/liblsan.a %{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/liblsan.so %{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/liblsan_preinit.o +%{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libubsan.a %{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libubsan.so +%{_prefix}/lib/gcc/aarch64-redhat-linux/%{gcc_major}/libsanitizer.spec %files -n cross-gcc-c++-aarch64 %{_prefix}/bin/aarch64-redhat-linux-c++ @@ -4359,13 +4394,18 @@ end %{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/libitm.a %{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/libitm.spec %endif +%{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/libasan.a %{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/libasan.so %{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/libasan_preinit.o +%{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/libtsan.a %{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/libtsan.so %{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/libtsan_preinit.o +%{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/liblsan.a %{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/liblsan.so %{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/liblsan_preinit.o +%{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/libubsan.a %{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/libubsan.so +%{_prefix}/lib/gcc/ppc64le-redhat-linux/%{gcc_major}/libsanitizer.spec %files -n cross-gcc-c++-ppc64le %{_prefix}/bin/ppc64le-redhat-linux-c++ @@ -4430,13 +4470,18 @@ end %{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/libitm.a %{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/libitm.spec %endif +%{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/libasan.a %{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/libasan.so %{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/libasan_preinit.o +%{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/libtsan.a %{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/libtsan.so %{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/libtsan_preinit.o +%{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/liblsan.a %{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/liblsan.so %{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/liblsan_preinit.o +%{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/libubsan.a %{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/libubsan.so +%{_prefix}/lib/gcc/s390x-redhat-linux/%{gcc_major}/libsanitizer.spec %files -n cross-gcc-c++-s390x %{_prefix}/bin/s390x-redhat-linux-c++ @@ -4492,15 +4537,20 @@ end %files -n %{sysroot_package_arch}-libsanitizer %{sysroot_prefix}%{_prefix}/lib64/libasan.so.8 +%{sysroot_prefix}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libasan.a %{sysroot_prefix}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libasan_preinit.o %if %{build_libhwasan} %{sysroot_prefix}%{_prefix}/lib64/libhwasan.so.0 +%{sysroot_prefix}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libhwasan.a %{sysroot_prefix}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libhwasan_preinit.o %endif %{sysroot_prefix}%{_prefix}/lib64/libtsan.so.2 +%{sysroot_prefix}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libtsan.a %{sysroot_prefix}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libtsan_preinit.o %{sysroot_prefix}%{_prefix}/lib64/liblsan.so.0 +%{sysroot_prefix}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/liblsan.a %{sysroot_prefix}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/liblsan_preinit.o +%{sysroot_prefix}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libubsan.a %{sysroot_prefix}%{_prefix}/lib64/libubsan.so.1 %files -n %{sysroot_package_arch}-test-support @@ -4509,6 +4559,12 @@ end %{sysroot_prefix}/test-support/auto-host.h %changelog +* Tue Feb 17 2026 Joseph Myers - 14.3.1-4.4 +- fixes for testing non-production cross compilers (RHEL-114521) + - include libsanitizer.spec and static sanitizer libraries in packages + - enable tests involving target environment variables in cross testing + - disable color for more sanitizer tests + * Mon Jan 26 2026 Joseph Myers - 14.3.1-4.3 - fixes for testing non-production cross compilers (RHEL-114521) - enable guality tests in cross testing diff --git a/gcc14-tests-color.patch b/gcc14-tests-color.patch new file mode 100644 index 0000000..dc794e7 --- /dev/null +++ b/gcc14-tests-color.patch @@ -0,0 +1,107 @@ +commit a02744993035a301c27e753c3cb53ef82bc1bfc5 +Author: Joseph Myers +Date: Wed Feb 11 23:53:41 2026 +0000 + + testsuite: Use color=never for more sanitizer tests + + The sanitizer tests have logic to set ASAN_OPTIONS and UBSAN_OPTIONS + to color=never to avoid problems checking against output patterns, in + test configurations where the output is otherwise coloured by default. + + This does not however cover all sanitizer tests with issues in such + configurations. There is no corresponding logic to set TSAN_OPTIONS + for tsan tests, and environment variable settings in + dg-set-target-env-var override the globally set color=never. + + Add logic to set TSAN_OPTIONS similarly (following the UBSAN_OPTIONS + logic, that saves and restores any previous setting or lack thereof, + rather than the ASAN_OPTIONS logic, that just sets ASAN_OPTIONS in the + environment so that it remains set for all the rest of the possibly + unrelated tests included in the same runtest execution). Also add + color=never to dg-set-target-env-var in two such tests where I've seen + coloured output causing failures (but not for other tests where I + haven't seen the default producing such fallures). + + Tested for x86_64-pc-linux-gnu, and with a cross to aarch64-linux + (together with other testsuite fixes) in a configuration where I + previously saw failures related to colour output from sanitizer tests. + + * lib/tsan-dg.exp (orig_tsan_options_saved, orig_tsan_options): + New global variables. + (tsan_init): Save TSAN_OPTIONS and set it to color=never. + (tsan_finish): Restore TSAN_OPTIONS. + * c-c++-common/asan/pr64820.c: Include color=never in + ASAN_OPTIONS. + * c-c++-common/asan/use-after-return-1.c: Likewise. + +diff --git a/gcc/testsuite/c-c++-common/asan/pr64820.c b/gcc/testsuite/c-c++-common/asan/pr64820.c +index a00debf35883..b675ef21b275 100644 +--- a/gcc/testsuite/c-c++-common/asan/pr64820.c ++++ b/gcc/testsuite/c-c++-common/asan/pr64820.c +@@ -1,7 +1,7 @@ + /* { dg-do run } */ + /* { dg-require-effective-target fstack_protector } */ + /* { dg-options "-fstack-protector-strong" } */ +-/* { dg-set-target-env-var ASAN_OPTIONS "detect_stack_use_after_return=1" } */ ++/* { dg-set-target-env-var ASAN_OPTIONS "color=never detect_stack_use_after_return=1" } */ + /* { dg-shouldfail "asan" } */ + + __attribute__((noinline)) +diff --git a/gcc/testsuite/c-c++-common/asan/use-after-return-1.c b/gcc/testsuite/c-c++-common/asan/use-after-return-1.c +index e1bb18a57431..557a687e0e32 100644 +--- a/gcc/testsuite/c-c++-common/asan/use-after-return-1.c ++++ b/gcc/testsuite/c-c++-common/asan/use-after-return-1.c +@@ -1,5 +1,5 @@ + /* { dg-do run } */ +-/* { dg-set-target-env-var ASAN_OPTIONS "detect_stack_use_after_return=1" } */ ++/* { dg-set-target-env-var ASAN_OPTIONS "color=never detect_stack_use_after_return=1" } */ + /* { dg-shouldfail "asan" } */ + + #include +diff --git a/gcc/testsuite/lib/tsan-dg.exp b/gcc/testsuite/lib/tsan-dg.exp +index 916c8737807e..6379d18e6b54 100644 +--- a/gcc/testsuite/lib/tsan-dg.exp ++++ b/gcc/testsuite/lib/tsan-dg.exp +@@ -81,6 +81,9 @@ proc tsan_link_flags { paths } { + return "$flags" + } + ++set orig_tsan_options_saved 0 ++set orig_tsan_options 0 ++ + # + # tsan_init -- called at the start of each subdir of tests + # +@@ -93,6 +96,17 @@ proc tsan_init { args } { + global tsan_saved_ALWAYS_CXXFLAGS + global dg-do-what-default + global tsan_saved_dg-do-what-default ++ global orig_tsan_options_saved ++ global orig_tsan_options ++ ++ if { $orig_tsan_options_saved == 0 } { ++ # Save the original environment. ++ if [info exists env(TSAN_OPTIONS)] { ++ set orig_tsan_options "$env(TSAN_OPTIONS)" ++ set orig_tsan_options_saved 1 ++ } ++ } ++ setenv TSAN_OPTIONS color=never + + set link_flags "" + if ![is_remote host] { +@@ -134,6 +148,14 @@ proc tsan_finish { args } { + global tsan_saved_dg-do-what-default + global tsan_saved_library_path + global ld_library_path ++ global orig_tsan_options_saved ++ global orig_tsan_options ++ ++ if { $orig_tsan_options_saved } { ++ setenv TSAN_OPTIONS "$orig_tsan_options" ++ } elseif [info exists env(TSAN_OPTIONS)] { ++ unsetenv TSAN_OPTIONS ++ } + + if [info exists tsan_saved_ALWAYS_CXXFLAGS ] { + set ALWAYS_CXXFLAGS $tsan_saved_ALWAYS_CXXFLAGS diff --git a/gcc14-tests-env-native.patch b/gcc14-tests-env-native.patch new file mode 100644 index 0000000..2f1fc5f --- /dev/null +++ b/gcc14-tests-env-native.patch @@ -0,0 +1,26 @@ +diff --git a/gcc/testsuite/lib/asan-dg.exp b/gcc/testsuite/lib/asan-dg.exp +index 6bd3c211611a..cc7f30f10135 100644 +--- a/gcc/testsuite/lib/asan-dg.exp ++++ b/gcc/testsuite/lib/asan-dg.exp +@@ -303,7 +303,6 @@ proc asan-gtest { args } { + + if { ![info exists asan_last_gtest_test_list] } { return } + if { [llength $asan_last_gtest_test_list] == 0 } { return } +- if { ![isnative] || [is_remote target] } { return } + + set gtest_test_list $asan_last_gtest_test_list + unset asan_last_gtest_test_list +diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp +index 228c21d12071..49c9f5a8796d 100644 +--- a/gcc/testsuite/lib/gcc-dg.exp ++++ b/gcc/testsuite/lib/gcc-dg.exp +@@ -459,9 +459,6 @@ if { [info procs ${tool}_load] != [list] \ + set saved_target_env_var [list] + if { [info exists set_target_env_var] \ + && [llength $set_target_env_var] != 0 } { +- if { [is_remote target] } { +- return [list "unsupported" ""] +- } + set-target-env-var + } + set result [eval [list saved_${tool}_load $program] $args]