[pacman-dev] [PATCH] makepkg: tell the compiler to record debugging info for debug packages
Allan McRae
allan at archlinux.org
Sun Oct 8 13:53:14 UTC 2017
On 08/10/17 16:38, Eli Schwartz wrote:
> 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.
>
> Signed-off-by: Eli Schwartz <eschwartz at archlinux.org>
This patch is doing many things at once.
1) Add the DBGSRCDIR configuration option
2) Add -fdebug-prefix-map
3) What ever the changes in the while loop are...
(at first glance they seem wrong)
Please submit as separate patches.
> ---
> doc/makepkg.conf.5.txt | 6 ++++++
> etc/makepkg.conf.in | 2 ++
> scripts/libmakepkg/tidy/strip.sh.in | 11 ++++-------
> scripts/makepkg.sh.in | 4 ++++
> 4 files changed, 16 insertions(+), 7 deletions(-)
>
> diff --git a/doc/makepkg.conf.5.txt b/doc/makepkg.conf.5.txt
> index d61858ca..ca74c2dd 100644
> --- a/doc/makepkg.conf.5.txt
> +++ b/doc/makepkg.conf.5.txt
> @@ -215,6 +215,12 @@ Options
> instruct makepkg which files to remove from the package. This is
> useful for index files that are added by multiple packages.
>
> +**DBGSRCDIR=**"/usr/src/debug"::
> + If `strip` and `debug` are specified in the `OPTIONS` array, this variable
> + will instruct makepkg where to place source files for installed binaries.
> + The compiler will be instructed to link this directory for the debugger
> + search path.
> +
> **PKGDEST=**"/path/to/directory"::
> If this value is not set, packages will, by default, be placed in the
> current directory (location of the linkman:PKGBUILD[5]). Many people
> diff --git a/etc/makepkg.conf.in b/etc/makepkg.conf.in
> index d2beef50..33c4e92d 100644
> --- a/etc/makepkg.conf.in
> +++ b/etc/makepkg.conf.in
> @@ -99,6 +99,8 @@ MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
> DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
> #-- Files to be removed from all packages (if purge is specified)
> PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
> +#-- Directory, if any, to store source code in for debug packages
> +DBGSRCDIR="/usr/src/debug"
>
> #########################################################################
> # PACKAGE OUTPUT
> diff --git a/scripts/libmakepkg/tidy/strip.sh.in b/scripts/libmakepkg/tidy/strip.sh.in
> index 76562808..49e8aacd 100644
> --- a/scripts/libmakepkg/tidy/strip.sh.in
> +++ b/scripts/libmakepkg/tidy/strip.sh.in
> @@ -58,14 +58,11 @@ strip_file() {
> # copy source files to debug directory
> local f t
> while read -r f; do
> - t=${f/"$srcdir"/$dbgsrc}
> - mkdir -p "${t%/*}"
> - cp -- "$f" "$t"
> + t=${f/$dbgsrc/"$srcdir"}
> + mkdir -p "${f%/*}"
> + cp -- "$t" "$f"
> 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"
> @@ -107,7 +104,7 @@ tidy_strip() {
> if check_option "debug" "y"; then
>
> dbgdir="$pkgdirbase/$pkgbase- at DEBUGSUFFIX@/usr/lib/debug"
> - dbgsrc="$pkgdirbase/$pkgbase- at DEBUGSUFFIX@/usr/src/debug"
> + dbgsrc="$pkgdirbase/$pkgbase- at DEBUGSUFFIX@$DBGSRCDIR"
> mkdir -p "$dbgdir" "$dbgsrc"
> fi
>
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index b25e4106..b74da0a5 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
>
More information about the pacman-dev
mailing list