1#!/bin/sh
2
3#
4# This is a tricky script to understand. When run in M5, it creates
5# a checkpoint after Linux boot up, but before any benchmarks have
6# been run. By playing around with environment variables, we can
7# detect whether the checkpoint has been taken.
8#  - If the checkpoint hasn't been taken, the script allows M5 to checkpoint the system,
9# re-read this script into a new tmp file, and re-run it. On the
10# second execution of this script (checkpoint has been taken), the
11# environment variable is already set, so the script will exit the
12# simulation
13#  - When we restore the simulation from a checkpoint, we can
14# specify a new script for M5 to execute in the full-system simulation,
15# and it will be executed as if a checkpoint had just been taken.
16#
17# Author:
18#   Joel Hestness, hestness@cs.utexas.edu
19#   while at AMD Research and Advanced Development Lab
20# Date:
21#   10/5/2010
22#
23
24# Test if the RUNSCRIPT_VAR environment variable is already set
25if [ "${RUNSCRIPT_VAR+set}" != set ]
26then
27	# Signal our future self that it's safe to continue
28	export RUNSCRIPT_VAR=1
29else
30	# We've already executed once, so we should exit
31	/sbin/m5 exit
32fi
33
34# Checkpoint the first execution
35echo "Checkpointing simulation..."
36/sbin/m5 checkpoint
37
38# Test if we previously okayed ourselves to run this script
39if [ "$RUNSCRIPT_VAR" -eq 1 ]
40then
41
42	# Signal our future self not to recurse infinitely
43	export RUNSCRIPT_VAR=2
44
45	# Read the script for the checkpoint restored execution
46	echo "Loading new script..."
47	/sbin/m5 readfile > /tmp/runscript
48	chmod 755 /tmp/runscript
49
50	# Execute the new runscript
51	if [ -s /tmp/runscript ]
52	then
53		exec /tmp/runscript
54	else
55		echo "Script not specified. Dropping into shell..."
56		/bin/bash
57	fi
58
59fi
60
61echo "Fell through script. Exiting..."
62/sbin/m5 exit
63