Files
mckernel/test/issues/1219/C1219.sh
Masamichi Takagi 11ef2f8092 coredump: Support threads
Change-Id: Id75ade6c87b15abcff5d772d90f77950376a32c1
Refs: #1219
2019-08-09 04:00:15 +00:00

286 lines
7.7 KiB
Bash
Executable File

#!/bin/sh
USELTP=0
USEOSTEST=0
. ../../common.sh
TP_SUB=./segv_in_sub
TP_MAIN=./segv_in_main
NUM_THREADS=6
arch=`uname -p`
# clean corefils
rm ./mccore* ./core.*
ulimit_c_bk=`ulimit -Sc`
# set ulimit -c unlimited to dump core
ulimit -c unlimited
${MCEXEC} ./segv_in_sub
# Find mccore*
CORE=`ls -1 | grep "^mccore"`
if [ ! -z $CORE ]; then
echo "[ OK ] core for McKernel process found"
else
echo "[ NG ] core for McKernel process not found"
exit 1
fi
issue=1219
tid=01
echo "*** C${issue}T${tid} start *******************************"
echo "** Check number of threads"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
num=`grep "LWP" ./C${issue}T${tid}.txt | wc -l`
if [ ${num} -eq ${NUM_THREADS} ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""
tid=02
echo "*** C${issue}T${tid} start *******************************"
echo "** Check backtrace"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
num=`grep "^#[0-9]*\s* 0x[0-9]*" ./C${issue}T${tid}.txt | wc -l`
if [ ${num} -gt 0 ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""
tid=03
echo "*** C${issue}T${tid} start *******************************"
echo "** Check info register"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
if [ "${arch}" == "x86_64" ]; then
num=`grep "^rip\s*0x.*" ./C${issue}T${tid}.txt | wc -l`
elif [ "${arch}" == "aarch64" ]; then
num=`grep "^pc\s*0x.*" ./C${issue}T${tid}.txt | wc -l`
else
num=0
fi
if [ ${num} -gt 0 ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""
tid=04
echo "*** C${issue}T${tid} start *******************************"
echo "** Check switching thread"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
num=`grep "Switching to thread ${NUM_THREADS}" ./C${issue}T${tid}.txt | wc -l`
if [ ${num} -gt 0 ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""
tid=05
echo "*** C${issue}T${tid} start *******************************"
echo "** Check backtrace after switching thread"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
num=`grep "^#[0-9]*\s* 0x[0-9]*" ./C${issue}T${tid}.txt | wc -l`
if [ ${num} -gt 0 ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""
tid=06
echo "*** C${issue}T${tid} start *******************************"
echo "** Check info register after switching thread"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
if [ "${arch}" == "x86_64" ]; then
num=`grep "^rip\s*0x.*" ./C${issue}T${tid}.txt | wc -l`
elif [ "${arch}" == "aarch64" ]; then
num=`grep "^pc\s*0x.*" ./C${issue}T${tid}.txt | wc -l`
else
num=0
fi
if [ ${num} -gt 0 ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""
# clean corefils
rm ./mccore* ./core.*
${MCEXEC} ./segv_in_main
# Find mccore*
CORE=`ls -1 | grep "^mccore"`
if [ ! -z $CORE ]; then
echo "[ OK ] core for McKernel process found"
else
echo "[ NG ] core for McKernel process not found"
exit 1
fi
tid=07
echo "*** C${issue}T${tid} start *******************************"
echo "** Check number of threads"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
num=`grep "LWP" ./C${issue}T${tid}.txt | wc -l`
if [ ${num} -eq ${NUM_THREADS} ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""
tid=08
echo "*** C${issue}T${tid} start *******************************"
echo "** Check backtrace"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
num=`grep "^#[0-9]*\s* 0x[0-9]*" ./C${issue}T${tid}.txt | wc -l`
if [ ${num} -gt 0 ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""
tid=09
echo "*** C${issue}T${tid} start *******************************"
echo "** Check info register"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
if [ "${arch}" == "x86_64" ]; then
num=`grep "^rip\s*0x.*" ./C${issue}T${tid}.txt | wc -l`
elif [ "${arch}" == "aarch64" ]; then
num=`grep "^pc\s*0x.*" ./C${issue}T${tid}.txt | wc -l`
else
num=0
fi
if [ ${num} -gt 0 ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""
tid=10
echo "*** C${issue}T${tid} start *******************************"
echo "** Check switching thread"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
num=`grep "Switching to thread ${NUM_THREADS}" ./C${issue}T${tid}.txt | wc -l`
if [ ${num} -gt 0 ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""
tid=11
echo "*** C${issue}T${tid} start *******************************"
echo "** Check backtrace after switching thread"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
num=`grep "^#[0-9]*\s* 0x[0-9]*" ./C${issue}T${tid}.txt | wc -l`
if [ ${num} -gt 0 ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""
tid=12
echo "*** C${issue}T${tid} start *******************************"
echo "** Check info register after switching thread"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
if [ "${arch}" == "x86_64" ]; then
num=`grep "^rip\s*0x.*" ./C${issue}T${tid}.txt | wc -l`
elif [ "${arch}" == "aarch64" ]; then
num=`grep "^pc\s*0x.*" ./C${issue}T${tid}.txt | wc -l`
else
num=0
fi
if [ ${num} -gt 0 ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""
# clean corefils
rm ./mccore* ./core.*
${MCEXEC} ./segv_after_join
# restore ulimit -c
ulimit -c ${ulimit_c_bk}
# Find mccore*
CORE=`ls -1 | grep "^mccore"`
if [ ! -z $CORE ]; then
echo "[ OK ] core for McKernel process found"
else
echo "[ NG ] core for McKernel process not found"
exit 1
fi
tid=13
echo "*** C${issue}T${tid} start *******************************"
echo "** Check number of threads"
gdb ${TP_SUB} --core=./${CORE} -x ./cmd/C${issue}T${tid}.cmd 2>/dev/null \
| sed -n '/TESTOUT_START/,$p' | tee ./C${issue}T${tid}.txt
num=`grep "LWP" ./C${issue}T${tid}.txt | wc -l`
if [ ${num} -eq 1 ]; then
echo "*** C${issue}T${tid} PASSED ******************************"
else
echo "*** C${issue}T${tid} FAILED ******************************"
fi
echo ""