remove checkpoint trace generation since that requires qemu hacking and because we are able to generate the whole trace on VLSI

This commit is contained in:
bbracker 2022-03-06 14:04:30 -08:00
parent 12dd1fb8e3
commit 228f693f13
3 changed files with 10 additions and 87 deletions

View File

@ -1,53 +0,0 @@
From f9882bd274bde82d8c38a9c31692b6ee33d8cd9a Mon Sep 17 00:00:00 2001
From: root <root@tera.eng.hmc.edu>
Date: Mon, 28 Feb 2022 22:48:29 +0000
Subject: [PATCH] bens hack to turn on logging mid-execution using GDB
---
gdbstub.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/gdbstub.c b/gdbstub.c
index 141d7bc4ec..98ecce1b67 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -2317,6 +2317,23 @@ static void handle_set_qemu_phy_mem_mode(GArray *params, void *user_ctx)
}
put_packet("OK");
}
+
+static void handle_set_qemu_logging(GArray *params, void *user_ctx)
+{
+ if (!params->len) {
+ put_packet("E22");
+ return;
+ }
+
+ int log_mask;
+ if (!get_param(params, 0)->val_ul) {
+ log_mask = 0;
+ } else {
+ log_mask = CPU_LOG_TB_IN_ASM | CPU_LOG_INT | CPU_LOG_TB_CPU | CPU_LOG_TB_NOCHAIN;
+ }
+ qemu_set_log(log_mask);
+ put_packet("OK");
+}
#endif
static const GdbCmdParseEntry gdb_gen_query_set_common_table[] = {
@@ -2430,6 +2447,12 @@ static const GdbCmdParseEntry gdb_gen_set_table[] = {
.cmd_startswith = 1,
.schema = "l0"
},
+ {
+ .handler = handle_set_qemu_logging,
+ .cmd = "qemu.Logging:",
+ .cmd_startswith = 1,
+ .schema = "l0"
+ },
#endif
};
--
2.27.0

View File

@ -1,7 +1,7 @@
#! /usr/bin/python3
import sys
if len(sys.argv) != 9:
if len(sys.argv) != 8:
sys.exit("""Error createGenCheckpointScript.py expects 7 args:
<TCP port number>
<path to vmlinux>
@ -9,8 +9,7 @@ if len(sys.argv) != 9:
<path to GDB checkpoint state dump>
<path to GDB ram dump>
<checkpoint pc address>
<number of times pc has already been hit before checkpoint>
<whether to generate a trace after hitting checkpoint>""")
<number of times pc has already been hit before checkpoint>""")
tcpPort=sys.argv[1]
vmlinux=sys.argv[2]
@ -19,7 +18,6 @@ statePath=sys.argv[4]
ramPath=sys.argv[5]
checkPC=sys.argv[6]
checkPCoccurences=sys.argv[7]
genTrace=sys.argv[8]
GDBscript = f"""
# GDB config
@ -56,20 +54,7 @@ set logging off
# Log main memory to a file
print "GDB storing RAM to {ramPath}\\n"
dump binary memory {ramPath} 0x80000000 0xffffffff
"""
if (genTrace=="1"):
GDBscript+=\
"""
# Generate Trace Until End
maintenance packet Qqemu.Logging:1
# Do this by setting an impossible breakpoint
b *0x1000
del 1
c
"""
else:
GDBscript+=\
"""
kill
q
"""

View File

@ -6,12 +6,11 @@ recordFile="$tvDir/all.qemu"
traceFile="$tvDir/all.txt"
# Parse Commandline Arg
if [ "$#" -ne 2 ]; then
echo "genCheckpoint requires 2 arguments: <num instrs> <whether to genTrace>" >&2
if [ "$#" -ne 1 ]; then
echo "genCheckpoint requires 1 argument: <num instrs>" >&2
exit 1
fi
instrs=$1
genTrace=$2
if ! [ "$instrs" -eq "$instrs" ] 2> /dev/null
then
echo "Error expected integer number of instructions, got $instrs" >&2
@ -25,14 +24,8 @@ rawStateFile="$checkPtDir/stateGDB.txt"
rawRamFile="$checkPtDir/ramGDB.bin"
ramFile="$checkPtDir/ram.bin"
if [ $genTrace -eq "1" ]; then
read -p "This scripts is going to create a checkpoint at $instrs instrs.
AND it's going to start generating a trace at that checkpoint.
Is that what you wanted? (y/n) " -n 1 -r
else
read -p "This scripts is going to create a checkpoint at $instrs instrs.
Is that what you wanted? (y/n) " -n 1 -r
fi
read -p "This scripts is going to create a checkpoint at $instrs instrs.
Is that what you wanted? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]
then
@ -63,7 +56,7 @@ then
echo "It occurs ${occurences} times before the ${instrs}th instr."
# Create GDB script because GDB is terrible at handling arguments / variables
./createGenCheckpointScript.py $tcpPort $imageDir/vmlinux $instrs $rawStateFile $rawRamFile $pc $occurences $genTrace
./createGenCheckpointScript.py $tcpPort $imageDir/vmlinux $instrs $rawStateFile $rawRamFile $pc $occurences
# GDB+QEMU
echo "Starting QEMU in replay mode with attached GDB script at $(date +%H:%M:%S)"
(qemu-system-riscv64 \
@ -81,10 +74,8 @@ then
echo "Changing Endianness at $(date +%H:%M:%S)"
make fixBinMem
./fixBinMem "$rawRamFile" "$ramFile"
if [ $genTrace -ne "1" ]; then
echo "Copying over a truncated trace"
tail -n+$instrs $traceFile > $outTraceFile
fi
echo "Copying over a truncated trace"
tail -n+$instrs $traceFile > $outTraceFile
read -p "Checkpoint completed at $(date +%H:%M:%S)" -n 1 -r
# Cleanup