diff options
Diffstat (limited to 'tools/guest-diag/run_cycle.sh')
| -rwxr-xr-x | tools/guest-diag/run_cycle.sh | 16 |
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 |
