From 16f6f88a277608c8dcb92178dc4ed1fdf832e885 Mon Sep 17 00:00:00 2001 From: Slava Barinov Date: Thu, 13 Jul 2017 13:35:02 +0300 Subject: [PATCH] packaging: Add %gcc_force_options and %gcc_unforce_options macros The macros can be used in certain .spec files to switch off sanitization of parts or modules without hard-coding sanitizer flags into packages. Change-Id: I1643a3bdd64a3d48855f02622feb064d482e3655 Signed-off-by: Slava Barinov Signed-off-by: Sangmin Seo --- packaging/gcc-aarch64.spec | 48 ++++++++++++++++++++++++++++++++++++---------- packaging/gcc-armv7l.spec | 48 ++++++++++++++++++++++++++++++++++++---------- packaging/linaro-gcc.spec | 48 ++++++++++++++++++++++++++++++++++++---------- 3 files changed, 114 insertions(+), 30 deletions(-) diff --git a/packaging/gcc-aarch64.spec b/packaging/gcc-aarch64.spec index c8fe802..4a2b267 100644 --- a/packaging/gcc-aarch64.spec +++ b/packaging/gcc-aarch64.spec @@ -54,6 +54,14 @@ %define libdir %{!?cross:%{_libdir}}%{?cross:%{_prefix}/lib%{?aarch64:64}} %define libsubdir %{libdir}/gcc/%{target_arch}/%{version} +%define asan_force_options -fsanitize-recover=address -fsanitize=address -fno-omit-frame-pointer -Wp,-U_FORTIFY_SOURCE +%define ubsan_force_options -fsanitize=undefined,bounds-strict,float-divide-by-zero,float-cast-overflow +%define lsan_force_options -fsanitize=leak -fno-omit-frame-pointer -Wp,-U_FORTIFY_SOURCE + +%define asan_runtime_options halt_on_error=false:start_deactivated=true:print_cmdline=true:quarantine_size_mb=1:detect_leaks=0:log_path=/tmp/asan.log:log_exe_name=1 +%define ubsan_runtime_options print_cmdline=true:log_path=/tmp/ubsan.log +%define lsan_runtime_options print_cmdline=true:detect_leaks=1:log_path=/tmp/lsan.log:log_exe_name=1:fast_unwind_on_malloc=false:malloc_context_size=5:suppressions=/lsan.supp:print_suppressions=false + Name: gcc%{?cross:-%{cross}} # With generated files in src we could drop the following BuildRequires: bison @@ -649,14 +657,17 @@ Scripts for ASan instrumentation # Change mode to allow all users to run gcc-force/unforce-options chmod a+w /usr/bin [ -d /emul/ ] && chmod a+w /emul/usr/bin/ && chmod a+w /emul/home/abuild/rpmbuild/BUILD/gcc-%{version}/obj/gcc/ -/usr/bin/gcc-force-options -fsanitize-recover=address -fsanitize=address -fno-common -fno-omit-frame-pointer -U_FORTIFY_SOURCE -# Add restore_fcommon macro +/usr/bin/gcc-force-options %asan_force_options -fno-common +# Add ASan-related macros cat >> /usr/lib/rpm/tizen_macros << EOF -%restore_fcommon \\ - /usr/bin/gcc-unforce-options \\ - /usr/bin/gcc-force-options -fsanitize-recover=address -fsanitize=address -fcommon -fno-omit-frame-pointer -U_FORTIFY_SOURCE - +%%asan_force_options %{asan_force_options} +%%gcc_unforce_options /usr/bin/gcc-unforce-options +%%gcc_force_options /usr/bin/gcc-force-options +%%gcc_force_default_options %%gcc_force_options %%asan_force_options -fno-common +%%restore_fcommon \\ + %%gcc_unforce_options \\ + %%gcc_force_options %%asan_force_options -fcommon EOF %preun -n asan-force-options @@ -678,7 +689,15 @@ Scripts for UBSan instrumentation # Change mode to allow all users to run gcc-force/unforce-options chmod a+w /usr/bin [ -d /emul/ ] && chmod a+w /emul/usr/bin/ && chmod a+w /emul/home/abuild/rpmbuild/BUILD/gcc-%{version}/obj/gcc/ -/usr/bin/gcc-force-options -fsanitize=undefined,bounds-strict,float-divide-by-zero,float-cast-overflow +/usr/bin/gcc-force-options %ubsan_force_options +# Add UBSan-related macros +cat >> /usr/lib/rpm/tizen_macros << EOF + +%%ubsan_force_options %{ubsan_force_options} +%%gcc_unforce_options /usr/bin/gcc-unforce-options +%%gcc_force_options /usr/bin/gcc-force-options +%%gcc_force_default_options %%gcc_force_options %%ubsan_force_options +EOF %preun -n ubsan-force-options # Restore read-only mode @@ -711,7 +730,15 @@ Scripts for LSan instrumentation # Change mode to allow all users to run gcc-force/unforce-options chmod a+w /usr/bin [ -d /emul/ ] && chmod a+w /emul/usr/bin/ && chmod a+w /emul/home/abuild/rpmbuild/BUILD/gcc-%{version}/obj/gcc/ -/usr/bin/gcc-force-options -fsanitize=leak -fno-omit-frame-pointer -U_FORTIFY_SOURCE +/usr/bin/gcc-force-options %lsan_force_options +# Add LSan-related macros +cat >> /usr/lib/rpm/tizen_macros << EOF + +%%lsan_force_options %{lsan_force_options} +%%gcc_unforce_options /usr/bin/gcc-unforce-options +%%gcc_force_options /usr/bin/gcc-force-options +%%gcc_force_default_options %%gcc_force_options %%lsan_force_options +EOF %preun -n lsan-force-options # Restore read-only mode @@ -754,6 +781,7 @@ LSan runtime environment echo "%{libdir}/liblsan.so" > /etc/ld.so.preload [ -f /etc/ld.so.preload.orig ] && cat /etc/ld.so.preload.orig >> /etc/ld.so.preload [ -f /etc/ld.so.preload.orig ] && rm -f /etc/ld.so.preload.orig +echo "%{lsan_runtime_options}" > /LSAN_OPTIONS chsmack -a "_" /etc/ld.so.preload /LSAN_OPTIONS /lsan.supp %preun -n lsan-runtime-env @@ -785,7 +813,7 @@ Asan runtime environment echo "%{libdir}/libasan.so" > /etc/ld.so.preload [ -f /etc/ld.so.preload.orig ] && cat /etc/ld.so.preload.orig >> /etc/ld.so.preload [ -f /etc/ld.so.preload.orig ] && rm -f /etc/ld.so.preload.orig -echo "halt_on_error=false:start_deactivated=true:print_cmdline=true:quarantine_size_mb=1:detect_leaks=0:log_path=/tmp/asan.log:log_exe_name=1" > /ASAN_OPTIONS +echo "%{asan_runtime_options}" > /ASAN_OPTIONS chsmack -a "_" /etc/ld.so.preload /ASAN_OPTIONS %preun -n asan-runtime-env @@ -801,7 +829,7 @@ Requires: libubsan UBSan runtime environment %post -n ubsan-runtime-env -echo "print_cmdline=true:log_path=/tmp/ubsan.log" > /UBSAN_OPTIONS +echo "%{ubsan_runtime_options}" > /UBSAN_OPTIONS %package plugin-devel Summary: GNU GCC Plugin development files diff --git a/packaging/gcc-armv7l.spec b/packaging/gcc-armv7l.spec index eaecc4d..7f70139 100644 --- a/packaging/gcc-armv7l.spec +++ b/packaging/gcc-armv7l.spec @@ -54,6 +54,14 @@ %define libdir %{!?cross:%{_libdir}}%{?cross:%{_prefix}/lib%{?aarch64:64}} %define libsubdir %{libdir}/gcc/%{target_arch}/%{version} +%define asan_force_options -fsanitize-recover=address -fsanitize=address -fno-omit-frame-pointer -Wp,-U_FORTIFY_SOURCE +%define ubsan_force_options -fsanitize=undefined,bounds-strict,float-divide-by-zero,float-cast-overflow +%define lsan_force_options -fsanitize=leak -fno-omit-frame-pointer -Wp,-U_FORTIFY_SOURCE + +%define asan_runtime_options halt_on_error=false:start_deactivated=true:print_cmdline=true:quarantine_size_mb=1:detect_leaks=0:log_path=/tmp/asan.log:log_exe_name=1 +%define ubsan_runtime_options print_cmdline=true:log_path=/tmp/ubsan.log +%define lsan_runtime_options print_cmdline=true:detect_leaks=1:log_path=/tmp/lsan.log:log_exe_name=1:fast_unwind_on_malloc=false:malloc_context_size=5:suppressions=/lsan.supp:print_suppressions=false + Name: gcc%{?cross:-%{cross}} # With generated files in src we could drop the following BuildRequires: bison @@ -649,14 +657,17 @@ Scripts for ASan instrumentation # Change mode to allow all users to run gcc-force/unforce-options chmod a+w /usr/bin [ -d /emul/ ] && chmod a+w /emul/usr/bin/ && chmod a+w /emul/home/abuild/rpmbuild/BUILD/gcc-%{version}/obj/gcc/ -/usr/bin/gcc-force-options -fsanitize-recover=address -fsanitize=address -fno-common -fno-omit-frame-pointer -U_FORTIFY_SOURCE -# Add restore_fcommon macro +/usr/bin/gcc-force-options %asan_force_options -fno-common +# Add ASan-related macros cat >> /usr/lib/rpm/tizen_macros << EOF -%restore_fcommon \\ - /usr/bin/gcc-unforce-options \\ - /usr/bin/gcc-force-options -fsanitize-recover=address -fsanitize=address -fcommon -fno-omit-frame-pointer -U_FORTIFY_SOURCE - +%%asan_force_options %{asan_force_options} +%%gcc_unforce_options /usr/bin/gcc-unforce-options +%%gcc_force_options /usr/bin/gcc-force-options +%%gcc_force_default_options %%gcc_force_options %%asan_force_options -fno-common +%%restore_fcommon \\ + %%gcc_unforce_options \\ + %%gcc_force_options %%asan_force_options -fcommon EOF %preun -n asan-force-options @@ -678,7 +689,15 @@ Scripts for UBSan instrumentation # Change mode to allow all users to run gcc-force/unforce-options chmod a+w /usr/bin [ -d /emul/ ] && chmod a+w /emul/usr/bin/ && chmod a+w /emul/home/abuild/rpmbuild/BUILD/gcc-%{version}/obj/gcc/ -/usr/bin/gcc-force-options -fsanitize=undefined,bounds-strict,float-divide-by-zero,float-cast-overflow +/usr/bin/gcc-force-options %ubsan_force_options +# Add UBSan-related macros +cat >> /usr/lib/rpm/tizen_macros << EOF + +%%ubsan_force_options %{ubsan_force_options} +%%gcc_unforce_options /usr/bin/gcc-unforce-options +%%gcc_force_options /usr/bin/gcc-force-options +%%gcc_force_default_options %%gcc_force_options %%ubsan_force_options +EOF %preun -n ubsan-force-options # Restore read-only mode @@ -711,7 +730,15 @@ Scripts for LSan instrumentation # Change mode to allow all users to run gcc-force/unforce-options chmod a+w /usr/bin [ -d /emul/ ] && chmod a+w /emul/usr/bin/ && chmod a+w /emul/home/abuild/rpmbuild/BUILD/gcc-%{version}/obj/gcc/ -/usr/bin/gcc-force-options -fsanitize=leak -fno-omit-frame-pointer -U_FORTIFY_SOURCE +/usr/bin/gcc-force-options %lsan_force_options +# Add LSan-related macros +cat >> /usr/lib/rpm/tizen_macros << EOF + +%%lsan_force_options %{lsan_force_options} +%%gcc_unforce_options /usr/bin/gcc-unforce-options +%%gcc_force_options /usr/bin/gcc-force-options +%%gcc_force_default_options %%gcc_force_options %%lsan_force_options +EOF %preun -n lsan-force-options # Restore read-only mode @@ -754,6 +781,7 @@ LSan runtime environment echo "%{libdir}/liblsan.so" > /etc/ld.so.preload [ -f /etc/ld.so.preload.orig ] && cat /etc/ld.so.preload.orig >> /etc/ld.so.preload [ -f /etc/ld.so.preload.orig ] && rm -f /etc/ld.so.preload.orig +echo "%{lsan_runtime_options}" > /LSAN_OPTIONS chsmack -a "_" /etc/ld.so.preload /LSAN_OPTIONS /lsan.supp %preun -n lsan-runtime-env @@ -785,7 +813,7 @@ Asan runtime environment echo "%{libdir}/libasan.so" > /etc/ld.so.preload [ -f /etc/ld.so.preload.orig ] && cat /etc/ld.so.preload.orig >> /etc/ld.so.preload [ -f /etc/ld.so.preload.orig ] && rm -f /etc/ld.so.preload.orig -echo "halt_on_error=false:start_deactivated=true:print_cmdline=true:quarantine_size_mb=1:detect_leaks=0:log_path=/tmp/asan.log:log_exe_name=1" > /ASAN_OPTIONS +echo "%{asan_runtime_options}" > /ASAN_OPTIONS chsmack -a "_" /etc/ld.so.preload /ASAN_OPTIONS %preun -n asan-runtime-env @@ -801,7 +829,7 @@ Requires: libubsan UBSan runtime environment %post -n ubsan-runtime-env -echo "print_cmdline=true:log_path=/tmp/ubsan.log" > /UBSAN_OPTIONS +echo "%{ubsan_runtime_options}" > /UBSAN_OPTIONS %package plugin-devel Summary: GNU GCC Plugin development files diff --git a/packaging/linaro-gcc.spec b/packaging/linaro-gcc.spec index 6633db3..cb4f5ab8 100644 --- a/packaging/linaro-gcc.spec +++ b/packaging/linaro-gcc.spec @@ -51,6 +51,14 @@ %define libdir %{!?cross:%{_libdir}}%{?cross:%{_prefix}/lib%{?aarch64:64}} %define libsubdir %{libdir}/gcc/%{target_arch}/%{version} +%define asan_force_options -fsanitize-recover=address -fsanitize=address -fno-omit-frame-pointer -Wp,-U_FORTIFY_SOURCE +%define ubsan_force_options -fsanitize=undefined,bounds-strict,float-divide-by-zero,float-cast-overflow +%define lsan_force_options -fsanitize=leak -fno-omit-frame-pointer -Wp,-U_FORTIFY_SOURCE + +%define asan_runtime_options halt_on_error=false:start_deactivated=true:print_cmdline=true:quarantine_size_mb=1:detect_leaks=0:log_path=/tmp/asan.log:log_exe_name=1 +%define ubsan_runtime_options print_cmdline=true:log_path=/tmp/ubsan.log +%define lsan_runtime_options print_cmdline=true:detect_leaks=1:log_path=/tmp/lsan.log:log_exe_name=1:fast_unwind_on_malloc=false:malloc_context_size=5:suppressions=/lsan.supp:print_suppressions=false + Name: gcc%{?cross:-%{cross}} # With generated files in src we could drop the following BuildRequires: bison @@ -646,14 +654,17 @@ Scripts for ASan instrumentation # Change mode to allow all users to run gcc-force/unforce-options chmod a+w /usr/bin [ -d /emul/ ] && chmod a+w /emul/usr/bin/ && chmod a+w /emul/home/abuild/rpmbuild/BUILD/gcc-%{version}/obj/gcc/ -/usr/bin/gcc-force-options -fsanitize-recover=address -fsanitize=address -fno-common -fno-omit-frame-pointer -U_FORTIFY_SOURCE -# Add restore_fcommon macro +/usr/bin/gcc-force-options %asan_force_options -fno-common +# Add ASan-related macros cat >> /usr/lib/rpm/tizen_macros << EOF -%restore_fcommon \\ - /usr/bin/gcc-unforce-options \\ - /usr/bin/gcc-force-options -fsanitize-recover=address -fsanitize=address -fcommon -fno-omit-frame-pointer -U_FORTIFY_SOURCE - +%%asan_force_options %{asan_force_options} +%%gcc_unforce_options /usr/bin/gcc-unforce-options +%%gcc_force_options /usr/bin/gcc-force-options +%%gcc_force_default_options %%gcc_force_options %%asan_force_options -fno-common +%%restore_fcommon \\ + %%gcc_unforce_options \\ + %%gcc_force_options %%asan_force_options -fcommon EOF %preun -n asan-force-options @@ -675,7 +686,15 @@ Scripts for UBSan instrumentation # Change mode to allow all users to run gcc-force/unforce-options chmod a+w /usr/bin [ -d /emul/ ] && chmod a+w /emul/usr/bin/ && chmod a+w /emul/home/abuild/rpmbuild/BUILD/gcc-%{version}/obj/gcc/ -/usr/bin/gcc-force-options -fsanitize=undefined,bounds-strict,float-divide-by-zero,float-cast-overflow +/usr/bin/gcc-force-options %ubsan_force_options +# Add UBSan-related macros +cat >> /usr/lib/rpm/tizen_macros << EOF + +%%ubsan_force_options %{ubsan_force_options} +%%gcc_unforce_options /usr/bin/gcc-unforce-options +%%gcc_force_options /usr/bin/gcc-force-options +%%gcc_force_default_options %%gcc_force_options %%ubsan_force_options +EOF %preun -n ubsan-force-options # Restore read-only mode @@ -708,7 +727,15 @@ Scripts for LSan instrumentation # Change mode to allow all users to run gcc-force/unforce-options chmod a+w /usr/bin [ -d /emul/ ] && chmod a+w /emul/usr/bin/ && chmod a+w /emul/home/abuild/rpmbuild/BUILD/gcc-%{version}/obj/gcc/ -/usr/bin/gcc-force-options -fsanitize=leak -fno-omit-frame-pointer -U_FORTIFY_SOURCE +/usr/bin/gcc-force-options %lsan_force_options +# Add LSan-related macros +cat >> /usr/lib/rpm/tizen_macros << EOF + +%%lsan_force_options %{lsan_force_options} +%%gcc_unforce_options /usr/bin/gcc-unforce-options +%%gcc_force_options /usr/bin/gcc-force-options +%%gcc_force_default_options %%gcc_force_options %%lsan_force_options +EOF %preun -n lsan-force-options # Restore read-only mode @@ -751,6 +778,7 @@ LSan runtime environment echo "%{libdir}/liblsan.so" > /etc/ld.so.preload [ -f /etc/ld.so.preload.orig ] && cat /etc/ld.so.preload.orig >> /etc/ld.so.preload [ -f /etc/ld.so.preload.orig ] && rm -f /etc/ld.so.preload.orig +echo "%{lsan_runtime_options}" > /LSAN_OPTIONS chsmack -a "_" /etc/ld.so.preload /LSAN_OPTIONS /lsan.supp %preun -n lsan-runtime-env @@ -782,7 +810,7 @@ Asan runtime environment echo "%{libdir}/libasan.so" > /etc/ld.so.preload [ -f /etc/ld.so.preload.orig ] && cat /etc/ld.so.preload.orig >> /etc/ld.so.preload [ -f /etc/ld.so.preload.orig ] && rm -f /etc/ld.so.preload.orig -echo "halt_on_error=false:start_deactivated=true:print_cmdline=true:quarantine_size_mb=1:detect_leaks=0:log_path=/tmp/asan.log:log_exe_name=1" > /ASAN_OPTIONS +echo "%{asan_runtime_options}" > /ASAN_OPTIONS chsmack -a "_" /etc/ld.so.preload /ASAN_OPTIONS %preun -n asan-runtime-env @@ -798,7 +826,7 @@ Requires: libubsan UBSan runtime environment %post -n ubsan-runtime-env -echo "print_cmdline=true:log_path=/tmp/ubsan.log" > /UBSAN_OPTIONS +echo "%{ubsan_runtime_options}" > /UBSAN_OPTIONS %package plugin-devel Summary: GNU GCC Plugin development files -- 2.7.4