summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2017-10-30 14:35:23 -0400
committerAllan McRae <allan@archlinux.org>2017-12-07 15:54:16 +1000
commit8bec63bf92d8dd028aa88dbd5109c314cdb9ebea (patch)
treed46d7122ed1295d2e51d3092406aeee45fd93a1b /scripts
parent259d521e37c4cbcdbdc074e6cf832d233f2a9528 (diff)
downloadpacman-8bec63bf92d8dd028aa88dbd5109c314cdb9ebea.tar.xz
makepkg: tell the compiler to record debugging info for debug packages
In commit 8b0d59b83a60eb504567590346119fe4cd891cad support was added for storing the source files of binaries in debug packages. This made use of the debugedit program which is part of the RPM package manager, which is not very standalone. The same effect can be achieved using -fdebug-prefix-map, an option accepted by both the gcc and clang compilers which modifies how the compiler itself stores the references to the source files rather than requiring us to later edit the produced binaries. This also removes the dependency on external programs like debugedit. As a result of this change, source files will only be effectively added for programs which actually use the exported CFLAGS. This is a reasonable tradeoff as we expect our CFLAGS to be used rather than ignored. Upstream software which do not produce useful debug packages are expected to fix their build systems to respect the environment CFLAGS. As a result of this change, the routine for extracting source filenames from binaries had to be modified to derive the source file from the final debug location, rather than the other way around. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/libmakepkg/tidy/strip.sh.in7
-rw-r--r--scripts/makepkg.sh.in4
2 files changed, 6 insertions, 5 deletions
diff --git a/scripts/libmakepkg/tidy/strip.sh.in b/scripts/libmakepkg/tidy/strip.sh.in
index e88bde78..8a1d6096 100644
--- a/scripts/libmakepkg/tidy/strip.sh.in
+++ b/scripts/libmakepkg/tidy/strip.sh.in
@@ -57,15 +57,12 @@ strip_file() {
# copy source files to debug directory
local f t
- while read -r f; do
- t=${f/"$srcdir"/$dbgsrc}
+ while read -r t; do
+ f=${t/$dbgsrc/"$srcdir"}
mkdir -p "${t%/*}"
cp -- "$f" "$t"
done < <(source_files "$binary")
- # adjust debug symbols to point at sources
- debugedit -b "${srcdir}" -d /usr/src/debug/ -i "$binary" &> /dev/null
-
# copy debug symbols to debug directory
mkdir -p "$dbgdir/${binary%/*}"
objcopy --only-keep-debug "$binary" "$dbgdir/$binary.debug"
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 1191e4ec..e5ebfee4 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -379,6 +379,10 @@ prepare_buildenv() {
fi
if check_option "debug" "y"; then
+ if [[ -v DBGSRCDIR ]]; then
+ DEBUG_CFLAGS+=" -fdebug-prefix-map=$srcdir=$DBGSRCDIR"
+ DEBUG_CXXFLAGS+=" -fdebug-prefix-map=$srcdir=$DBGSRCDIR"
+ fi
CFLAGS+=" $DEBUG_CFLAGS"
CXXFLAGS+=" $DEBUG_CXXFLAGS"
fi