#!/bin/sh # # This is a tricky script to understand. When run in M5, it creates # a checkpoint after Linux boot up, but before any benchmarks have # been run. By playing around with environment variables, we can # detect whether the checkpoint has been taken. # - If the checkpoint hasn't been taken, the script allows M5 to checkpoint the system, # re-read this script into a new tmp file, and re-run it. On the # second execution of this script (checkpoint has been taken), the # environment variable is already set, so the script will exit the # simulation # - When we restore the simulation from a checkpoint, we can # specify a new script for M5 to execute in the full-system simulation, # and it will be executed as if a checkpoint had just been taken. # # Author: # Joel Hestness, hestness@cs.utexas.edu # while at AMD Research and Advanced Development Lab # Date: # 10/5/2010 # # Test if the RUNSCRIPT_VAR environment variable is already set if [ "${RUNSCRIPT_VAR+set}" != set ] then # Signal our future self that it's safe to continue export RUNSCRIPT_VAR=1 else # We've already executed once, so we should exit /sbin/m5 exit fi # Checkpoint the first execution echo "Checkpointing simulation..." /sbin/m5 checkpoint # Test if we previously okayed ourselves to run this script if [ "$RUNSCRIPT_VAR" -eq 1 ] then # Signal our future self not to recurse infinitely export RUNSCRIPT_VAR=2 # Read the script for the checkpoint restored execution echo "Loading new script..." /sbin/m5 readfile > /tmp/runscript chmod 755 /tmp/runscript # Execute the new runscript if [ -s /tmp/runscript ] then exec /tmp/runscript else echo "Script not specified. Dropping into shell..." /bin/bash fi fi echo "Fell through script. Exiting..." /sbin/m5 exit