From 8e2d77f7341a666f743f96c6b378b36ea7539ae1 Mon Sep 17 00:00:00 2001 From: Arjun Shankar Date: Mon, 5 Sep 2022 16:24:44 +0200 Subject: [PATCH] Retain libc.so.6 debuglink section, remove ld.so debuginfo file (#2090744) This commit fixes wrap-find-debuginfo.sh so that: * the .gnu_debuglink section of libc.so.6 is retained, and * the redundant debuginfo file generated for ld.so is removed Co-Authored-By: Benjamin Herrenschmidt Reviewed-by: Florian Weimer --- glibc.spec | 8 ++++++-- wrap-find-debuginfo.sh | 24 +++++++++++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/glibc.spec b/glibc.spec index 4eb4491..089249d 100644 --- a/glibc.spec +++ b/glibc.spec @@ -159,7 +159,7 @@ Version: %{glibcversion} # - It allows using the Release number without the %%dist tag in the dependency # generator to make the generated requires interchangeable between Rawhide # and ELN (.elnYY < .fcXX). -%global baserelease 4 +%global baserelease 5 Release: %{baserelease}%{?dist} # In general, GPLv2+ is used by programs, LGPLv2+ is used for @@ -2185,6 +2185,11 @@ update_gconv_modules_cache () %files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared %changelog +* Mon Sep 05 2022 Arjun Shankar - 2.36.9000-5 +- Co-Authored-By: Benjamin Herrenschmidt +- Retain .gnu_debuglink section in libc.so.6 (#2090744) +- Remove redundant ld.so debuginfo file (#2090744) + * Tue Aug 30 2022 DJ Delorie - 2.36.9000-4 - Auto-sync with upstream branch master, commit c7509d49c4e8fa494120c5ead21338559dad16f5. @@ -2230,7 +2235,6 @@ update_gconv_modules_cache () - htl: make __pthread_hurd_cond_timedwait_internal check mutex is held - Add AArch64 HWCAP2_* constants from Linux 5.19 - * Mon Aug 22 2022 Arjun Shankar - 2.36.9000-3 - Auto-sync with upstream branch master, commit a727220b37efc9d4d558a77c5fc57f3af99a4829: diff --git a/wrap-find-debuginfo.sh b/wrap-find-debuginfo.sh index 6a558df..3157d69 100644 --- a/wrap-find-debuginfo.sh +++ b/wrap-find-debuginfo.sh @@ -17,6 +17,7 @@ set -ex ldso_tmp="$(mktemp)" libc_tmp="$(mktemp)" +libc_dlink_tmp="$(mktemp)" # Prefer a separately installed debugedit over the RPM-integrated one. if command -v debugedit >/dev/null ; then @@ -26,7 +27,7 @@ else fi cleanup () { - rm -f "$ldso_tmp" "$libc_tmp" + rm -f "$ldso_tmp" "$libc_tmp" "$libc_dlink_tmp" } trap cleanup 0 @@ -66,6 +67,10 @@ cp "$libc_path" "$libc_tmp" # Run the debuginfo extraction. "$script_path" "$@" +# libc.so.6: Extract the .gnu_debuglink section +objcopy -j.gnu_debuglink --set-section-flags .gnu_debuglink=alloc \ + -O binary "$libc_path" "$libc_dlink_tmp" + # Restore the original files. cp "$ldso_tmp" "$ldso_path" cp "$libc_tmp" "$libc_path" @@ -74,6 +79,23 @@ cp "$libc_tmp" "$libc_path" objcopy --merge-notes "$ldso_path" objcopy --merge-notes "$libc_path" +# libc.so.6: Restore the .gnu_debuglink section +objcopy --add-section .gnu_debuglink="$libc_dlink_tmp" "$libc_path" + +# ld.so does not have separated debuginfo and so the debuginfo file +# generated by find-debuginfo is redundant. Therefore, remove it. +ldso_debug= +for ldso_debug_candidate in `find "$sysroot_path" -regextype posix-extended \ + -regex '.*/ld(-.*|64|)\.so\.[0-9]+.*debug$' -type f` ; do + if test -z "$ldso_debug" ; then + ldso_debug="$ldso_debug_candidate" + else + echo "error: multiple ld.so debug candidates: $ldso_debug, $ldso_debug_candidate" + exit 1 + fi +done +rm -f "$ldso_debug" + # libc.so.6: Reduce to valuable symbols. Eliminate file symbols, # annobin symbols, and symbols used by the glibc build to implement # hidden aliases (__EI_*). We would also like to remove __GI_*