--- /dev/null
+#!/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