From: Keith Seitz <keiths@redhat.com>
To: debugedit@sourceware.org
Subject: [PATCH] find-debuginfo.sh: Exit with real exit status in parallel jobs
Date: Fri, 16 Aug 2024 11:54:20 -0700 [thread overview]
Message-ID: <4120f4aea4b7f2cb5c30f55c19ae63a1e710df34.1723834460.git.keiths@redhat.com> (raw)
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 | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/scripts/find-debuginfo.in b/scripts/find-debuginfo.in
index ae0818f..f40e566 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")
@@ -587,7 +596,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
base-commit: 630644cd7ce3ee068f5c105ad42adaa5a6f21287
--
2.45.2
next reply other threads:[~2024-08-16 18:54 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-16 18:54 Keith Seitz [this message]
2024-08-17 21:20 ` Mark Wielaard
2024-08-19 19:51 ` Keith Seitz
2024-08-20 14:51 ` Mark Wielaard
2024-08-20 20:26 ` Keith Seitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4120f4aea4b7f2cb5c30f55c19ae63a1e710df34.1723834460.git.keiths@redhat.com \
--to=keiths@redhat.com \
--cc=debugedit@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).