From 2ee6aa07f8b94e48d24e329d1e0b0b270f4f12e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 24 Jan 2022 13:07:46 +0100 Subject: [PATCH] Disable notes with linkers other than bfd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit %_package_note_linker != "bfd" disables note insertion, so that it also works as another opt-out mechanism. Maybe we can improve support in the future. From https://bugzilla.redhat.com/show_bug.cgi?id=2043178#c26: It turns out that gold does something wrong with sections. When we add the new section, it shifts existing sections (and even gets one section less than before): │ - Entry point address: 0x500 │ + Entry point address: 0x50 │ Start of program headers: 64 (bytes into file) │ - Start of section headers: 6328 (bytes into file) │ + Start of section headers: 8344 (bytes into file) │ Flags: 0x0 │ Size of this header: 64 (bytes) │ Size of program headers: 56 (bytes) │ - Number of program headers: 9 │ + Number of program headers: 8 │ Size of section headers: 64 (bytes) │ - Number of section headers: 36 │ - Section header string table index: 35 │ + Number of section headers: 38 │ + Section header string table index: 37 There's a bug open to add INSERT AFTER [https://sourceware.org/bugzilla/show_bug.cgi?id=15373], but it's 8 years old. Opting out seems to be the best we can do for now. I also noticed that gold support -dT, only lld doesn't, so the conditional is adjusted accordingly. --- macros.package-notes-srpm | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/macros.package-notes-srpm b/macros.package-notes-srpm index 0cd369b..5a27915 100644 --- a/macros.package-notes-srpm +++ b/macros.package-notes-srpm @@ -30,10 +30,10 @@ # values for the main package. %_package_note_file %{_builddir}%{?buildsubdir:/%{buildsubdir}}/.package_note-%{name}-%{version}-%{release}.%{_arch}.ld -# Which linker will be used? Unfortunately linkers other than bfd do not -# support some of the options that we'd like to use. This can be set to -# disable the READONLY attribute and do other tweaks so linking works with -# the alternative linkers. This should be either "bfd", "gold", or "lld". +# Which linker will be used? This should be either "bfd", "gold", or +# "lld". Unfortunately linkers other than bfd do not support some of +# the options that we'd like to use, so if this is set to anything +# other than "bfd", note insertion is disabled. %_package_note_linker bfd # Whether to specify the READONLY attribute for the inserted @@ -41,10 +41,13 @@ # linkers do not support it. %_package_note_readonly %["%_package_note_linker" == "bfd"?"1":"0"] +# Overall status: 1 if looks like we can insert the note, 0 otherwise +%_package_note_status %[0%{?_package_note_file:1} && 0%{?name:1} && "%_target_cpu" != "noarch" && "%_package_note_linker" == "bfd" ? 1 : 0] + # The linker flags to be passed to the compiler to insert the notes section. -%_package_note_flags %{?_package_note_file:%{?name:%["%_target_cpu" == "noarch"?"":"-Wl,%["%_package_note_linker" == "bfd"?"-dT":"-T"],%{_package_note_file}"]}} +%_package_note_flags %[%_package_note_status?"-Wl,%["%_package_note_linker" != "lld"?"-dT":"-T"],%{_package_note_file}":""] # The command to actually generate the linker script that inserts the # notes file. This command is automatically used as part of the build # preamble. -%_generate_package_note_file %{?_package_note_file:%{?name:%["%_target_cpu" == "noarch"?"":"if [ -f %{_rpmconfigdir}/generate-rpm-note.sh ]; then %{_rpmconfigdir}/generate-rpm-note.sh %[0%{?_package_note_readonly}?"":"--readonly=no "]${RPM_PACKAGE_NAME:?} ${RPM_PACKAGE_VERSION:?}-${RPM_PACKAGE_RELEASE:?} ${RPM_ARCH:?} >%{_package_note_file}; fi"]}} +%_generate_package_note_file %[%_package_note_status?"if [ -f %{_rpmconfigdir}/generate-rpm-note.sh ]; then %{_rpmconfigdir}/generate-rpm-note.sh %[0%{?_package_note_readonly}?"":"--readonly=no "]${RPM_PACKAGE_NAME:?} ${RPM_PACKAGE_VERSION:?}-${RPM_PACKAGE_RELEASE:?} ${RPM_ARCH:?} >%{_package_note_file}; fi":""]