summaryrefslogtreecommitdiffstats
path: root/tools/guest-diag/run_cycle.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/guest-diag/run_cycle.sh')
-rwxr-xr-xtools/guest-diag/run_cycle.sh16
1 files changed, 14 insertions, 2 deletions
diff --git a/tools/guest-diag/run_cycle.sh b/tools/guest-diag/run_cycle.sh
index 71db054..b97928e 100755
--- a/tools/guest-diag/run_cycle.sh
+++ b/tools/guest-diag/run_cycle.sh
@@ -89,6 +89,16 @@ elif [ "$TRACE" = "gdb" ]; then
sleep 8
done
[ "$ARMED" = 1 ] || echo " WARN: gdb arm failed 3x"
+elif [ "$TRACE" = "gdb-launch" ]; then
+ # Launch cdt INSIDE gdb so device-init code that runs before the
+ # CDT_PAUSE (cuInit/cuDeviceGet) is visible to the breakpoints.
+ timeout 30 "$VMEXEC" exec "rm -f /tmp/cdt.out /tmp/cdtgdb.out; sync; echo CLEARED" >/dev/null 2>&1
+ timeout 30 "$VMEXEC" exec \
+ "rm -f /tmp/cdt.out /tmp/cdtgdb.out; nohup sh -c 'gdb -batch -x /tmp/${GDBSCRIPT:-bp999v2.py} --args /tmp/cdt > /tmp/cdtgdb.out 2>&1' & echo STARTED" \
+ >/dev/null 2>&1
+ sleep 3
+ PID=$(timeout 20 "$VMEXEC" exec "pgrep -x cdt" 2>/dev/null | grep -E '^[0-9]+$' | head -1)
+ echo " launched under gdb; cdt pid=${PID:-?} script=${GDBSCRIPT:-bp999v2.py}"
else
timeout 30 "$VMEXEC" exec \
"rm -f /tmp/cdt.out; CDT_HOLD=$HOLD nohup /tmp/cdt >/tmp/cdt.out 2>&1 & echo STARTED" \
@@ -96,9 +106,11 @@ else
fi
echo "[*] waiting for the run to finish (watch cdt.out)"
+POLL_FILE=/tmp/cdt.out
+[ "$TRACE" = "gdb-launch" ] && POLL_FILE=/tmp/cdtgdb.out
for i in $(seq 1 90); do
sleep 2
- OUT_TXT=$(timeout 20 "$VMEXEC" exec "cat /tmp/cdt.out 2>/dev/null" 2>/dev/null | tail -6)
+ OUT_TXT=$(timeout 20 "$VMEXEC" exec "cat $POLL_FILE 2>/dev/null" 2>/dev/null | tail -6)
if echo "$OUT_TXT" | grep -q "FAILED rc="; then
echo " failure observed after ~$((i*2))s"
break
@@ -106,7 +118,7 @@ for i in $(seq 1 90); do
done
echo "[*] snapshotting guest dmesg"
-timeout 60 "$VMEXEC" exec "dmesg > /tmp/guestdmesg.log; cp /tmp/cdt.out /tmp/cdt.out.snap; [ -f /tmp/strace.log ] && cp /tmp/strace.log /tmp/strace.log.snap; [ -f /tmp/bpwait.out ] && cp /tmp/bpwait.out /tmp/bpwait.out.snap; echo DONE" >/dev/null 2>&1
+timeout 60 "$VMEXEC" exec "dmesg > /tmp/guestdmesg.log; cp /tmp/cdt.out /tmp/cdt.out.snap; [ -f /tmp/strace.log ] && cp /tmp/strace.log /tmp/strace.log.snap; [ -f /tmp/bpwait.out ] && cp /tmp/bpwait.out /tmp/bpwait.out.snap; [ -f /tmp/cdtgdb.out ] && cp /tmp/cdtgdb.out /tmp/bpwait.out.snap; echo DONE" >/dev/null 2>&1
sleep 1
sudo kill "$DMESG_PID" 2>/dev/null