108 lines
3.3 KiB
Diff
108 lines
3.3 KiB
Diff
From dfe1f7ff30f4e0be538835fca1e6348723ea7aa7 Mon Sep 17 00:00:00 2001
|
|
From: Keith Seitz <keiths@redhat.com>
|
|
Date: Fri, 16 Aug 2024 11:54:20 -0700
|
|
Subject: [PATCH] find-debuginfo.sh: Exit with real exit status in parallel
|
|
jobs
|
|
|
|
Currently, when the script is executed in parallel (-jN), the
|
|
resulting exit status will always be 0.
|
|
|
|
The script execs an appropriate number of clones of itself, calling
|
|
run_job to run the actual workload. This then calls do_file(), saving
|
|
the exit status into "res.$jobid".
|
|
|
|
In do_file(), though, if an error occurs, exit is called. This causes
|
|
the entire exec'd shell to exit with status 0 (since there are almost
|
|
always echo calls as the last executed statement). The real exit
|
|
status is therefor never written to the "res.$jobid" files by run_job().
|
|
|
|
The simple solution is to use 'return' instead of 'exit'. A number
|
|
of minor adjustments are also made to propagate this properly so that
|
|
it is reported as the correct exit status.
|
|
|
|
While at it, I've incorporated a patch for find-debuginfo/30505.
|
|
Using this patch and another patch to the RPM package (submitted as
|
|
github issue #3215), failures of gdb-add-index.sh will now properly fail
|
|
the build instead of being swallowed. It should be much easier for
|
|
developers to figure out why their builds have failed should gdb crash.
|
|
|
|
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30505
|
|
Signed-off-by: Keith Seitz <keiths@redhat.com>
|
|
---
|
|
scripts/find-debuginfo.in | 23 ++++++++++++++++++-----
|
|
1 file changed, 18 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/scripts/find-debuginfo.in b/scripts/find-debuginfo.in
|
|
index ae0818f..5998b9d 100755
|
|
--- a/scripts/find-debuginfo.in
|
|
+++ b/scripts/find-debuginfo.in
|
|
@@ -477,16 +477,20 @@ do_file()
|
|
-l "$SOURCEFILE" "$f") || exit
|
|
if [ -z "$id" ]; then
|
|
echo >&2 "*** ${strict_error}: No build ID note found in $f"
|
|
- $strict && exit 2
|
|
+ $strict && return 2
|
|
fi
|
|
|
|
# Add .gdb_index if requested.
|
|
if $include_gdb_index; then
|
|
if type gdb-add-index >/dev/null 2>&1; then
|
|
- gdb-add-index "$f"
|
|
+ gdb-add-index "$f" || {
|
|
+ status=$?
|
|
+ echo >&2 "*** ERROR:: GDB exited with exit status $status during index generation"
|
|
+ return 2
|
|
+ }
|
|
else
|
|
echo >&2 "*** ERROR: GDB index requested, but no gdb-add-index installed"
|
|
- exit 2
|
|
+ return 2
|
|
fi
|
|
fi
|
|
|
|
@@ -547,6 +551,7 @@ run_job()
|
|
{
|
|
local jobid=$1 filenum
|
|
local SOURCEFILE=$temp/debugsources.$jobid ELFBINSFILE=$temp/elfbins.$jobid
|
|
+ local res=0
|
|
|
|
>"$SOURCEFILE"
|
|
>"$ELFBINSFILE"
|
|
@@ -558,8 +563,12 @@ run_job()
|
|
break
|
|
fi
|
|
do_file $(sed -n "$(( 0x$filenum )) p" "$temp/primary")
|
|
+ res=$?
|
|
+ if [ $res != 0 ]; then
|
|
+ break
|
|
+ fi
|
|
done
|
|
- echo 0 >"$temp/res.$jobid"
|
|
+ echo $res >"$temp/res.$jobid"
|
|
}
|
|
|
|
n_files=$(wc -l <"$temp/primary")
|
|
@@ -570,6 +579,10 @@ fi
|
|
if [ $n_jobs -le 1 ]; then
|
|
while read nlinks inum f; do
|
|
do_file "$nlinks" "$inum" "$f"
|
|
+ res=$?
|
|
+ if [ "$res" != "0" ]; then
|
|
+ exit $res
|
|
+ fi
|
|
done <"$temp/primary"
|
|
else
|
|
for ((i = 1; i <= n_files; i++)); do
|
|
@@ -587,7 +600,7 @@ else
|
|
test -f "$f" || continue
|
|
res=$(< "$f")
|
|
if [ "$res" != "0" ]; then
|
|
- exit 1
|
|
+ exit $res
|
|
fi
|
|
done
|
|
# List of sources may have lots of duplicates. A kernel build was seen
|
|
--
|
|
2.33.0
|
|
|