Switch to the distribution debuginfo generation mechanism
This needs a wrapper script around find-debuginfo.sh, so that ld.so is not stripped. This commit resolves debuginfo file conflicts (#1886295) because the ldconfig debuginfo file now includes the architecture name. All debugging information is preserved in ld.so (#1905611). With the distribution defaults, we strip all binaries again (#1661510).
This commit is contained in:
parent
f0cbcb3912
commit
8d4b53ceef
206
glibc.spec
206
glibc.spec
@ -85,19 +85,13 @@
|
|||||||
%define need_headers_package 0
|
%define need_headers_package 0
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
# If the debug information is split into two packages, the core debuginfo
|
|
||||||
# package and the common debuginfo package then the arch should be listed
|
|
||||||
# here. If the arch is not listed here then a single core debuginfo package
|
|
||||||
# will be created for the architecture.
|
|
||||||
%define debuginfocommonarches %{biarcharches} alpha alphaev6
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# %%package glibc - The GNU C Library (glibc) core package.
|
# %%package glibc - The GNU C Library (glibc) core package.
|
||||||
##############################################################################
|
##############################################################################
|
||||||
Summary: The GNU libc libraries
|
Summary: The GNU libc libraries
|
||||||
Name: glibc
|
Name: glibc
|
||||||
Version: %{glibcversion}
|
Version: %{glibcversion}
|
||||||
Release: 5%{?dist}
|
Release: 6%{?dist}
|
||||||
|
|
||||||
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
||||||
# libraries.
|
# libraries.
|
||||||
@ -131,10 +125,25 @@ Source0: %{?glibc_release_url}%{glibcsrcdir}.tar.xz
|
|||||||
Source1: nscd.conf
|
Source1: nscd.conf
|
||||||
Source2: bench.mk
|
Source2: bench.mk
|
||||||
Source3: glibc-bench-compare
|
Source3: glibc-bench-compare
|
||||||
|
Source10: wrap-find-debuginfo.sh
|
||||||
Source11: parse-SUPPORTED.py
|
Source11: parse-SUPPORTED.py
|
||||||
# Include in the source RPM for reference.
|
# Include in the source RPM for reference.
|
||||||
Source12: ChangeLog.old
|
Source12: ChangeLog.old
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# Activate the wrapper script for debuginfo generation, by rewriting
|
||||||
|
# the definition of __debug_install_post.
|
||||||
|
%{lua:
|
||||||
|
local wrapper = rpm.expand("%{SOURCE10}")
|
||||||
|
local ldso = rpm.expand("%{glibc_sysroot}/%{_lib}/ld-%{VERSION}.so")
|
||||||
|
local original = rpm.expand("%{macrobody:__debug_install_post}")
|
||||||
|
-- Strip leading newline. It confuses the macro redefinition.
|
||||||
|
-- Avoid embedded newlines that confuse the macro definition.
|
||||||
|
original = original:match("^%s*(.-)%s*$"):gsub("\\\n", "")
|
||||||
|
rpm.define("__debug_install_post bash " .. wrapper
|
||||||
|
.. " " .. ldso .. " " .. original)
|
||||||
|
}
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Patches:
|
# Patches:
|
||||||
# - See each individual patch file for origin and upstream status.
|
# - See each individual patch file for origin and upstream status.
|
||||||
@ -246,11 +255,6 @@ BuildRequires: binutils >= 2.30-17
|
|||||||
# Earlier releases have broken support for IRELATIVE relocations
|
# Earlier releases have broken support for IRELATIVE relocations
|
||||||
Conflicts: prelink < 0.4.2
|
Conflicts: prelink < 0.4.2
|
||||||
|
|
||||||
%if 0%{?_enable_debug_packages}
|
|
||||||
BuildRequires: elfutils >= 0.72
|
|
||||||
BuildRequires: rpm >= 4.2-0.56
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if %{without bootstrap}
|
%if %{without bootstrap}
|
||||||
%if %{with testsuite}
|
%if %{with testsuite}
|
||||||
# The testsuite builds static C++ binaries that require a C++ compiler,
|
# The testsuite builds static C++ binaries that require a C++ compiler,
|
||||||
@ -914,59 +918,6 @@ which can be helpful during program debugging.
|
|||||||
|
|
||||||
If unsure if you need this, don't install this package.
|
If unsure if you need this, don't install this package.
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
# glibc core "debuginfo" sub-package
|
|
||||||
##############################################################################
|
|
||||||
%if 0%{?_enable_debug_packages}
|
|
||||||
%define debug_package %{nil}
|
|
||||||
%define __debug_install_post %{nil}
|
|
||||||
%global __debug_package 1
|
|
||||||
# Disable thew new features that glibc packages don't use.
|
|
||||||
%undefine _debugsource_packages
|
|
||||||
%undefine _debuginfo_subpackages
|
|
||||||
%undefine _unique_debug_names
|
|
||||||
%undefine _unique_debug_srcs
|
|
||||||
|
|
||||||
%package debuginfo
|
|
||||||
Summary: Debug information for package %{name}
|
|
||||||
AutoReqProv: no
|
|
||||||
%ifarch %{debuginfocommonarches}
|
|
||||||
Requires: glibc-debuginfo-common = %{version}-%{release}
|
|
||||||
%else
|
|
||||||
%ifarch %{ix86} %{sparc}
|
|
||||||
Obsoletes: glibc-debuginfo-common
|
|
||||||
%endif
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%description debuginfo
|
|
||||||
This package provides debug information for package %{name}.
|
|
||||||
Debug information is useful when developing applications that use this
|
|
||||||
package or when debugging this package.
|
|
||||||
|
|
||||||
This package also contains static standard C libraries with
|
|
||||||
debugging information. You need this only if you want to step into
|
|
||||||
C library routines during debugging programs statically linked against
|
|
||||||
one or more of the standard C libraries.
|
|
||||||
To use this debugging information, you need to link binaries
|
|
||||||
with -static -L%{_prefix}/lib/debug%{_libdir} compiler options.
|
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
# glibc common "debuginfo-common" sub-package
|
|
||||||
##############################################################################
|
|
||||||
%ifarch %{debuginfocommonarches}
|
|
||||||
|
|
||||||
%package debuginfo-common
|
|
||||||
Summary: Debug information for package %{name}
|
|
||||||
AutoReqProv: no
|
|
||||||
|
|
||||||
%description debuginfo-common
|
|
||||||
This package provides debug information for package %{name}.
|
|
||||||
Debug information is useful when developing applications that use this
|
|
||||||
package or when debugging this package.
|
|
||||||
|
|
||||||
%endif
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if %{with benchtests}
|
%if %{with benchtests}
|
||||||
%package benchtests
|
%package benchtests
|
||||||
Summary: Benchmarking binaries and scripts for %{name}
|
Summary: Benchmarking binaries and scripts for %{name}
|
||||||
@ -1383,21 +1334,6 @@ truncate -s 0 %{glibc_sysroot}/etc/gai.conf
|
|||||||
truncate -s 0 %{glibc_sysroot}%{_libdir}/gconv/gconv-modules.cache
|
truncate -s 0 %{glibc_sysroot}%{_libdir}/gconv/gconv-modules.cache
|
||||||
chmod 644 %{glibc_sysroot}%{_libdir}/gconv/gconv-modules.cache
|
chmod 644 %{glibc_sysroot}%{_libdir}/gconv/gconv-modules.cache
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
# Install debug copies of unstripped static libraries
|
|
||||||
# - This step must be last in order to capture any additional static
|
|
||||||
# archives we might have added.
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
# If we are building a debug package then copy all of the static archives
|
|
||||||
# into the debug directory to keep them as unstripped copies.
|
|
||||||
%if 0%{?_enable_debug_packages}
|
|
||||||
mkdir -p %{glibc_sysroot}%{_prefix}/lib/debug%{_libdir}
|
|
||||||
cp -a %{glibc_sysroot}%{_libdir}/*.a \
|
|
||||||
%{glibc_sysroot}%{_prefix}/lib/debug%{_libdir}/
|
|
||||||
rm -f %{glibc_sysroot}%{_prefix}/lib/debug%{_libdir}/*_p.a
|
|
||||||
%endif
|
|
||||||
|
|
||||||
# Remove any zoneinfo files; they are maintained by tzdata.
|
# Remove any zoneinfo files; they are maintained by tzdata.
|
||||||
rm -rf %{glibc_sysroot}%{_prefix}/share/zoneinfo
|
rm -rf %{glibc_sysroot}%{_prefix}/share/zoneinfo
|
||||||
|
|
||||||
@ -1533,11 +1469,6 @@ ar cr %{glibc_sysroot}%{_prefix}/%{_lib}/libpthread_nonshared.a
|
|||||||
# - File list with the .so symbolic links for NSS packages.
|
# - File list with the .so symbolic links for NSS packages.
|
||||||
# * compat-libpthread-nonshared.filelist.
|
# * compat-libpthread-nonshared.filelist.
|
||||||
# - File list for compat-libpthread-nonshared subpackage.
|
# - File list for compat-libpthread-nonshared subpackage.
|
||||||
# * debuginfo.filelist
|
|
||||||
# - Files for the glibc debuginfo package.
|
|
||||||
# * debuginfocommon.filelist
|
|
||||||
# - Files for the glibc common debuginfo package.
|
|
||||||
#
|
|
||||||
|
|
||||||
# Create the main file lists. This way we can append to any one of them later
|
# Create the main file lists. This way we can append to any one of them later
|
||||||
# wihtout having to create it. Note these are removed at the start of the
|
# wihtout having to create it. Note these are removed at the start of the
|
||||||
@ -1556,8 +1487,6 @@ touch nss_db.filelist
|
|||||||
touch nss_hesiod.filelist
|
touch nss_hesiod.filelist
|
||||||
touch nss-devel.filelist
|
touch nss-devel.filelist
|
||||||
touch compat-libpthread-nonshared.filelist
|
touch compat-libpthread-nonshared.filelist
|
||||||
touch debuginfo.filelist
|
|
||||||
touch debuginfocommon.filelist
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Master file list, excluding a few things.
|
# Master file list, excluding a few things.
|
||||||
@ -1820,99 +1749,6 @@ echo "%{_prefix}/libexec/glibc-benchtests/validate_benchout.py*" >> benchtests.f
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
echo "%{_libdir}/libpthread_nonshared.a" >> compat-libpthread-nonshared.filelist
|
echo "%{_libdir}/libpthread_nonshared.a" >> compat-libpthread-nonshared.filelist
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# glibc-debuginfocommon, and glibc-debuginfo
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
%if 0%{?_enable_debug_packages}
|
|
||||||
find_debuginfo_args='--strict-build-id -g -i'
|
|
||||||
%ifarch %{debuginfocommonarches}
|
|
||||||
find_debuginfo_args="$find_debuginfo_args \
|
|
||||||
-l common.filelist \
|
|
||||||
-l utils.filelist \
|
|
||||||
-l nscd.filelist \
|
|
||||||
-p '.*/(sbin|libexec)/.*' \
|
|
||||||
-o debuginfocommon.filelist \
|
|
||||||
-l nss_db.filelist -l nss_hesiod.filelist \
|
|
||||||
-l libnsl.filelist -l glibc.filelist \
|
|
||||||
%if %{with benchtests}
|
|
||||||
-l benchtests.filelist
|
|
||||||
%endif
|
|
||||||
"
|
|
||||||
%endif
|
|
||||||
|
|
||||||
/usr/lib/rpm/find-debuginfo.sh $find_debuginfo_args -o debuginfo.filelist
|
|
||||||
|
|
||||||
# List all of the *.a archives in the debug directory.
|
|
||||||
list_debug_archives()
|
|
||||||
{
|
|
||||||
local dir=%{_prefix}/lib/debug%{_libdir}
|
|
||||||
find %{glibc_sysroot}$dir -name "*.a" -printf "$dir/%%P\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
%ifarch %{debuginfocommonarches}
|
|
||||||
|
|
||||||
# Remove the source files from the common package debuginfo.
|
|
||||||
sed -i '\#^%{glibc_sysroot}%{_prefix}/src/debug/#d' debuginfocommon.filelist
|
|
||||||
|
|
||||||
# Create a list of all of the source files we copied to the debug directory.
|
|
||||||
find %{glibc_sysroot}%{_prefix}/src/debug \
|
|
||||||
\( -type d -printf '%%%%dir ' \) , \
|
|
||||||
-printf '%{_prefix}/src/debug/%%P\n' > debuginfocommon.sources
|
|
||||||
|
|
||||||
%ifarch %{biarcharches}
|
|
||||||
|
|
||||||
# Add the source files to the core debuginfo package.
|
|
||||||
cat debuginfocommon.sources >> debuginfo.filelist
|
|
||||||
|
|
||||||
%else
|
|
||||||
|
|
||||||
%ifarch %{ix86}
|
|
||||||
%define basearch i686
|
|
||||||
%endif
|
|
||||||
%ifarch sparc sparcv9
|
|
||||||
%define basearch sparc
|
|
||||||
%endif
|
|
||||||
|
|
||||||
# The auxarches get only these few source files.
|
|
||||||
auxarches_debugsources=\
|
|
||||||
'/(generic|linux|%{basearch}|nptl(_db)?)/|/%{glibcsrcdir}/build|/dl-osinfo\.h'
|
|
||||||
|
|
||||||
# Place the source files into the core debuginfo pakcage.
|
|
||||||
egrep "$auxarches_debugsources" debuginfocommon.sources >> debuginfo.filelist
|
|
||||||
|
|
||||||
# Remove the source files from the common debuginfo package.
|
|
||||||
egrep -v "$auxarches_debugsources" \
|
|
||||||
debuginfocommon.sources >> debuginfocommon.filelist
|
|
||||||
|
|
||||||
%endif
|
|
||||||
|
|
||||||
# Add the list of *.a archives in the debug directory to
|
|
||||||
# the common debuginfo package.
|
|
||||||
list_debug_archives >> debuginfocommon.filelist
|
|
||||||
|
|
||||||
%endif
|
|
||||||
|
|
||||||
# Remove some common directories from the common package debuginfo so that we
|
|
||||||
# don't end up owning them.
|
|
||||||
exclude_common_dirs()
|
|
||||||
{
|
|
||||||
exclude_dirs="%{_prefix}/src/debug"
|
|
||||||
exclude_dirs="$exclude_dirs $(echo %{_prefix}/lib/debug{,/%{_lib},/bin,/sbin})"
|
|
||||||
exclude_dirs="$exclude_dirs $(echo %{_prefix}/lib/debug%{_prefix}{,/%{_lib},/libexec,/bin,/sbin})"
|
|
||||||
|
|
||||||
for d in $(echo $exclude_dirs | sed 's/ /\n/g'); do
|
|
||||||
sed -i "\|^%%dir $d/\?$|d" $1
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
%ifarch %{debuginfocommonarches}
|
|
||||||
exclude_common_dirs debuginfocommon.filelist
|
|
||||||
%endif
|
|
||||||
exclude_common_dirs debuginfo.filelist
|
|
||||||
|
|
||||||
%endif
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Run the glibc testsuite
|
# Run the glibc testsuite
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@ -2264,13 +2100,6 @@ fi
|
|||||||
%files -f libnsl.filelist -n libnsl
|
%files -f libnsl.filelist -n libnsl
|
||||||
/%{_lib}/libnsl.so.1
|
/%{_lib}/libnsl.so.1
|
||||||
|
|
||||||
%if 0%{?_enable_debug_packages}
|
|
||||||
%files debuginfo -f debuginfo.filelist
|
|
||||||
%ifarch %{debuginfocommonarches}
|
|
||||||
%files debuginfo-common -f debuginfocommon.filelist
|
|
||||||
%endif
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if %{with benchtests}
|
%if %{with benchtests}
|
||||||
%files benchtests -f benchtests.filelist
|
%files benchtests -f benchtests.filelist
|
||||||
%endif
|
%endif
|
||||||
@ -2278,6 +2107,9 @@ fi
|
|||||||
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
|
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue May 11 2021 Florian Weimer <fweimer@redhat.com> - 2.33.9000-6
|
||||||
|
- Use distribution mechanism for debuginfo (#1661510, #1886295, #1905611)
|
||||||
|
|
||||||
* Thu May 6 2021 Florian Weimer <fweimer@redhat.com> - 2.33.9000-5
|
* Thu May 6 2021 Florian Weimer <fweimer@redhat.com> - 2.33.9000-5
|
||||||
- Build locales in parallel again
|
- Build locales in parallel again
|
||||||
|
|
||||||
|
63
wrap-find-debuginfo.sh
Normal file
63
wrap-find-debuginfo.sh
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Wrapper script for find-debuginfo.sh
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# wrap-find-debuginfo.sh LDSO-PATH SCRIPT-PATH SCRIPT-ARGS...
|
||||||
|
#
|
||||||
|
# The wrapper saves the original versions of the file at LDSO-PATH,
|
||||||
|
# invokes SCRIPT-PATH with SCRIPT-ARGS, and then restores the
|
||||||
|
# LDSO-PATH file. As a result, LDSO-PATH has unchanged debuginfo even
|
||||||
|
# after debuginfo extraction.
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
ldso_tmp="$(mktemp)"
|
||||||
|
|
||||||
|
cleanup () {
|
||||||
|
rm -f "$ldso_tmp"
|
||||||
|
}
|
||||||
|
trap cleanup 0
|
||||||
|
|
||||||
|
ldso_path="$1"
|
||||||
|
shift
|
||||||
|
script_path="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
# Preserve the original file.
|
||||||
|
cp "$ldso_path" "$ldso_tmp"
|
||||||
|
|
||||||
|
# Run the debuginfo extraction.
|
||||||
|
"$script_path" "$@"
|
||||||
|
|
||||||
|
# Restore the original file.
|
||||||
|
cp "$ldso_tmp" "$ldso_path"
|
||||||
|
|
||||||
|
# Reduce the size of notes. Primarily for annobin.
|
||||||
|
objcopy --merge-notes "$ldso_path"
|
||||||
|
|
||||||
|
# Rewrite the source file paths to match the extracted locations.
|
||||||
|
# First compute the arguments for invoking debugedit. See
|
||||||
|
# find-debuginfo.sh.
|
||||||
|
debug_dest_name="/usr/src/debug"
|
||||||
|
last_arg=
|
||||||
|
while true ; do
|
||||||
|
arg="$1"
|
||||||
|
shift || break
|
||||||
|
case "$arg" in
|
||||||
|
(--unique-debug-src-base)
|
||||||
|
debug_dest_name="/usr/src/debug/$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
(-*)
|
||||||
|
;;
|
||||||
|
(*)
|
||||||
|
last_arg="$arg"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
debug_base_name=${last_arg:-$RPM_BUILD_ROOT}
|
||||||
|
/usr/lib/rpm/debugedit -b "$debug_base_name" -d "$debug_dest_name" -n \
|
||||||
|
$ldso_path
|
||||||
|
|
||||||
|
# Apply single-file DWARF optimization.
|
||||||
|
dwz $ldso_path
|
Loading…
Reference in New Issue
Block a user