packaging: Add %gcc_force_options and %gcc_unforce_options macros
authorSlava Barinov <v.barinov@samsung.com>
Thu, 13 Jul 2017 10:35:02 +0000 (13:35 +0300)
committerDongkyun Son <dongkyun.s@samsung.com>
Fri, 28 Jul 2023 10:41:05 +0000 (19:41 +0900)
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 <v.barinov@samsung.com>
Signed-off-by: Sangmin Seo <sangmin7.seo@samsung.com>
packaging/gcc-aarch64.spec
packaging/gcc-armv7l.spec
packaging/linaro-gcc.spec

index c8fe802..4a2b267 100644 (file)
 %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
index eaecc4d..7f70139 100644 (file)
 %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
index 6633db3..cb4f5ab 100644 (file)
 %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