On 02/01/2022 01.28, Morten Linderud wrote:
From: Morten Linderud <[email protected]>

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 <[email protected]>
---
  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

Reply via email to