From 7f2e4e1cba32712fe0608d5ce4c7e156d095e14a Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Jun 27 2012 10:18:19 +0000 Subject: - add support for minidebuginfo generation (#834073) --- diff --git a/rpm-4.10.0-minidebuginfo.patch b/rpm-4.10.0-minidebuginfo.patch new file mode 100644 index 0000000..54c0e32 --- /dev/null +++ b/rpm-4.10.0-minidebuginfo.patch @@ -0,0 +1,98 @@ +--- rpm-4.10.0/macros.in 2012-06-11 11:16:21.216952339 +0200 ++++ rpm-4.10.0/macros.in.minidebug 2012-06-11 11:16:23.686912455 +0200 +@@ -175,7 +175,7 @@ + # the script. See the script for details. + # + %__debug_install_post \ +- %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_dwz_opts} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\ ++ %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_include_minidebuginfo:-m} %{?_find_debuginfo_dwz_opts} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\ + %{nil} + + # Template for debug information sub-package. +@@ -418,6 +418,12 @@ package or when debugging this package.\ + #%_missing_build_ids_terminate_build 1 + + # ++# Include minimal debug information in build binaries. ++# Requires _enable_debug_packages. ++# ++#%_include_minidebuginfo 1 ++ ++# + # Use internal dependency generator rather than external helpers? + %_use_internal_dependency_generator 1 + +--- rpm-4.10.0/scripts/find-debuginfo.sh 2012-06-11 11:16:09.698138273 +0200 ++++ rpm-4.10.0/scripts/find-debuginfo.sh.minidebug 2012-06-11 11:16:13.399078526 +0200 +@@ -2,7 +2,7 @@ + #find-debuginfo.sh - automagically generate debug info and file list + #for inclusion in an rpm spec file. + # +-# Usage: find-debuginfo.sh [--strict-build-id] [-g] [-r] ++# Usage: find-debuginfo.sh [--strict-build-id] [-g] [-r] [-m] + # [-o debugfiles.list] + # [--run-dwz] [--dwz-low-mem-die-limit N] + # [--dwz-max-die-limit N] +@@ -29,6 +29,9 @@ strip_g=false + # with -r arg, pass --reloc-debug-sections to eu-strip. + strip_r=false + ++# with -m arg, add minimal debuginfo to binary. ++include_minidebug=false ++ + # Barf on missing build IDs. + strict=false + +@@ -43,6 +46,9 @@ while [ $# -gt 0 ]; do + -g) + strip_g=true + ;; ++ -m) ++ include_minidebug=true ++ ;; + -o) + if [ -z "${lists[$nout]}" -a -z "${ptns[$nout]}" ]; then + out=$2 +@@ -105,6 +111,32 @@ strip_to_debug() + chmod 444 "$1" || exit + } + ++add_minidebug() ++{ ++ local debuginfo="$1" ++ local binary="$2" ++ ++ local dynsyms=`mktemp` ++ local funcsyms=`mktemp` ++ local keep_symbols=`mktemp` ++ local mini_debuginfo=`mktemp` ++ ++ # Extract the dynamic symbols from the main binary, there is no need to also have these ++ # in the normal symbol table ++ nm -D "$binary" --format=posix --defined-only | awk '{ print $1 }' | sort > "$dynsyms" ++ # Extract all the text (i.e. function) symbols from the debuginfo ++ nm "$debuginfo" --format=posix --defined-only | awk '{ if ($2 == "T" || $2 == "t") print $1 }' | sort > "$funcsyms" ++ # Keep all the function symbols not already in the dynamic symbol table ++ comm -13 "$dynsyms" "$funcsyms" > "$keep_symbols" ++ # Copy the full debuginfo, keeping only a minumal set of symbols and removing some unnecessary sections ++ objcopy -S --remove-section .gdb_index --remove-section .comment --keep-symbols="$keep_symbols" "$debuginfo" "$mini_debuginfo" &> /dev/null ++ #Inject the compressed data into the .gnu_debugdata section of the original binary ++ xz "$mini_debuginfo" ++ mini_debuginfo="${mini_debuginfo}.xz" ++ objcopy --add-section .gnu_debugdata="$mini_debuginfo" "$binary" ++ rm -f "$dynsyms" "$funcsyms" "$keep_symbols" "$mini_debuginfo" ++} ++ + # Make a relative symlink to $1 called $3$2 + shopt -s extglob + link_relative() +@@ -260,6 +292,9 @@ while read nlinks inum f; do + chmod u-w "$f" + fi + ++ $include_minidebug && add_minidebug "${debugfn}" "$f" ++ ++ + if [ -n "$id" ]; then + make_id_link "$id" "$dn/$(basename $f)" + make_id_link "$id" "/usr/lib/debug$dn/$bn" .debug diff --git a/rpm.spec b/rpm.spec index 45632d4..ed439db 100644 --- a/rpm.spec +++ b/rpm.spec @@ -21,7 +21,7 @@ Summary: The RPM package management system Name: rpm Version: %{rpmver} -Release: %{?snapver:0.%{snapver}.}2%{?dist} +Release: %{?snapver:0.%{snapver}.}3%{?dist} Group: System Environment/Base Url: http://www.rpm.org/ Source0: http://rpm.org/releases/rpm-4.10.x/%{name}-%{srcver}.tar.bz2 @@ -53,6 +53,8 @@ Patch302: rpm-4.7.1-geode-i686.patch Patch304: rpm-4.9.1.1-ld-flags.patch # Compressed debuginfo support (#833311) Patch305: rpm-4.10.0-dwz-debuginfo.patch +# Minidebuginfo support (#834073) +Patch306: rpm-4.10.0-minidebuginfo.patch # Temporary Patch to provide support for updates Patch400: rpm-4.9.1.2-rpmlib-filesystem-check.patch @@ -220,6 +222,7 @@ packages on a system. %patch302 -p1 -b .geode %patch304 -p1 -b .ldflags %patch305 -p1 -b .dwz-debuginfo +%patch306 -p1 -b .minidebuginfo %patch400 -p1 -b .rpmlib-filesystem-check @@ -442,6 +445,9 @@ exit 0 %doc COPYING doc/librpm/html/* %changelog +* Wed Jun 27 2012 Panu Matilainen - 4.10.0-3 +- add support for minidebuginfo generation (#834073) + * Mon Jun 25 2012 Panu Matilainen - 4.10.0-2 - add dwarf compression support to debuginfo generation (#833311)