Deliver {a, l, ub}san-force-options and {a, l}san-build-env packages.
Change-Id: I2b49fabac8068ffa1170fdc4b2b96fe9a42eb25b
Signed-off-by: Maxim Ostapenko <m.ostapenko@samsung.com>
%define gcc_run_tests 1
%endif
-%define tsan_arch x86_64
-%define asan_arch x86_64 %ix86 ppc ppc64 %sparc %arm
+%define tsan_arch x86_64 aarch64
+%define asan_arch x86_64 %ix86 ppc ppc64 %sparc %arm aarch64
%define itm_arch x86_64 %ix86 %arm ppc ppc64 ppc64le s390 s390x %sparc aarch64
%define atomic_arch x86_64 %ix86 %arm aarch64 ppc ppc64 ppc64le s390 s390x %sparc m68k
-%define lsan_arch x86_64
-%define ubsan_arch x86_64 %ix86 ppc ppc64 %arm
+%define lsan_arch x86_64 aarch64
+%define ubsan_arch x86_64 %ix86 ppc ppc64 %arm aarch64
%define cilkrts_arch x86_64 %ix86
%ifarch armv7l
Source12: mpc-1.0.tar.gz
Source13: isl-0.12.2.tar.bz2
Source14: cloog-0.18.1.tar.gz
+Source15: gcc-force-options
+Source16: gcc-unforce-options
Group: Development/Building
Summary: The GNU C Compiler and Support Files
License: GPL-3.0+
%post -n libgo-32bit -p /sbin/ldconfig
%postun -n libgo-32bit -p /sbin/ldconfig
+%package -n asan-force-options
+Summary: Scripts to enable automatic package sanitization
+Group: System Environment
+Requires: gcc
+Requires: libasan
+
+%description -n asan-force-options
+Scripts for ASan instrumentation
+
+%post -n asan-force-options
+# Change mode to allow all users to run gcc-force/unforce-options
+chmod a+w /usr/bin
+/usr/bin/gcc-force-options -fsanitize-recover=address -fsanitize=address -fno-common -fno-omit-frame-pointer -U_FORTIFY_SOURCE
+
+%preun -n asan-force-options
+# Restore read-only mode
+chmod a-w /usr/bin
+/usr/bin/gcc-unforce-options
+
+%package -n ubsan-force-options
+Summary: Scripts to enable automatic package sanitization
+Group: System Environment
+Requires: gcc
+Requires: libubsan
+
+%description -n ubsan-force-options
+Scripts for UBSan instrumentation
+
+%post -n ubsan-force-options
+# Change mode to allow all users to run gcc-force/unforce-options
+chmod a+w /usr/bin
+/usr/bin/gcc-force-options -fsanitize=undefined,bounds-strict,float-divide-by-zero,float-cast-overflow
+
+%preun -n ubsan-force-options
+# Restore read-only mode
+chmod a-w /usr/bin
+/usr/bin/gcc-unforce-options
+
+%package -n lsan-force-options
+Summary: Scripts to enable automatic package sanitization
+Group: System Environment
+Requires: gcc
+Requires: liblsan
+
+%description -n lsan-force-options
+Scripts for LSan instrumentation
+
+%post -n lsan-force-options
+# Change mode to allow all users to run gcc-force/unforce-options
+chmod a+w /usr/bin
+/usr/bin/gcc-force-options -fsanitize=leak
+
+%preun -n lsan-force-options
+# Restore read-only mode
+chmod a-w /usr/bin
+/usr/bin/gcc-unforce-options
+
+%package -n asan-build-env
+Summary: Asan build environment
+Group: Development/Libraries
+Requires: libasan
+
+%description -n asan-build-env
+Asan build environment
+
+%post -n asan-build-env
+# Add /usr/lib/libasan.so to /etc/ld.so.preload
+mv -v /etc/ld.so.preload /etc/ld.so.preload.orig
+echo "/usr/lib/libasan.so" > /etc/ld.so.preload
+cat /etc/ld.so.preload.orig >> /etc/ld.so.preload
+rm -f /etc/ld.so.preload.orig
+echo "halt_on_error=false:start_deactivated=true:print_cmdline=true:quarantine_size_mb=1" > /ASAN_OPTIONS
+
+%preun -n asan-build-env
+# Restore /etc/ld.so.preload
+mv -v /etc/ld.so.preload.orig /etc/ld.so.preload
+
+%package -n lsan-build-env
+Summary: Lsan build environment
+Group: Development/Libraries
+Requires: liblsan
+
+%description -n lsan-build-env
+Lsan build environment
+
+%post -n lsan-build-env
+# Add /usr/lib/liblsan.so to /etc/ld.so.preload
+mv -v /etc/ld.so.preload /etc/ld.so.preload.orig
+echo "/usr/lib/liblsan.so" > /etc/ld.so.preload
+cat /etc/ld.so.preload.orig >> /etc/ld.so.preload
+rm -f /etc/ld.so.preload.orig
+
+%preun -n lsan-build-env
+# Restore /etc/ld.so.preload
+mv -v /etc/ld.so.preload.orig /etc/ld.so.preload
%prep
%setup -q -n gcc-%{version}
rm -rf %{buildroot}/%{libsubdir}/include
}
+cp %{SOURCE15} %{SOURCE16} %{buildroot}%{_prefix}/bin
+chmod a+x %{buildroot}%{_prefix}/bin/gcc-force-options
+chmod a+x %{buildroot}%{_prefix}/bin/gcc-unforce-options
+
%files
%defattr(-,root,root)
%{?cross:
%ifarch %cilkrts_arch
%{libsubdir}/include/cilk/*
%endif
-%ifnarch aarch64
%{libsubdir}/include/sanitizer/*
-%endif
%files c++
%defattr(-,root,root)
%defattr(-,root,root)
%{libsubdir}/32/libstdc++.so.*-gdb.py
%endif
+
+%files -n asan-force-options
+%defattr(-,root,root,-)
+%{_prefix}/bin/gcc-force-options
+%{_prefix}/bin/gcc-unforce-options
+
+%files -n ubsan-force-options
+%defattr(-,root,root,-)
+%{_prefix}/bin/gcc-force-options
+%{_prefix}/bin/gcc-unforce-options
+
+%ifarch %lsan_arch
+%files -n lsan-force-options
+%defattr(-,root,root,-)
+%{_prefix}/bin/gcc-force-options
+%{_prefix}/bin/gcc-unforce-options
+%endif
+
+%files -n asan-build-env
+%defattr(-,root,root,-)
+
+%ifarch %lsan_arch
+%files -n lsan-build-env
+%defattr(-,root,root,-)
+%endif
+
}
%changelog
%define gcc_run_tests 1
%endif
-%define tsan_arch x86_64
-%define asan_arch x86_64 %ix86 ppc ppc64 %sparc %arm
+%define tsan_arch x86_64 aarch64
+%define asan_arch x86_64 %ix86 ppc ppc64 %sparc %arm aarch64
%define itm_arch x86_64 %ix86 %arm ppc ppc64 ppc64le s390 s390x %sparc aarch64
%define atomic_arch x86_64 %ix86 %arm aarch64 ppc ppc64 ppc64le s390 s390x %sparc m68k
-%define lsan_arch x86_64
-%define ubsan_arch x86_64 %ix86 ppc ppc64 %arm
+%define lsan_arch x86_64 aarch64
+%define ubsan_arch x86_64 %ix86 ppc ppc64 %arm aarch64
%define cilkrts_arch x86_64 %ix86
%ifarch armv7l
Source12: mpc-1.0.tar.gz
Source13: isl-0.12.2.tar.bz2
Source14: cloog-0.18.1.tar.gz
+Source15: gcc-force-options
+Source16: gcc-unforce-options
Group: Development/Building
Summary: The GNU C Compiler and Support Files
License: GPL-3.0+
%post -n libgo-32bit -p /sbin/ldconfig
%postun -n libgo-32bit -p /sbin/ldconfig
+%package -n asan-force-options
+Summary: Scripts to enable automatic package sanitization
+Group: System Environment
+Requires: gcc
+Requires: libasan
+
+%description -n asan-force-options
+Scripts for ASan instrumentation
+
+%post -n asan-force-options
+# Change mode to allow all users to run gcc-force/unforce-options
+chmod a+w /usr/bin
+/usr/bin/gcc-force-options -fsanitize-recover=address -fsanitize=address -fno-common -fno-omit-frame-pointer -U_FORTIFY_SOURCE
+
+%preun -n asan-force-options
+# Restore read-only mode
+chmod a-w /usr/bin
+/usr/bin/gcc-unforce-options
+
+%package -n ubsan-force-options
+Summary: Scripts to enable automatic package sanitization
+Group: System Environment
+Requires: gcc
+Requires: libubsan
+
+%description -n ubsan-force-options
+Scripts for UBSan instrumentation
+
+%post -n ubsan-force-options
+# Change mode to allow all users to run gcc-force/unforce-options
+chmod a+w /usr/bin
+/usr/bin/gcc-force-options -fsanitize=undefined,bounds-strict,float-divide-by-zero,float-cast-overflow
+
+%preun -n ubsan-force-options
+# Restore read-only mode
+chmod a-w /usr/bin
+/usr/bin/gcc-unforce-options
+
+%package -n lsan-force-options
+Summary: Scripts to enable automatic package sanitization
+Group: System Environment
+Requires: gcc
+Requires: liblsan
+
+%description -n lsan-force-options
+Scripts for LSan instrumentation
+
+%post -n lsan-force-options
+# Change mode to allow all users to run gcc-force/unforce-options
+chmod a+w /usr/bin
+/usr/bin/gcc-force-options -fsanitize=leak
+
+%preun -n lsan-force-options
+# Restore read-only mode
+chmod a-w /usr/bin
+/usr/bin/gcc-unforce-options
+
+%package -n asan-build-env
+Summary: Asan build environment
+Group: Development/Libraries
+Requires: libasan
+
+%description -n asan-build-env
+Asan build environment
+
+%post -n asan-build-env
+# Add /usr/lib/libasan.so to /etc/ld.so.preload
+mv -v /etc/ld.so.preload /etc/ld.so.preload.orig
+echo "/usr/lib/libasan.so" > /etc/ld.so.preload
+cat /etc/ld.so.preload.orig >> /etc/ld.so.preload
+rm -f /etc/ld.so.preload.orig
+echo "halt_on_error=false:start_deactivated=true:print_cmdline=true:quarantine_size_mb=1" > /ASAN_OPTIONS
+
+%preun -n asan-build-env
+# Restore /etc/ld.so.preload
+mv -v /etc/ld.so.preload.orig /etc/ld.so.preload
+
+%package -n lsan-build-env
+Summary: Lsan build environment
+Group: Development/Libraries
+Requires: liblsan
+
+%description -n lsan-build-env
+Lsan build environment
+
+%post -n lsan-build-env
+# Add /usr/lib/liblsan.so to /etc/ld.so.preload
+mv -v /etc/ld.so.preload /etc/ld.so.preload.orig
+echo "/usr/lib/liblsan.so" > /etc/ld.so.preload
+cat /etc/ld.so.preload.orig >> /etc/ld.so.preload
+rm -f /etc/ld.so.preload.orig
+
+%preun -n lsan-build-env
+# Restore /etc/ld.so.preload
+mv -v /etc/ld.so.preload.orig /etc/ld.so.preload
%prep
%setup -q -n gcc-%{version}
rm -rf %{buildroot}/%{libsubdir}/include
}
+cp %{SOURCE15} %{SOURCE16} %{buildroot}%{_prefix}/bin
+chmod a+x %{buildroot}%{_prefix}/bin/gcc-force-options
+chmod a+x %{buildroot}%{_prefix}/bin/gcc-unforce-options
+
%files
%defattr(-,root,root)
%{?cross:
%ifarch %cilkrts_arch
%{libsubdir}/include/cilk/*
%endif
-%ifnarch aarch64
%{libsubdir}/include/sanitizer/*
-%endif
%files c++
%defattr(-,root,root)
%defattr(-,root,root)
%{libsubdir}/32/libstdc++.so.*-gdb.py
%endif
+
+%files -n asan-force-options
+%defattr(-,root,root,-)
+%{_prefix}/bin/gcc-force-options
+%{_prefix}/bin/gcc-unforce-options
+
+%files -n ubsan-force-options
+%defattr(-,root,root,-)
+%{_prefix}/bin/gcc-force-options
+%{_prefix}/bin/gcc-unforce-options
+
+%ifarch %lsan_arch
+%files -n lsan-force-options
+%defattr(-,root,root,-)
+%{_prefix}/bin/gcc-force-options
+%{_prefix}/bin/gcc-unforce-options
+%endif
+
+%files -n asan-build-env
+%defattr(-,root,root,-)
+
+%ifarch %lsan_arch
+%files -n lsan-build-env
+%defattr(-,root,root,-)
+%endif
+
}
%changelog
--- /dev/null
+#!/bin/sh
+
+set -e
+
+if [ $# -eq 0 ]; then
+ cat << EOF
+Syntax:
+ $(basename $0) OPT1 [OPT2...]"
+
+Example:
+ $(basename $0) [prepend|append] -fsanitize=address -fno-common -U_FORTIFY_SOURCE
+ By default flags are appending.
+EOF
+ exit 1
+fi
+
+FLAGS="$@"
+
+if [ $(find $(dirname $0) -name \*-real | wc -l) -gt 0 ]; then
+ echo >&2 "$(basename $0): directory was already processed, aborting"
+ exit 1
+fi
+
+case "$1" in
+prepend)
+ shift
+ PREFLAGS="$@"
+ POSTFLAGS=
+ ;;
+append)
+ shift
+ PREFLAGS=
+ POSTFLAGS="$@"
+ ;;
+*)
+ PREFLAGS=
+ POSTFLAGS="$@"
+ ;;
+esac
+
+TMP=$(pwd)/tmp.$$
+cat > $TMP << EOF
+#!/bin/sh
+if echo "$PREFLAGS "\$@" $POSTFLAGS" | grep -q -- "-fsanitize=undefined" && echo "\$@" | grep -q "\.gch\>"; then
+ # UBSan doesn't support precompiled headers. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66343
+ echo "Precompiled headers currently not supported by UBSan" >&2
+ # Don't instrument kernel modules
+ # Don't instrument with "-nostdlib" linking
+elif ! echo "\$@" | grep -q -e __KERNEL__ -e \-nostdlib; then
+ # Use readlink in order to follow symlinks if any
+ \$(readlink -f \$0)-real $PREFLAGS "\$@" $POSTFLAGS
+else
+ \$(readlink -f \$0)-real "\$@"
+fi
+EOF
+chmod +x $TMP
+
+find -L $(dirname $0) -type f -a -perm -a=x | grep -E '(gcc|g\+\+|c\+\+)$' | while read tool; do
+ mv $tool $tool-real
+ cp $TMP $tool
+done
+
+rm $TMP
+
--- /dev/null
+#!/bin/sh
+
+set -e
+
+if [ $# -gt 0 ]; then
+ echo >&2 "$(basename $0): unexpected arguments"
+ exit 1
+fi
+
+find $(dirname $0) -name \*-real | while read tool_real; do
+ tool=$(echo "$tool_real" | sed -e 's/-real$//')
+ mv $tool_real $tool
+done
+
%define gcc_run_tests 1
%endif
-%define tsan_arch x86_64
-%define asan_arch x86_64 %ix86 ppc ppc64 %sparc %arm
+%define tsan_arch x86_64 aarch64
+%define asan_arch x86_64 %ix86 ppc ppc64 %sparc %arm aarch64
%define itm_arch x86_64 %ix86 %arm ppc ppc64 ppc64le s390 s390x %sparc aarch64
%define atomic_arch x86_64 %ix86 %arm aarch64 ppc ppc64 ppc64le s390 s390x %sparc m68k
-%define lsan_arch x86_64
-%define ubsan_arch x86_64 %ix86 ppc ppc64 %arm
+%define lsan_arch x86_64 aarch64
+%define ubsan_arch x86_64 %ix86 ppc ppc64 %arm aarch64
%define cilkrts_arch x86_64 %ix86
%ifarch armv7l
Source12: mpc-1.0.tar.gz
Source13: isl-0.12.2.tar.bz2
Source14: cloog-0.18.1.tar.gz
+Source15: gcc-force-options
+Source16: gcc-unforce-options
Group: Development/Building
Summary: The GNU C Compiler and Support Files
License: GPL-3.0+
%post -n libgo-32bit -p /sbin/ldconfig
%postun -n libgo-32bit -p /sbin/ldconfig
+%package -n asan-force-options
+Summary: Scripts to enable automatic package sanitization
+Group: System Environment
+Requires: gcc
+Requires: libasan
+
+%description -n asan-force-options
+Scripts for ASan instrumentation
+
+%post -n asan-force-options
+# Change mode to allow all users to run gcc-force/unforce-options
+chmod a+w /usr/bin
+/usr/bin/gcc-force-options -fsanitize-recover=address -fsanitize=address -fno-common -fno-omit-frame-pointer -U_FORTIFY_SOURCE
+
+%preun -n asan-force-options
+# Restore read-only mode
+chmod a-w /usr/bin
+/usr/bin/gcc-unforce-options
+
+%package -n ubsan-force-options
+Summary: Scripts to enable automatic package sanitization
+Group: System Environment
+Requires: gcc
+Requires: libubsan
+
+%description -n ubsan-force-options
+Scripts for UBSan instrumentation
+
+%post -n ubsan-force-options
+# Change mode to allow all users to run gcc-force/unforce-options
+chmod a+w /usr/bin
+/usr/bin/gcc-force-options -fsanitize=undefined,bounds-strict,float-divide-by-zero,float-cast-overflow
+
+%preun -n ubsan-force-options
+# Restore read-only mode
+chmod a-w /usr/bin
+/usr/bin/gcc-unforce-options
+
+%package -n lsan-force-options
+Summary: Scripts to enable automatic package sanitization
+Group: System Environment
+Requires: gcc
+Requires: liblsan
+
+%description -n lsan-force-options
+Scripts for LSan instrumentation
+
+%post -n lsan-force-options
+# Change mode to allow all users to run gcc-force/unforce-options
+chmod a+w /usr/bin
+/usr/bin/gcc-force-options -fsanitize=leak
+
+%preun -n lsan-force-options
+# Restore read-only mode
+chmod a-w /usr/bin
+/usr/bin/gcc-unforce-options
+
+%package -n asan-build-env
+Summary: Asan build environment
+Group: Development/Libraries
+Requires: libasan
+
+%description -n asan-build-env
+Asan build environment
+
+%post -n asan-build-env
+# Add /usr/lib/libasan.so to /etc/ld.so.preload
+mv -v /etc/ld.so.preload /etc/ld.so.preload.orig
+echo "/usr/lib/libasan.so" > /etc/ld.so.preload
+cat /etc/ld.so.preload.orig >> /etc/ld.so.preload
+rm -f /etc/ld.so.preload.orig
+echo "halt_on_error=false:start_deactivated=true:print_cmdline=true:quarantine_size_mb=1" > /ASAN_OPTIONS
+
+%preun -n asan-build-env
+# Restore /etc/ld.so.preload
+mv -v /etc/ld.so.preload.orig /etc/ld.so.preload
+
+%package -n lsan-build-env
+Summary: Lsan build environment
+Group: Development/Libraries
+Requires: liblsan
+
+%description -n lsan-build-env
+Lsan build environment
+
+%post -n lsan-build-env
+# Add /usr/lib/liblsan.so to /etc/ld.so.preload
+mv -v /etc/ld.so.preload /etc/ld.so.preload.orig
+echo "/usr/lib/liblsan.so" > /etc/ld.so.preload
+cat /etc/ld.so.preload.orig >> /etc/ld.so.preload
+rm -f /etc/ld.so.preload.orig
+
+%preun -n lsan-build-env
+# Restore /etc/ld.so.preload
+mv -v /etc/ld.so.preload.orig /etc/ld.so.preload
%prep
%setup -q -n gcc-%{version}
rm -rf %{buildroot}/%{libsubdir}/include
}
+cp %{SOURCE15} %{SOURCE16} %{buildroot}%{_prefix}/bin
+chmod a+x %{buildroot}%{_prefix}/bin/gcc-force-options
+chmod a+x %{buildroot}%{_prefix}/bin/gcc-unforce-options
+
%files
%defattr(-,root,root)
%{?cross:
%ifarch %cilkrts_arch
%{libsubdir}/include/cilk/*
%endif
-%ifnarch aarch64
%{libsubdir}/include/sanitizer/*
-%endif
%files c++
%defattr(-,root,root)
%defattr(-,root,root)
%{libsubdir}/32/libstdc++.so.*-gdb.py
%endif
+
+%files -n asan-force-options
+%defattr(-,root,root,-)
+%{_prefix}/bin/gcc-force-options
+%{_prefix}/bin/gcc-unforce-options
+
+%files -n ubsan-force-options
+%defattr(-,root,root,-)
+%{_prefix}/bin/gcc-force-options
+%{_prefix}/bin/gcc-unforce-options
+
+%ifarch %lsan_arch
+%files -n lsan-force-options
+%defattr(-,root,root,-)
+%{_prefix}/bin/gcc-force-options
+%{_prefix}/bin/gcc-unforce-options
+%endif
+
+%files -n asan-build-env
+%defattr(-,root,root,-)
+
+%ifarch %lsan_arch
+%files -n lsan-build-env
+%defattr(-,root,root,-)
+%endif
+
}
%changelog