status=`expr $status + $?`
+get_core_dumps() {
+ find "$systest/" \( -name 'core*' -or -name '*.core' \) ! -name '*.gz' ! -name '*.txt' | sort
+}
+
if [ $status != 0 ]; then
echofail "R:$systest:FAIL"
# Do not clean up - we need the evidence.
else
- core_dumps="`find $systest/ -name 'core*' -or -name '*.core' | sort | tr '\n' ' '`"
- assertion_failures=`find $systest/ -name named.run | xargs grep "assertion failure" | wc -l`
- sanitizer_summaries=`find $systest/ -type f | grep '^[-a-zA-Z0-9./_]*$' | xargs grep "SUMMARY: .*Sanitizer" | wc -l`
+ core_dumps=$(get_core_dumps | tr '\n' ' ')
+ assertion_failures=$(find "$systest/" -name named.run -print0 | xargs -0 grep "assertion failure" | wc -l)
+ sanitizer_summaries=$(find "$systest/" -name 'tsan.*' | wc -l)
if [ -n "$core_dumps" ]; then
echoinfo "I:$systest:Test claims success despite crashes: $core_dumps"
echofail "R:$systest:FAIL"
# Do not clean up - we need the evidence.
- find "$systest/" -name 'core*' -or -name '*.core' | while read -r coredump; do
+ get_core_dumps | while read -r coredump; do
SYSTESTDIR="$systest"
- echoinfo "D:$systest:backtrace from $coredump start"
- binary="`gdb --batch --core="$coredump" | sed -ne "s/Core was generated by .//;s/ .*'.$//p;"`"
- "$TOP/libtool" --mode=execute gdb \
- --batch \
- --command=run.gdb \
- --core="$coredump" \
- -- \
- "$binary"
- echoinfo "D:$systest:backtrace from $coredump end"
+ echoinfo "D:$systest:backtrace from $coredump:"
+ echoinfo "D:$systest:--------------------------------------------------------------------------------"
+ binary=$(gdb --batch --core="$coredump" 2>/dev/null | sed -ne "s/Core was generated by \`//;s/ .*'.$//p;")
+ "${TOP}/libtool" --mode=execute gdb \
+ -batch \
+ -ex bt \
+ -core="$coredump" \
+ -- \
+ "$binary" 2>/dev/null | sed -n '/^Core was generated by/,$p' | cat_d
+ echoinfo "D:$systest:--------------------------------------------------------------------------------"
+ coredump_backtrace=$(basename "${coredump}")-backtrace.txt
+ echoinfo "D:$systest:full backtrace from $coredump saved in $coredump_backtrace"
+ "${TOP}/libtool" --mode=execute gdb \
+ -batch \
+ -command=run.gdb \
+ -core="$coredump" \
+ -- \
+ "$binary" > "$coredump_backtrace" 2>&1
+ echoinfo "D:$systest:core dump $coredump archived as $coredump.gz"
+ gzip -1 "${coredump}"
done
- elif [ $assertion_failures -ne 0 ]; then
+ elif [ "$assertion_failures" -ne 0 ]; then
echoinfo "I:$systest:Test claims success despite $assertion_failures assertion failure(s)"
echofail "R:$systest:FAIL"
# Do not clean up - we need the evidence.
- elif [ $sanitizer_summaries -ne 0 ]; then
+ elif [ "$sanitizer_summaries" -ne 0 ]; then
echoinfo "I:$systest:Test claims success despite $sanitizer_summaries sanitizer reports(s)"
echofail "R:$systest:FAIL"
else
echopass "R:$systest:PASS"
- if $clean
- then
+ if $clean; then
( cd $systest && $SHELL clean.sh "$@" )
- if test -d ../../../.git
- then
+ if test -d ../../../.git; then
git status -su --ignored $systest 2>/dev/null | \
sed -n -e 's|^?? \(.*\)|I:file \1 not removed|p' \
-e 's|^!! \(.*/named.run\)$|I:file \1 not removed|p' \