| #!/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 |