mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	add option to not generate a trace when making checkpoints
This commit is contained in:
		
							parent
							
								
									a8e8cfb838
								
							
						
					
					
						commit
						da4d7de2bd
					
				@ -1,7 +1,7 @@
 | 
				
			|||||||
#! /usr/bin/python3
 | 
					#! /usr/bin/python3
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if len(sys.argv) != 8:
 | 
					if len(sys.argv) != 9:
 | 
				
			||||||
    sys.exit("""Error createGenCheckpointScript.py expects 7 args:
 | 
					    sys.exit("""Error createGenCheckpointScript.py expects 7 args:
 | 
				
			||||||
    <TCP port number>
 | 
					    <TCP port number>
 | 
				
			||||||
    <path to vmlinux>
 | 
					    <path to vmlinux>
 | 
				
			||||||
@ -9,7 +9,8 @@ if len(sys.argv) != 8:
 | 
				
			|||||||
    <path to GDB checkpoint state dump>
 | 
					    <path to GDB checkpoint state dump>
 | 
				
			||||||
    <path to GDB ram dump>
 | 
					    <path to GDB ram dump>
 | 
				
			||||||
    <checkpoint pc address>
 | 
					    <checkpoint pc address>
 | 
				
			||||||
    <number of times pc has already been hit before checkpoint>""")
 | 
					    <number of times pc has already been hit before checkpoint>
 | 
				
			||||||
 | 
					    <whether to generate a trace after hitting checkpoint>""")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tcpPort=sys.argv[1]
 | 
					tcpPort=sys.argv[1]
 | 
				
			||||||
vmlinux=sys.argv[2]
 | 
					vmlinux=sys.argv[2]
 | 
				
			||||||
@ -18,6 +19,7 @@ statePath=sys.argv[4]
 | 
				
			|||||||
ramPath=sys.argv[5]
 | 
					ramPath=sys.argv[5]
 | 
				
			||||||
checkPC=sys.argv[6]
 | 
					checkPC=sys.argv[6]
 | 
				
			||||||
checkPCoccurences=sys.argv[7]
 | 
					checkPCoccurences=sys.argv[7]
 | 
				
			||||||
 | 
					genTrace=sys.argv[8]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GDBscript = f"""
 | 
					GDBscript = f"""
 | 
				
			||||||
# GDB config
 | 
					# GDB config
 | 
				
			||||||
@ -54,7 +56,10 @@ 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
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					if (genTrace=="1"):
 | 
				
			||||||
 | 
					    GDBscript+=\
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
# Generate Trace Until End
 | 
					# Generate Trace Until End
 | 
				
			||||||
maintenance packet Qqemu.Logging:1
 | 
					maintenance packet Qqemu.Logging:1
 | 
				
			||||||
# Do this by setting an impossible breakpoint
 | 
					# Do this by setting an impossible breakpoint
 | 
				
			||||||
@ -62,6 +67,12 @@ b *0x1000
 | 
				
			|||||||
del 1
 | 
					del 1
 | 
				
			||||||
c
 | 
					c
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					else:
 | 
				
			||||||
 | 
					    GDBscript+=\
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					kill
 | 
				
			||||||
 | 
					q
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
GDBscriptFile = open("genCheckpoint.gdb",'w')
 | 
					GDBscriptFile = open("genCheckpoint.gdb",'w')
 | 
				
			||||||
GDBscriptFile.write(GDBscript)
 | 
					GDBscriptFile.write(GDBscript)
 | 
				
			||||||
GDBscriptFile.close()
 | 
					GDBscriptFile.close()
 | 
				
			||||||
 | 
				
			|||||||
@ -6,11 +6,12 @@ recordFile="$tvDir/all.qemu"
 | 
				
			|||||||
traceFile="$tvDir/all.txt"
 | 
					traceFile="$tvDir/all.txt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Parse Commandline Arg
 | 
					# Parse Commandline Arg
 | 
				
			||||||
if [ "$#" -ne 1 ]; then
 | 
					if [ "$#" -ne 2 ]; then
 | 
				
			||||||
    echo "genCheckpoint requires 1 argument: <num instrs>" >&2
 | 
					    echo "genCheckpoint requires 2 arguments: <num instrs> <whether to genTrace>" >&2
 | 
				
			||||||
    exit 1
 | 
					    exit 1
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
instrs=$1
 | 
					instrs=$1
 | 
				
			||||||
 | 
					genTrace=$2
 | 
				
			||||||
if ! [ "$instrs" -eq "$instrs" ] 2> /dev/null
 | 
					if ! [ "$instrs" -eq "$instrs" ] 2> /dev/null
 | 
				
			||||||
then
 | 
					then
 | 
				
			||||||
    echo "Error expected integer number of instructions, got $instrs" >&2
 | 
					    echo "Error expected integer number of instructions, got $instrs" >&2
 | 
				
			||||||
@ -24,8 +25,14 @@ rawStateFile="$checkPtDir/stateGDB.txt"
 | 
				
			|||||||
rawRamFile="$checkPtDir/ramGDB.bin"
 | 
					rawRamFile="$checkPtDir/ramGDB.bin"
 | 
				
			||||||
ramFile="$checkPtDir/ram.bin"
 | 
					ramFile="$checkPtDir/ram.bin"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
read -p "This scripts is going to create a checkpoint at $instrs instrs.
 | 
					if [ $genTrace -eq "1" ]; then
 | 
				
			||||||
Is that what you wanted? (y/n) " -n 1 -r
 | 
					    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
 | 
				
			||||||
echo
 | 
					echo
 | 
				
			||||||
if [[ $REPLY =~ ^[Yy]$ ]]
 | 
					if [[ $REPLY =~ ^[Yy]$ ]]
 | 
				
			||||||
then
 | 
					then
 | 
				
			||||||
@ -36,8 +43,10 @@ then
 | 
				
			|||||||
    sudo mkdir -p $checkPtDir
 | 
					    sudo mkdir -p $checkPtDir
 | 
				
			||||||
    sudo chown -R cad:users $checkPtDir
 | 
					    sudo chown -R cad:users $checkPtDir
 | 
				
			||||||
    sudo chmod -R a+rw $checkPtDir
 | 
					    sudo chmod -R a+rw $checkPtDir
 | 
				
			||||||
    sudo touch $outTraceFile
 | 
					    if [ $genTrace -eq "1" ]; then
 | 
				
			||||||
    sudo chmod a+rw $outTraceFile
 | 
					        sudo touch $outTraceFile
 | 
				
			||||||
 | 
					        sudo chmod a+rw $outTraceFile
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
    sudo touch $interruptsFile
 | 
					    sudo touch $interruptsFile
 | 
				
			||||||
    sudo chmod a+rw $interruptsFile
 | 
					    sudo chmod a+rw $interruptsFile
 | 
				
			||||||
    sudo touch $rawStateFile
 | 
					    sudo touch $rawStateFile
 | 
				
			||||||
@ -56,8 +65,7 @@ then
 | 
				
			|||||||
    echo "It occurs ${occurences} times before the ${instrs}th instr." 
 | 
					    echo "It occurs ${occurences} times before the ${instrs}th instr." 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Create GDB script because GDB is terrible at handling arguments / variables
 | 
					    # Create GDB script because GDB is terrible at handling arguments / variables
 | 
				
			||||||
    ./createGenCheckpointScript.py $tcpPort $imageDir/vmlinux $instrs $rawStateFile $rawRamFile $pc $occurences
 | 
					    ./createGenCheckpointScript.py $tcpPort $imageDir/vmlinux $instrs $rawStateFile $rawRamFile $pc $occurences $genTrace
 | 
				
			||||||
 | 
					 | 
				
			||||||
    # GDB+QEMU
 | 
					    # GDB+QEMU
 | 
				
			||||||
    echo "Starting QEMU in replay mode with attached GDB script at $(date +%H:%M:%S)"
 | 
					    echo "Starting QEMU in replay mode with attached GDB script at $(date +%H:%M:%S)"
 | 
				
			||||||
    (qemu-system-riscv64 \
 | 
					    (qemu-system-riscv64 \
 | 
				
			||||||
@ -77,7 +85,7 @@ then
 | 
				
			|||||||
    ./fixBinMem "$rawRamFile" "$ramFile"
 | 
					    ./fixBinMem "$rawRamFile" "$ramFile"
 | 
				
			||||||
    #echo "Creating truncated trace at $(date +%H:%M:%S)"
 | 
					    #echo "Creating truncated trace at $(date +%H:%M:%S)"
 | 
				
			||||||
    #tail -n+$instrs "$tvDir/$traceFile" > "$checkPtDir/$traceFile"
 | 
					    #tail -n+$instrs "$tvDir/$traceFile" > "$checkPtDir/$traceFile"
 | 
				
			||||||
    echo "Checkpoint completed at $(date +%H:%M:%S)"
 | 
					    read -p "Checkpoint completed at $(date +%H:%M:%S)" -n 1 -r
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Cleanup
 | 
					    # Cleanup
 | 
				
			||||||
    echo "Elevating permissions to restrict write access to $checkPtDir"
 | 
					    echo "Elevating permissions to restrict write access to $checkPtDir"
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user