summaryrefslogtreecommitdiff
path: root/packaging/finddebuginfo.diff
diff options
context:
space:
mode:
authorKim Kibum <kb0929.kim@samsung.com>2012-05-21 17:49:08 +0900
committerKim Kibum <kb0929.kim@samsung.com>2012-05-21 17:49:08 +0900
commitdec48cfa66e17ba4a7e50c92cb24b913289feb12 (patch)
treee1f48cd5cabb40a1d604b36949ff072d01267cb5 /packaging/finddebuginfo.diff
parentb7a3bffb8e0341b7e4ef69def268bca3a7f279ff (diff)
downloadrpm-dec48cfa66e17ba4a7e50c92cb24b913289feb12.tar.gz
rpm-dec48cfa66e17ba4a7e50c92cb24b913289feb12.tar.bz2
rpm-dec48cfa66e17ba4a7e50c92cb24b913289feb12.zip
Upload Tizen:Base source
Diffstat (limited to 'packaging/finddebuginfo.diff')
-rw-r--r--packaging/finddebuginfo.diff119
1 files changed, 119 insertions, 0 deletions
diff --git a/packaging/finddebuginfo.diff b/packaging/finddebuginfo.diff
new file mode 100644
index 0000000..3d1245e
--- /dev/null
+++ b/packaging/finddebuginfo.diff
@@ -0,0 +1,119 @@
+--- ./scripts/find-debuginfo.sh.orig 2010-12-03 12:11:57.000000000 +0000
++++ ./scripts/find-debuginfo.sh 2011-05-11 14:46:18.000000000 +0000
+@@ -127,6 +127,20 @@ debug_link()
+ link_relative "$t" "$l" "$RPM_BUILD_ROOT"
+ }
+
++# Compare two binaries but ignore the .note.gnu.build-id section
++elfcmp()
++{
++ local tmp1=$(mktemp -t ${1##*/}.XXXXXX)
++ local tmp2=$(mktemp -t ${2##*/}.XXXXXX)
++
++ objcopy -R .note.gnu.build-id -R .gnu_debuglink $1 $tmp1
++ objcopy -R .note.gnu.build-id -R .gnu_debuglink $2 $tmp2
++ cmp -s $tmp1 $tmp2
++ local res=$?
++ rm -f $tmp1 $tmp2
++ return $res
++}
++
+ # Make a build-id symlink for id $1 with suffix $3 to file $2.
+ make_id_link()
+ {
+@@ -145,7 +159,7 @@ make_id_link()
+ local other=$(readlink -m "$root_idfile")
+ other=${other#$RPM_BUILD_ROOT}
+ if cmp -s "$root_idfile" "$RPM_BUILD_ROOT$file" ||
+- eu-elfcmp -q "$root_idfile" "$RPM_BUILD_ROOT$file" 2> /dev/null; then
++ elfcmp "$root_idfile" "$RPM_BUILD_ROOT$file" ; then
+ # Two copies. Maybe one has to be setuid or something.
+ echo >&2 "*** WARNING: identical binaries are copied, not linked:"
+ echo >&2 " $file"
+@@ -174,12 +188,18 @@ strict_error=ERROR
+ $strict || strict_error=WARNING
+
+ # Strip ELF binaries
+-find "$RPM_BUILD_ROOT" ! -path "${debugdir}/*.debug" -type f \
+- \( -perm -0100 -or -perm -0010 -or -perm -0001 \) \
+- -print |
+-file -N -f - | sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped/\1/p' |
+-xargs --no-run-if-empty stat -c '%h %D_%i %n' |
++find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z |
++xargs --no-run-if-empty -0 stat -c '%h %D_%i %n' |
+ while read nlinks inum f; do
++ case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in
++ *debuglink*) continue ;;
++ *debug*) ;;
++ *gnu.version*)
++ echo "WARNING: "`echo $f | sed -e "s,^$RPM_BUILD_ROOT/*,/,"`" is already stripped!"
++ continue
++ ;;
++ *) continue ;;
++ esac
+ get_debugfn "$f"
+ [ -f "${debugfn}" ] && continue
+
+@@ -200,8 +220,11 @@ while read nlinks inum f; do
+ fi
+
+ echo "extracting debug info from $f"
+- id=$(/usr/lib/rpm/debugedit -b "$RPM_BUILD_DIR" -d /usr/src/debug \
+- -i -l "$SOURCEFILE" "$f") || exit
++ mode=$(stat -c %a "$f")
++ chmod +w "$f"
++ id=$($(DEBUGEDIT=$(which debugedit 2>/dev/null); \
++ echo ${DEBUGEDIT:-/usr/lib/rpm/debugedit}) -b "$RPM_BUILD_DIR" \
++ -d /usr/src/debug -i -l "$SOURCEFILE" "$f") || exit
+ if [ -z "$id" ]; then
+ echo >&2 "*** ${strict_error}: No build ID note found in $f"
+ $strict && exit 2
+@@ -218,13 +241,25 @@ while read nlinks inum f; do
+ esac
+
+ mkdir -p "${debugdn}"
+- if test -w "$f"; then
+- strip_to_debug "${debugfn}" "$f"
+- else
+- chmod u+w "$f"
+- strip_to_debug "${debugfn}" "$f"
+- chmod u-w "$f"
+- fi
++ objcopy --only-keep-debug $f $debugfn || :
++ (
++ shopt -s extglob
++ strip_option="--strip-all"
++ case "$f" in
++ *.ko)
++ strip_option="--strip-debug" ;;
++ *$STRIP_KEEP_SYMTAB*)
++ if test -n "$STRIP_KEEP_SYMTAB"; then
++ strip_option="--strip-debug"
++ fi
++ ;;
++ esac
++ if test "$NO_DEBUGINFO_STRIP_DEBUG" = true ; then
++ strip_option=
++ fi
++ objcopy --add-gnu-debuglink=$debugfn -R .comment -R .GCC.command.line $strip_option $f
++ chmod $mode $f
++ ) || :
+
+ if [ -n "$id" ]; then
+ make_id_link "$id" "$dn/$(basename $f)"
+@@ -253,12 +288,14 @@ if [ -s "$SOURCEFILE" ]; then
+ # stupid cpio creates new directories in mode 0700, fixup
+ find "${RPM_BUILD_ROOT}/usr/src/debug" -type d -print0 |
+ xargs --no-run-if-empty -0 chmod a+rx
++ find "${RPM_BUILD_ROOT}/usr/src/debug" -type f -print0 |
++ xargs --no-run-if-empty -0 chmod a+r
+ fi
+
+ if [ -d "${RPM_BUILD_ROOT}/usr/lib" -o -d "${RPM_BUILD_ROOT}/usr/src" ]; then
+ ((nout > 0)) ||
+ test ! -d "${RPM_BUILD_ROOT}/usr/lib" ||
+- (cd "${RPM_BUILD_ROOT}/usr/lib"; find debug -type d) |
++ (cd "${RPM_BUILD_ROOT}/usr/lib"; test ! -d debug || find debug -type d) |
+ sed 's,^,%dir /usr/lib/,' >> "$LISTFILE"
+
+ (cd "${RPM_BUILD_ROOT}/usr"