[pacman-dev] Pacman split debug info symbol path

Steven Noonan steven at uplinklabs.net
Sat Mar 29 13:36:29 EDT 2014


Hi folks,

I think the directory Pacman is using for the split-out debug symbols
is incorrect. This appears to be needed:

commit 61ed104abf95ac38e7d317c760807f308ea90555
Author: Steven Noonan <steven at uplinklabs.net>
Date:   Wed Feb 12 05:44:16 2014 -0800

    makepkg: use dash instead of underscore in /usr/lib/debug/.build-id

    Signed-off-by: Steven Noonan <steven at uplinklabs.net>

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 027fcc3..7e663af 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1525,7 +1525,7 @@ strip_file() {

                # has this file already been stripped
                if [[ -n "$bid" ]]; then
-                       if [[ -f
"$dbgdir/.build_id/${bid:0:2}/${bid:2}.debug" ]]; then
+                       if [[ -f
"$dbgdir/.build-id/${bid:0:2}/${bid:2}.debug" ]]; then
                                return
                        fi
                elif [[ -f "$dbgdir/$binary.debug" ]]; then
@@ -1546,15 +1546,15 @@ strip_file() {

                if [[ -n "$bid" ]]; then
                        local target
-                       mkdir -p "$dbgdir/.build_id/${bid:0:2}"
+                       mkdir -p "$dbgdir/.build-id/${bid:0:2}"

                        target="../../../../../${binary#./}"
                        target="${target/..\/..\/usr\/lib\/}"
                        target="${target/..\/usr\/}"
-                       ln -s "$target" "$dbgdir/.build_id/${bid:0:2}/${bid:2}"
+                       ln -s "$target" "$dbgdir/.build-id/${bid:0:2}/${bid:2}"

                        target="../../${binary#./}.debug"
-                       ln -s "$target"
"$dbgdir/.build_id/${bid:0:2}/${bid:2}.debug"
+                       ln -s "$target"
"$dbgdir/.build-id/${bid:0:2}/${bid:2}.debug"
                fi
        fi

To justify this change, I can't find any tools that actually look in
'build_id' (with an underscore) when searching for symbols.

For example, perf does this (lines 101, 105):

https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/tools/perf/util/build-id.c#n92

GDB also looks in '.build-id' (lines 83, 102):

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/build-id.c;h=491900b3e545c72325a54fc79847b8872fa63aae;hb=HEAD#l73

OProfile, same issue (lines 93, 104):

http://sourceforge.net/p/oprofile/oprofile/ci/master/tree/libutil++/bfd_support.cpp

I noticed tool breakage back when I submitted the kernel module
split+debug patch, but kept the patch to myself because I figured I
must have been missing the rationale for the difference, but I've been
so far unable to find any.

- Steven


More information about the pacman-dev mailing list