diff --git a/configs/common/Options.py b/configs/common/Options.py index 4cf1e6c5a..f110f7dfb 100644 --- a/configs/common/Options.py +++ b/configs/common/Options.py @@ -150,6 +150,9 @@ def addCommonOptions(parser): parser.add_option("--init-param", action="store", type="int", default=0, help="""Parameter available in simulation with m5 initparam""") + parser.add_option("--initialize-only", action="store_true", default=False, + help="""Exit after initialization. Do not simulate time. + Useful when gem5 is run as a library.""") # Simpoint options parser.add_option("--simpoint-profile", action="store_true", diff --git a/configs/common/Simulation.py b/configs/common/Simulation.py index 72d3d0e97..230701c23 100644 --- a/configs/common/Simulation.py +++ b/configs/common/Simulation.py @@ -581,6 +581,13 @@ def run(options, root, testsys, cpu_class): cpt_starttick, checkpoint_dir = findCptDir(options, cptdir, testsys) m5.instantiate(checkpoint_dir) + # Initialization is complete. If we're not in control of simulation + # (that is, if we're a slave simulator acting as a component in another + # 'master' simulator) then we're done here. The other simulator will + # call simulate() directly. --initialize-only is used to indicate this. + if options.initialize_only: + return + # Handle the max tick settings now that tick frequency was resolved # during system instantiation # NOTE: the maxtick variable here is in absolute ticks, so it must