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...


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