[PATCH 1/1] strip: Use debugedit instead of AWK to parse source files

Xiretza xiretza+archml at xiretza.xyz
Sun Jan 2 13:34:24 UTC 2022


On 02/01/2022 01.28, Morten Linderud wrote:
> From: Morten Linderud <morten at linderud.pw>
> 
> This moves us from the fairly ugly AWK parsing line to debugedit which
> originally comes out of the rpm project.
> 
> The original code has issues parsing anything that was not straight
> C/C++ and languages like Rust or Go would return invalid source code
> files. debugedit handles all these cases better.
> 
> Signed-off-by: Morten Linderud <morten at linderud.pw>
> ---
>   scripts/libmakepkg/tidy/strip.sh.in | 13 ++++++++-----
>   1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/scripts/libmakepkg/tidy/strip.sh.in b/scripts/libmakepkg/tidy/strip.sh.in
> index 92a6fb15..c1d8ee3c 100644
> --- a/scripts/libmakepkg/tidy/strip.sh.in
> +++ b/scripts/libmakepkg/tidy/strip.sh.in
> @@ -36,8 +36,11 @@ build_id() {
>   }
>   
>   source_files() {
> -	LANG=C readelf "$1" --debug-dump 2>/dev/null | \
> -		awk '/DW_AT_name +:/{name=$NF}/DW_AT_comp_dir +:/{{if (name == "<artificial>") next}{if (name !~ /^[<\/]/) {printf "%s/", $NF}}{print name}}'
> +	dbgsrcdir="${DBGSRCDIR:-/usr/src/debug}"
> +	local dbgsrclist="$(mktemp  "${startdir}/dbgsrclist.${binary##*/}.XXXXXXXXX")"
> +	LANG=C debugedit -n -b "${srcdir}" -d "${dbgsrcdir}" -l "${dbgsrclist}" "$1" > /dev/null

-d/--dest-dir actually causes paths embedded in the binary to be *rewritten* from -b/--base-dir. Normally, this shouldn't happen because all paths are already translated by -fdebug-prefix-map before they end up in the binary (making it equivalent to `debugedit --base-dir "${dbgsrcdir}"`) but if there are any $srcdir-based paths left for whatever reason, this modifies the binary.

If this is something we actually want to do here, I think this behaviour is at least worth a source comment.

> +	sort -zu "${dbgsrclist}" | tr '\0' '\n'
> +	rm -f "$dbgsrclist"
>   }
>   
>   strip_file() {
> @@ -58,9 +61,9 @@ strip_file() {
>   		# copy source files to debug directory
>   		local file dest t
>   		while IFS= read -r t; do
> -			file=${t/${dbgsrcdir}/"$srcdir"}
> -			dest="${dbgsrc/"$dbgsrcdir"/}$t"
> -			if ! [[ -f $dest ]]; then
> +			file="${srcdir}/${t}"
> +			dest="${dbgsrc}/${t}"
> +			if [[ -f "$file" ]] && ! [[ -f $dest ]]; then
>   				mkdir -p "${dest%/*}"
>   				cp -- "$file" "$dest"
>   			fi



More information about the pacman-dev mailing list