mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
greatly improve trace-generating checkpoint process with QEMU hack
This commit is contained in:
parent
3f5ae216b5
commit
7af81d93ec
1
.gitignore
vendored
1
.gitignore
vendored
@ -61,6 +61,7 @@ linux/testvector-generation/genCheckpoint.gdb
|
|||||||
linux/testvector-generation/silencePipe
|
linux/testvector-generation/silencePipe
|
||||||
linux/testvector-generation/silencePipe.control
|
linux/testvector-generation/silencePipe.control
|
||||||
linux/testvector-generation/fixBinMem
|
linux/testvector-generation/fixBinMem
|
||||||
|
linux/testvector-generation/qemu-serial
|
||||||
*.dtb
|
*.dtb
|
||||||
synthDC/WORK
|
synthDC/WORK
|
||||||
synthDC/alib-52
|
synthDC/alib-52
|
||||||
|
@ -0,0 +1,53 @@
|
|||||||
|
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
|
||||||
|
|
@ -35,9 +35,6 @@ maintenance packet Qqemu.PhyMemMode:1
|
|||||||
# Symbol file
|
# Symbol file
|
||||||
file {vmlinux}
|
file {vmlinux}
|
||||||
|
|
||||||
# Silence Trace Generation
|
|
||||||
shell echo 1 > ./silencePipe.control
|
|
||||||
|
|
||||||
# Step over reset vector into actual code
|
# Step over reset vector into actual code
|
||||||
stepi 100
|
stepi 100
|
||||||
# Proceed to checkpoint
|
# Proceed to checkpoint
|
||||||
@ -56,11 +53,11 @@ set logging off
|
|||||||
|
|
||||||
# Log main memory to a file
|
# Log main memory to a file
|
||||||
print "GDB storing RAM to {ramPath}\\n"
|
print "GDB storing RAM to {ramPath}\\n"
|
||||||
#dump binary memory {ramPath} 0x80000000 0xffffffff
|
dump binary memory {ramPath} 0x80000000 0xffffffff
|
||||||
#dump binary memory {ramPath} 0x80000000 0x80ffffff
|
dump binary memory {ramPath} 0x80000000 0x80ffffff
|
||||||
|
|
||||||
# Generate Trace Until End
|
# Generate Trace Until End
|
||||||
shell echo 0 > ./silencePipe.control
|
maintenance packet Qqemu.Logging:1
|
||||||
# Do this by setting an impossible breakpoint
|
# Do this by setting an impossible breakpoint
|
||||||
b *0x1000
|
b *0x1000
|
||||||
del 1
|
del 1
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
tcpPort=1237
|
tcpPort=1238
|
||||||
imageDir=$RISCV/buildroot/output/images
|
imageDir=$RISCV/buildroot/output/images
|
||||||
tvDir=$RISCV/linux-testvectors
|
tvDir=$RISCV/linux-testvectors
|
||||||
recordFile="$tvDir/all.qemu"
|
recordFile="$tvDir/all.qemu"
|
||||||
traceFile="$tvDir/all_up_to_498.txt"
|
traceFile="$tvDir/all.txt"
|
||||||
|
|
||||||
# Parse Commandline Arg
|
# Parse Commandline Arg
|
||||||
if [ "$#" -ne 1 ]; then
|
if [ "$#" -ne 1 ]; then
|
||||||
@ -30,7 +30,6 @@ echo
|
|||||||
if [[ $REPLY =~ ^[Yy]$ ]]
|
if [[ $REPLY =~ ^[Yy]$ ]]
|
||||||
then
|
then
|
||||||
echo "Creating checkpoint at $instrs instructions!"
|
echo "Creating checkpoint at $instrs instructions!"
|
||||||
make silencePipe
|
|
||||||
|
|
||||||
# Create Output Directory
|
# Create Output Directory
|
||||||
echo "Elevating permissions to create $checkPtDir and stuff inside it"
|
echo "Elevating permissions to create $checkPtDir and stuff inside it"
|
||||||
@ -66,9 +65,8 @@ then
|
|||||||
-nographic \
|
-nographic \
|
||||||
-bios $imageDir/fw_jump.elf -kernel $imageDir/Image -append "root=/dev/vda ro" -initrd $imageDir/rootfs.cpio \
|
-bios $imageDir/fw_jump.elf -kernel $imageDir/Image -append "root=/dev/vda ro" -initrd $imageDir/rootfs.cpio \
|
||||||
-singlestep -rtc clock=vm -icount shift=0,align=off,sleep=on,rr=replay,rrfile=$recordFile \
|
-singlestep -rtc clock=vm -icount shift=0,align=off,sleep=on,rr=replay,rrfile=$recordFile \
|
||||||
-d nochain,cpu,in_asm,int \
|
|
||||||
-gdb tcp::$tcpPort -S \
|
-gdb tcp::$tcpPort -S \
|
||||||
2>&1 >/dev/null | ./silencePipe | ./parseQEMUtoGDB/parseQEMUtoGDB_run.py | ./parseGDBtoTrace/parseGDBtoTrace_run.py $interruptsFile | ./remove_dup.awk > $outTraceFile) \
|
2>&1 1>./qemu-serial | ./parseQEMUtoGDB/parseQEMUtoGDB_run.py | ./parseGDBtoTrace/parseGDBtoTrace_run.py $interruptsFile | ./remove_dup.awk > $outTraceFile) \
|
||||||
& riscv64-unknown-elf-gdb --quiet -ex "source genCheckpoint.gdb"
|
& riscv64-unknown-elf-gdb --quiet -ex "source genCheckpoint.gdb"
|
||||||
echo "Completed GDB script at $(date +%H:%M:%S)"
|
echo "Completed GDB script at $(date +%H:%M:%S)"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user