/* * Copyright (c) 2015 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall * not be construed as granting a license to any other intellectual * property including but not limited to intellectual property relating * to a hardware implementation of the functionality of the software * licensed hereunder. You may use the software subject to the license * terms below provided that you ensure that this notice is replicated * unmodified and in its entirety in all distributions of the software, * modified or unmodified, in source code or in binary form. * * Copyright (c) 2002-2005 The Regents of The University of Michigan * Copyright (c) 2013 Advanced Micro Devices, Inc. * Copyright (c) 2013 Mark D. Hill and David A. Wood * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer; * redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution; * neither the name of the copyright holders nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "sim/globals.hh" #include #include #include "base/logging.hh" #include "sim/cur_tick.hh" namespace gem5 { /// The version tags for this build of the simulator, to be stored in the /// Globals section during serialization and compared upon unserialization. extern std::set version_tags; void Globals::serialize(CheckpointOut &cp) const { paramOut(cp, "curTick", curTick()); SERIALIZE_CONTAINER(version_tags); } void Globals::unserialize(CheckpointIn &cp) { paramIn(cp, "curTick", unserializedCurTick); const std::string divider = "**********************************************************\n"; const std::string §ion(Serializable::currentSection()); std::string str; if (!cp.find(section, "version_tags", str)) { warn(divider); warn("!!!! Checkpoint uses an old versioning scheme. !!!!\n"); warn("Run the checkpoint upgrader (util/cpt_upgrader.py) on your " "checkpoint\n"); warn(divider); return; } std::set cpt_tags; arrayParamIn(cp, "version_tags", cpt_tags); // UNSERIALIZE_CONTAINER bool err = false; for (const auto& t : version_tags) { if (cpt_tags.find(t) == cpt_tags.end()) { // checkpoint is missing tag that this binary has if (!err) { warn(divider); warn( "!!! Checkpoint is missing the following version tags:\n"); err = true; } warn(" %s\n", t); } } if (err) { warn("You might experience some issues when restoring and should run " "the checkpoint upgrader (util/cpt_upgrader.py) on your " "checkpoint\n"); warn(divider); } err = false; for (const auto& t : cpt_tags) { if (version_tags.find(t) == version_tags.end()) { // gem5 binary is missing tag that this checkpoint has if (!err) { warn(divider); warn("!!!! gem5 is missing the following version tags:\n"); err = true; } warn(" %s\n", t); } } if (err) { warn("Running a checkpoint with incompatible version tags is not " "supported. While it might work, you may experience incorrect " "behavior or crashes.\n"); warn(divider); } } } // namespace gem5