[pacman-dev] [PATCH 2/2] Provide source files for useful debug packages

2016-12-04 Thread Allan McRae
Debug packages are fairly useless currently because the soucre files needed
for stepping through code etc are not packaged with them. This patch adds the
needed source files to the debug package and adjusts the debug info to look at
the /usr/src/debug/ directory for them rather than the build location.  This
requires using the "debugedit" program which is provided as part of the RPM
sources.

Signed-off-by: Allan McRae 
---
 scripts/libmakepkg/tidy/strip.sh.in | 21 -
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/scripts/libmakepkg/tidy/strip.sh.in 
b/scripts/libmakepkg/tidy/strip.sh.in
index 9baed9f..ff75cb4 100644
--- a/scripts/libmakepkg/tidy/strip.sh.in
+++ b/scripts/libmakepkg/tidy/strip.sh.in
@@ -35,6 +35,11 @@ build_id() {
LANG=C readelf -n $1 | sed -n '/Build ID/ { s/.*: //p; q; }'
 }
 
+source_files() {
+   LANG=C readelf $1 --debug-dump | \
+   awk '/DW_AT_name +:/{name=$8}/DW_AT_comp_dir +:/{print $8 "/" 
name}'
+}
+
 strip_file() {
local binary=$1; shift
 
@@ -50,6 +55,18 @@ strip_file() {
return
fi
 
+   # copy source files to debug directory
+   local f t
+   for f in $(source_files "$binary"); do
+   t=${f/$srcdir/$dbgsrc}
+   mkdir -p "${t%/*}"
+   cp "$f" "$t"
+   done
+
+   # 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"
objcopy --add-gnu-debuglink="$dbgdir/${binary#/}.debug" 
"$binary"
@@ -88,8 +105,10 @@ tidy_strip() {
[[ -z ${STRIP_STATIC+x} ]] && STRIP_STATIC="-S"
 
if check_option "debug" "y"; then
+

dbgdir="$pkgdirbase/$pkgbase-@DEBUGSUFFIX@/usr/lib/debug"
-   mkdir -p "$dbgdir"
+   
dbgsrc="$pkgdirbase/$pkgbase-@DEBUGSUFFIX@/usr/src/debug"
+   mkdir -p "$dbgdir" "$dbgsrc"
fi
 
local binary strip_flags
-- 
2.10.2


Re: [pacman-dev] [PATCH 2/2] Provide source files for useful debug packages

2016-12-06 Thread Dave Reisner
On Mon, Dec 05, 2016 at 03:02:10PM +1000, Allan McRae wrote:
> Debug packages are fairly useless currently because the soucre files needed
> for stepping through code etc are not packaged with them. This patch adds the
> needed source files to the debug package and adjusts the debug info to look at
> the /usr/src/debug/ directory for them rather than the build location.  This
> requires using the "debugedit" program which is provided as part of the RPM
> sources.

...will pacman provide a copy of debugedit?

> Signed-off-by: Allan McRae 
> ---
>  scripts/libmakepkg/tidy/strip.sh.in | 21 -
>  1 file changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/scripts/libmakepkg/tidy/strip.sh.in 
> b/scripts/libmakepkg/tidy/strip.sh.in
> index 9baed9f..ff75cb4 100644
> --- a/scripts/libmakepkg/tidy/strip.sh.in
> +++ b/scripts/libmakepkg/tidy/strip.sh.in
> @@ -35,6 +35,11 @@ build_id() {
>   LANG=C readelf -n $1 | sed -n '/Build ID/ { s/.*: //p; q; }'
>  }
>  
> +source_files() {
> + LANG=C readelf $1 --debug-dump | \

"$1"

> + awk '/DW_AT_name +:/{name=$8}/DW_AT_comp_dir +:/{print $8 "/" 
> name}'
> +}
> +
>  strip_file() {
>   local binary=$1; shift
>  
> @@ -50,6 +55,18 @@ strip_file() {
>   return
>   fi
>  
> + # copy source files to debug directory
> + local f t
> + for f in $(source_files "$binary"); do

http://mywiki.wooledge.org/DontReadLinesWithFor

while read -r f; do
  ...
done < <(source_files "$binary")

> + t=${f/$srcdir/$dbgsrc}

t=${f/"$srcdir"/$dbgsrc}

> + mkdir -p "${t%/*}"
> + cp "$f" "$t"

cp -- "$f" "$t"

> + done
> +
> + # 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"
>   objcopy --add-gnu-debuglink="$dbgdir/${binary#/}.debug" 
> "$binary"
> @@ -88,8 +105,10 @@ tidy_strip() {
>   [[ -z ${STRIP_STATIC+x} ]] && STRIP_STATIC="-S"
>  
>   if check_option "debug" "y"; then
> +
>   
> dbgdir="$pkgdirbase/$pkgbase-@DEBUGSUFFIX@/usr/lib/debug"
> - mkdir -p "$dbgdir"
> + 
> dbgsrc="$pkgdirbase/$pkgbase-@DEBUGSUFFIX@/usr/src/debug"
> + mkdir -p "$dbgdir" "$dbgsrc"
>   fi
>  
>   local binary strip_flags
> -- 
> 2.10.2


Re: [pacman-dev] [PATCH 2/2] Provide source files for useful debug packages

2016-12-06 Thread Allan McRae
On 07/12/16 06:17, Dave Reisner wrote:
>> This
>> > requires using the "debugedit" program which is provided as part of the RPM
>> > sources.
> ...will pacman provide a copy of debugedit?
> 

I did not intend to.  I have packaged it for the Arch repos, but it
requires librpmio meaning we would need to pull in a large chunk of the
RPM sources...