You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.6 KiB
98 lines
3.6 KiB
--- 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
|
|
|