diff --git a/buildflags.md b/buildflags.md index 1f2c296..b565dfe 100644 --- a/buildflags.md +++ b/buildflags.md @@ -489,9 +489,12 @@ by undefining the `%_annotated_build` RPM macro (see above). Binary watermarks are currently disabled on armhpf, and with the `clang` toolchain. -If frame pointers are enabled by default (via `%_include_frame_pointers), -the `-fno-omit-frame-pointer` and `-mno-omit-leaf-frame-pointer` flags will -be added. +If frame pointers are enabled by default (via `%_include_frame_pointers`), +the `-fno-omit-frame-pointer` will be added on all architectures. Additional +flags will be added on specific architectures: + +* `-mno-omit-leaf-frame-pointer` on x86_64 and aarch64 +* `-mbackchain` on s390x ### Architecture-specific compiler flags diff --git a/macros b/macros index be3630d..3c6b27e 100644 --- a/macros +++ b/macros @@ -338,7 +338,10 @@ print(result) # https://fedoraproject.org/wiki/Changes/fno-omit-frame-pointer # Use "%undefine _include_frame_pointers" to disable. %_include_frame_pointers 1 -%_frame_pointers_cflags %{?_include_frame_pointers:-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer} +%_frame_pointers_cflags %{?_include_frame_pointers:-fno-omit-frame-pointer} +%_frame_pointers_cflags_x86_64 %{?_include_frame_pointers:-mno-omit-leaf-frame-pointer} +%_frame_pointers_cflags_aarch64 %{?_include_frame_pointers:-mno-omit-leaf-frame-pointer} +%_frame_pointers_cflags_s390x %{?_include_frame_pointers:-mbackchain} # Fail linking if there are undefined symbols. Required for proper # ELF symbol versioning support. Disabled by default. @@ -381,7 +384,7 @@ print(result) # If they are needed then add "%define _legacy_common_support 1" to the spec file. %_legacy_options %{?_legacy_common_support: -fcommon} -%__global_compiler_flags %{_general_options} %{_warning_options} %{_preprocessor_defines} %{_hardened_cflags} %{_annotation_cflags} %{_frame_pointers_cflags} %{_legacy_options} +%__global_compiler_flags %{_general_options} %{_warning_options} %{_preprocessor_defines} %{_hardened_cflags} %{_annotation_cflags} %{_legacy_options} # Automatically trim changelog entries after 2 years %_changelog_trimage %{expr:2*365*24*60*60} diff --git a/redhat-rpm-config.spec b/redhat-rpm-config.spec index 00deb7b..70e17c9 100644 --- a/redhat-rpm-config.spec +++ b/redhat-rpm-config.spec @@ -223,6 +223,7 @@ install -p -m 644 -t %{buildroot}%{_rpmluadir}/fedora/srpm forge.lua %changelog * Wed Jan 4 2023 Davide Cavalca - 239-1 - Enable frame pointers by default +- Set arch specific flags for frame pointers support * Tue Jan 3 2023 Miro HronĨok - 238-1 - Set %%source_date_epoch_from_changelog to 1 diff --git a/rpmrc b/rpmrc index 38f20b7..6766ff4 100644 --- a/rpmrc +++ b/rpmrc @@ -1,22 +1,22 @@ include: /usr/lib/rpm/rpmrc -optflags: i386 %{__global_compiler_flags} -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -optflags: i486 %{__global_compiler_flags} -m32 -march=i486 -fasynchronous-unwind-tables -fstack-clash-protection -optflags: i586 %{__global_compiler_flags} -m32 -march=i586 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -optflags: i686 %{__global_compiler_flags} -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -optflags: athlon %{__global_compiler_flags} -m32 -march=athlon -fasynchronous-unwind-tables -fstack-clash-protection -optflags: x86_64 %{__global_compiler_flags} -m64 %{__cflags_arch_x86_64} -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection +optflags: i386 %{__global_compiler_flags} -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection %{_frame_pointers_cflags} +optflags: i486 %{__global_compiler_flags} -m32 -march=i486 -fasynchronous-unwind-tables -fstack-clash-protection %{_frame_pointers_cflags} +optflags: i586 %{__global_compiler_flags} -m32 -march=i586 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection %{_frame_pointers_cflags} +optflags: i686 %{__global_compiler_flags} -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection %{_frame_pointers_cflags} +optflags: athlon %{__global_compiler_flags} -m32 -march=athlon -fasynchronous-unwind-tables -fstack-clash-protection %{_frame_pointers_cflags} +optflags: x86_64 %{__global_compiler_flags} -m64 %{__cflags_arch_x86_64} -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection %{_frame_pointers_cflags} %{_frame_pointers_cflags_x86_64} -optflags: ppc64le %{__global_compiler_flags} -m64 %{__cflags_arch_ppc64le} -fasynchronous-unwind-tables -fstack-clash-protection +optflags: ppc64le %{__global_compiler_flags} -m64 %{__cflags_arch_ppc64le} -fasynchronous-unwind-tables -fstack-clash-protection %{_frame_pointers_cflags} # TODO: Remove armv7hl once f36 goes EOL. -optflags: armv7hl %{__global_compiler_flags} -march=armv7-a -mfpu=vfpv3-d16 -mtune=generic-armv7-a -mabi=aapcs-linux -mfloat-abi=hard +optflags: armv7hl %{__global_compiler_flags} -march=armv7-a -mfpu=vfpv3-d16 -mtune=generic-armv7-a -mabi=aapcs-linux -mfloat-abi=hard %{_frame_pointers_cflags} -optflags: s390x %{__global_compiler_flags} -m64 %{__cflags_arch_s390x} -fasynchronous-unwind-tables -fstack-clash-protection +optflags: s390x %{__global_compiler_flags} -m64 %{__cflags_arch_s390x} -fasynchronous-unwind-tables -fstack-clash-protection %{_frame_pointers_cflags} %{_frame_pointers_cflags_s390x} -optflags: aarch64 %{__global_compiler_flags} -mbranch-protection=standard -fasynchronous-unwind-tables %[ "%{toolchain}" == "gcc" ? "-fstack-clash-protection" : "" ] +optflags: aarch64 %{__global_compiler_flags} -mbranch-protection=standard -fasynchronous-unwind-tables %[ "%{toolchain}" == "gcc" ? "-fstack-clash-protection" : "" ] %{_frame_pointers_cflags} %{_frame_pointers_cflags_aarch64} -optflags: riscv64 %{__global_compiler_flags} -fasynchronous-unwind-tables %[ "%{toolchain}" == "gcc" ? "-fstack-clash-protection" : "" ] +optflags: riscv64 %{__global_compiler_flags} -fasynchronous-unwind-tables %[ "%{toolchain}" == "gcc" ? "-fstack-clash-protection" : "" ] %{_frame_pointers_cflags} # set build arch to fedora buildarches on hardware capable of running it # saves having to do rpmbuild --target=