util: Split up the commands into separate files in the m5 util.
authorGabe Black <gabeblack@google.com>
Tue, 7 Apr 2020 07:23:05 +0000 (00:23 -0700)
committerGabe Black <gabeblack@google.com>
Mon, 27 Jul 2020 08:28:24 +0000 (08:28 +0000)
This way each individual command can have a unit test written for it,
covering how it gathers its arguments and puts them passes them to the
underlying dispatch function.

Change-Id: Ia629c412c8906fc6f5ae02c509ed630755cee45c
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/27564
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
15 files changed:
util/m5/src/SConscript
util/m5/src/command/SConscript [new file with mode: 0644]
util/m5/src/command/addsymbol.cc [new file with mode: 0644]
util/m5/src/command/checkpoint.cc [new file with mode: 0644]
util/m5/src/command/dumpresetstats.cc [new file with mode: 0644]
util/m5/src/command/dumpstats.cc [new file with mode: 0644]
util/m5/src/command/exit.cc [new file with mode: 0644]
util/m5/src/command/fail.cc [new file with mode: 0644]
util/m5/src/command/initparam.cc [new file with mode: 0644]
util/m5/src/command/loadsymbol.cc [new file with mode: 0644]
util/m5/src/command/readfile.cc [new file with mode: 0644]
util/m5/src/command/resetstats.cc [new file with mode: 0644]
util/m5/src/command/sum.cc [new file with mode: 0644]
util/m5/src/command/writefile.cc [new file with mode: 0644]
util/m5/src/commands.cc [deleted file]

index 1f33caa1ccdfcce7c2731297922c3f710f8fe7a8..0e4ae52f4b9b6801e0a9ca615ba0b3e8d2b4b899 100644 (file)
@@ -33,7 +33,6 @@ env.Append(CPPPATH=Dir('.'))
 args = 'args.cc'
 call_type = 'call_type.cc'
 command = 'command.cc'
-commands = 'commands.cc'
 m5 = 'm5.cc'
 m5_mmap = 'm5_mmap.c'
 usage = 'usage.cc'
@@ -59,6 +58,7 @@ static_env.Append(LINKFLAGS=[ '-no-pie', '-static' ])
 #
 libm5 = static_env.StaticLibrary('out/m5', [ m5_mmap ] + m5ops)
 
+commands = env.SConscript('command/SConscript', exports={ "env": static_env })
 
 #
 # The m5 stand alone command line utility.
diff --git a/util/m5/src/command/SConscript b/util/m5/src/command/SConscript
new file mode 100644 (file)
index 0000000..a9a59a1
--- /dev/null
@@ -0,0 +1,44 @@
+# Copyright 2020 Google, Inc.
+#
+# 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.
+
+Import('*')
+
+command_ccs = [
+    'addsymbol.cc',
+    'checkpoint.cc',
+    'dumpresetstats.cc',
+    'dumpstats.cc',
+    'exit.cc',
+    'fail.cc',
+    'sum.cc',
+    'initparam.cc',
+    'loadsymbol.cc',
+    'readfile.cc',
+    'resetstats.cc',
+    'writefile.cc',
+]
+
+command_objs = list(map(env.StaticObject, command_ccs))
+Return('command_objs')
diff --git a/util/m5/src/command/addsymbol.cc b/util/m5/src/command/addsymbol.cc
new file mode 100644 (file)
index 0000000..dfd20d7
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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 "args.hh"
+#include "command.hh"
+#include "dispatch_table.hh"
+#include "usage.hh"
+
+namespace
+{
+
+void
+do_add_symbol(const DispatchTable &dt, Args &args)
+{
+    uint64_t addr;
+    if (!args.pop(addr))
+        usage();
+    const std::string &symbol = args.pop();
+
+    (*dt.m5_add_symbol)(addr, symbol.c_str());
+}
+
+Command add_symbol = {
+    "addsymbol", 2, 2, do_add_symbol, "<address> <symbol>\n"
+        "        Adds a symbol with address \"address\" to gem5's "
+        "symbol table" };
+
+} // anonymous namespace
diff --git a/util/m5/src/command/checkpoint.cc b/util/m5/src/command/checkpoint.cc
new file mode 100644 (file)
index 0000000..bd234a7
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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 "args.hh"
+#include "command.hh"
+#include "dispatch_table.hh"
+#include "usage.hh"
+
+namespace
+{
+
+void
+do_checkpoint(const DispatchTable &dt, Args &args)
+{
+    uint64_t ns_delay, ns_period;
+    if (!args.pop(ns_delay, 0) || !args.pop(ns_period, 0))
+        usage();
+
+    (*dt.m5_checkpoint)(ns_delay, ns_period);
+}
+
+Command checkpoint = {
+    "checkpoint", 0, 2, do_checkpoint, "[delay [period]]\n"
+        "        After delay (default 0) take a checkpoint, and then "
+            "optionally every period after" };
+
+} // anonymous namespace
diff --git a/util/m5/src/command/dumpresetstats.cc b/util/m5/src/command/dumpresetstats.cc
new file mode 100644 (file)
index 0000000..e3a7cc6
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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 "args.hh"
+#include "command.hh"
+#include "dispatch_table.hh"
+#include "usage.hh"
+
+namespace
+{
+
+void
+do_dump_reset_stats(const DispatchTable &dt, Args &args)
+{
+    uint64_t ns_delay, ns_period;
+    if (!args.pop(ns_delay, 0) || !args.pop(ns_period, 0))
+        usage();
+
+    (*dt.m5_dump_reset_stats)(ns_delay, ns_period);
+}
+
+Command dump_reset_stats = {
+    "dumpresetstats", 0, 2, do_dump_reset_stats, "[delay [period]]\n"
+        "        After delay (default 0) dump and reset the stats, and then "
+            "optionally every period after" };
+
+} // anonymous namespace
diff --git a/util/m5/src/command/dumpstats.cc b/util/m5/src/command/dumpstats.cc
new file mode 100644 (file)
index 0000000..eef3b38
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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 "args.hh"
+#include "command.hh"
+#include "dispatch_table.hh"
+#include "usage.hh"
+
+namespace
+{
+
+void
+do_dump_stats(const DispatchTable &dt, Args &args)
+{
+    uint64_t ns_delay, ns_period;
+    if (!args.pop(ns_delay, 0) || !args.pop(ns_period, 0))
+        usage();
+
+    (*dt.m5_dump_stats)(ns_delay, ns_period);
+}
+
+Command dump_stats = {
+    "dumpstats", 0, 2, do_dump_stats, "[delay [period]]\n"
+        "        After delay (default 0) dump the stats, and then optionally "
+            "every period after" };
+
+} // anonymous namespace
diff --git a/util/m5/src/command/exit.cc b/util/m5/src/command/exit.cc
new file mode 100644 (file)
index 0000000..ea322ca
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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 "args.hh"
+#include "command.hh"
+#include "dispatch_table.hh"
+#include "usage.hh"
+
+namespace
+{
+
+void
+do_exit(const DispatchTable &dt, Args &args)
+{
+    uint64_t ns_delay;
+    if (!args.pop(ns_delay, 0))
+        usage();
+
+    (*dt.m5_exit)(ns_delay);
+}
+
+Command exit_cmd = {
+    "exit", 0, 1, do_exit, "[delay]\n"
+        "        Exit after delay, or immediately" };
+
+} // anonymous namespace
diff --git a/util/m5/src/command/fail.cc b/util/m5/src/command/fail.cc
new file mode 100644 (file)
index 0000000..db21979
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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 "args.hh"
+#include "command.hh"
+#include "dispatch_table.hh"
+#include "usage.hh"
+
+namespace
+{
+
+void
+do_fail(const DispatchTable &dt, Args &args)
+{
+    uint64_t ns_delay, code;
+    if (!args.pop(code) || !args.pop(ns_delay, 0))
+        usage();
+
+    (*dt.m5_fail)(ns_delay, code);
+}
+
+Command fail_cmd = {
+    "fail", 1, 2, do_fail, "<code> [delay]\n"
+        "        Exit with failure code code after delay, or immediately" };
+
+} // anonymous namespace
diff --git a/util/m5/src/command/initparam.cc b/util/m5/src/command/initparam.cc
new file mode 100644 (file)
index 0000000..3fe000c
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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 <iostream>
+
+#include "args.hh"
+#include "command.hh"
+#include "dispatch_table.hh"
+#include "usage.hh"
+
+namespace
+{
+
+void
+do_initparam(const DispatchTable &dt, Args &args)
+{
+    uint64_t key_str[2];
+    if (!args.pop(key_str, 2))
+        usage();
+    uint64_t val = (*dt.m5_init_param)(key_str[0], key_str[1]);
+    std::cout << val;
+}
+
+Command init_param = {
+    "initparam", 1, 1, do_initparam, "[key]\n"
+        "        optional key may be at most 16 characters long" };
+
+} // anonymous namespace
diff --git a/util/m5/src/command/loadsymbol.cc b/util/m5/src/command/loadsymbol.cc
new file mode 100644 (file)
index 0000000..c55ae99
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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 "args.hh"
+#include "command.hh"
+#include "dispatch_table.hh"
+#include "usage.hh"
+
+namespace
+{
+
+void
+do_loadsymbol(const DispatchTable &dt, Args &args)
+{
+    (*dt.m5_load_symbol)();
+}
+
+Command load_symbol = {
+    "loadsymbol", 0, 0, do_loadsymbol, "\n"
+        "        load a preselected symbol file into gem5's symbol table" };
+
+} // anonymous namespace
diff --git a/util/m5/src/command/readfile.cc b/util/m5/src/command/readfile.cc
new file mode 100644 (file)
index 0000000..9295dfd
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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 <cstring>
+#include <iostream>
+
+#include "args.hh"
+#include "command.hh"
+#include "dispatch_table.hh"
+#include "usage.hh"
+
+namespace
+{
+
+int
+read_file(const DispatchTable &dt, std::ostream &os)
+{
+    char buf[256 * 1024];
+
+    // Touch all buffer pages to ensure they are mapped in the
+    // page table. This is required in the case of X86_FS, where
+    // Linux does demand paging.
+    memset(buf, 0, sizeof(buf));
+
+    int len;
+    int offset = 0;
+    while ((len = (*dt.m5_read_file)(buf, sizeof(buf), offset)) > 0) {
+        os.write(buf, len);
+        os.flush();
+        if (!os) {
+            std::cerr << "Failed to write file" << std::endl;
+            exit(2);
+        }
+        offset += len;
+    }
+
+    return offset;
+}
+
+void
+do_read_file(const DispatchTable &dt, Args &args)
+{
+    if (args.size() > 0)
+        usage();
+
+    read_file(dt, std::cout);
+}
+
+Command read_file_cmd = {
+    "readfile", 0, 0, do_read_file, "\n"
+        "        read a preselected file from the host and write it to "
+            "stdout" };
+
+} // anonymous namespace
diff --git a/util/m5/src/command/resetstats.cc b/util/m5/src/command/resetstats.cc
new file mode 100644 (file)
index 0000000..2408fb3
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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 "args.hh"
+#include "command.hh"
+#include "dispatch_table.hh"
+#include "usage.hh"
+
+namespace
+{
+
+void
+do_reset_stats(const DispatchTable &dt, Args &args)
+{
+    uint64_t ns_delay, ns_period;
+    if (!args.pop(ns_delay, 0) || !args.pop(ns_period, 0))
+        usage();
+
+    (*dt.m5_reset_stats)(ns_delay, ns_period);
+}
+
+Command reset_stats = {
+    "resetstats", 0, 2, do_reset_stats, "[delay [period]]\n"
+        "        After delay (default 0) reset the stats, and then "
+            "optionally every period after" };
+
+} // anonymous namespace
diff --git a/util/m5/src/command/sum.cc b/util/m5/src/command/sum.cc
new file mode 100644 (file)
index 0000000..c7d44b3
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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 <iostream>
+
+#include "args.hh"
+#include "command.hh"
+#include "dispatch_table.hh"
+#include "usage.hh"
+
+namespace
+{
+
+// For testing purposes.
+void
+do_sum(const DispatchTable &dt, Args &args)
+{
+    uint64_t a, b, c, d, e, f;
+    if (!args.pop(a) || !args.pop(b) || !args.pop(c, 0) ||
+            !args.pop(d, 0) || !args.pop(e, 0) || !args.pop(f, 0))
+        usage();
+
+    unsigned sum = (*dt.m5_sum)(a, b, c, d, e, f);
+    std::cout << "Sum is " << sum << "." << std::endl;
+}
+
+Command sum = {
+    "sum", 2, 6, do_sum, "<a> <b> [c [d [e [f]]]]\n"
+        "        Sum a-f (defaults are 0), for testing purposes" };
+
+} // anonymous namespace
diff --git a/util/m5/src/command/writefile.cc b/util/m5/src/command/writefile.cc
new file mode 100644 (file)
index 0000000..801b7af
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * 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 <cstring>
+#include <fstream>
+#include <iostream>
+
+#include "args.hh"
+#include "command.hh"
+#include "dispatch_table.hh"
+#include "usage.hh"
+
+namespace
+{
+
+void
+write_file(const DispatchTable &dt, const std::string &filename,
+           const std::string &host_filename)
+{
+    std::cerr << "opening " << filename << std::endl;
+    std::ifstream src(filename, std::ios_base::in | std::ios_base::binary);
+
+    if (!src) {
+        std::cerr << "error opening " << filename << std::endl;
+        return;
+    }
+
+    char buf[256 * 1024];
+    int offset = 0;
+
+    memset(buf, 0, sizeof(buf));
+
+    while (true) {
+        src.seekg(offset);
+        src.read(buf, sizeof(buf));
+        int len = src.gcount();
+        if (!src && !src.eof())
+            break;
+        char *wbuf = buf;
+        while (len) {
+            int bytes = (*dt.m5_write_file)(
+                    wbuf, len, offset, host_filename.c_str());
+            len -= bytes;
+            offset += bytes;
+            wbuf += bytes;
+        }
+        if (src.eof())
+            break;
+    }
+    std::cerr << "Wrote " << offset << " bytes." << std::endl;
+}
+
+void
+do_write_file(const DispatchTable &dt, Args &args)
+{
+    const std::string &filename = args.pop();
+    const std::string &host_filename = args.pop(filename);
+
+    write_file(dt, filename, host_filename);
+}
+
+Command write_file_cmd = {
+    "writefile", 1, 2, do_write_file, "<filename> [host filename]\n"
+        "        Write a file to the host, optionally with a different "
+            "name" };
+
+} // anonymous namespace
diff --git a/util/m5/src/commands.cc b/util/m5/src/commands.cc
deleted file mode 100644 (file)
index 0dd971a..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright (c) 2003-2005 The Regents of The University of Michigan
- * 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 <cstring>
-#include <fstream>
-#include <iostream>
-
-#include "args.hh"
-#include "command.hh"
-#include "dispatch_table.hh"
-#include "usage.hh"
-
-namespace
-{
-
-int
-read_file(const DispatchTable &dt, std::ostream &os)
-{
-    char buf[256 * 1024];
-
-    // Touch all buffer pages to ensure they are mapped in the
-    // page table. This is required in the case of X86_FS, where
-    // Linux does demand paging.
-    memset(buf, 0, sizeof(buf));
-
-    int len;
-    int offset = 0;
-    while ((len = (*dt.m5_read_file)(buf, sizeof(buf), offset)) > 0) {
-        os.write(buf, len);
-        os.flush();
-        if (!os) {
-            std::cerr << "Failed to write file" << std::endl;
-            exit(2);
-        }
-        offset += len;
-    }
-
-    return offset;
-}
-
-void
-write_file(const DispatchTable &dt, const std::string &filename,
-           const std::string &host_filename)
-{
-    std::cerr << "opening " << filename << std::endl;
-    std::ifstream src(filename, std::ios_base::in | std::ios_base::binary);
-
-    if (!src) {
-        std::cerr << "error opening " << filename << std::endl;
-        return;
-    }
-
-    char buf[256 * 1024];
-    int offset = 0;
-
-    memset(buf, 0, sizeof(buf));
-
-    while (true) {
-        src.seekg(offset);
-        src.read(buf, sizeof(buf));
-        int len = src.gcount();
-        if (!src && !src.eof())
-            break;
-        char *wbuf = buf;
-        while (len) {
-            int bytes = (*dt.m5_write_file)(
-                    wbuf, len, offset, host_filename.c_str());
-            len -= bytes;
-            offset += bytes;
-            wbuf += bytes;
-        }
-        if (src.eof())
-            break;
-    }
-    std::cerr << "Wrote " << offset << " bytes." << std::endl;
-}
-
-void
-do_add_symbol(const DispatchTable &dt, Args &args)
-{
-    uint64_t addr;
-    if (!args.pop(addr))
-        usage();
-    const std::string &symbol = args.pop();
-
-    (*dt.m5_add_symbol)(addr, symbol.c_str());
-}
-
-Command add_symbol = {
-    "addsymbol", 2, 2, do_add_symbol, "<address> <symbol>\n"
-        "        Adds a symbol with address \"address\" to gem5's "
-        "symbol table" };
-
-
-void
-do_checkpoint(const DispatchTable &dt, Args &args)
-{
-    uint64_t ns_delay, ns_period;
-    if (!args.pop(ns_delay, 0) || !args.pop(ns_period, 0))
-        usage();
-
-    (*dt.m5_checkpoint)(ns_delay, ns_period);
-}
-
-Command checkpoint = {
-    "checkpoint", 0, 2, do_checkpoint, "[delay [period]]\n"
-        "        After delay (default 0) take a checkpoint, and then "
-            "optionally every period after" };
-
-
-void
-do_dump_reset_stats(const DispatchTable &dt, Args &args)
-{
-    uint64_t ns_delay, ns_period;
-    if (!args.pop(ns_delay, 0) || !args.pop(ns_period, 0))
-        usage();
-
-    (*dt.m5_dump_reset_stats)(ns_delay, ns_period);
-}
-
-Command dump_reset_stats = {
-    "dumpresetstats", 0, 2, do_dump_reset_stats, "[delay [period]]\n"
-        "        After delay (default 0) dump and reset the stats, and then "
-            "optionally every period after" };
-
-
-void
-do_dump_stats(const DispatchTable &dt, Args &args)
-{
-    uint64_t ns_delay, ns_period;
-    if (!args.pop(ns_delay, 0) || !args.pop(ns_period, 0))
-        usage();
-
-    (*dt.m5_dump_stats)(ns_delay, ns_period);
-}
-
-Command dump_stats = {
-    "dumpstats", 0, 2, do_dump_stats, "[delay [period]]\n"
-        "        After delay (default 0) dump the stats, and then optionally "
-            "every period after" };
-
-
-void
-do_exit(const DispatchTable &dt, Args &args)
-{
-    uint64_t ns_delay;
-    if (!args.pop(ns_delay, 0))
-        usage();
-
-    (*dt.m5_exit)(ns_delay);
-}
-
-Command exit_cmd = {
-    "exit", 0, 1, do_exit, "[delay]\n"
-        "        Exit after delay, or immediately" };
-
-
-void
-do_fail(const DispatchTable &dt, Args &args)
-{
-    uint64_t ns_delay, code;
-    if (!args.pop(code) || !args.pop(ns_delay, 0))
-        usage();
-
-    (*dt.m5_fail)(ns_delay, code);
-}
-
-Command fail_cmd = {
-    "fail", 1, 2, do_fail, "<code> [delay]\n"
-        "        Exit with failure code code after delay, or immediately" };
-
-
-// For testing purposes.
-void
-do_sum(const DispatchTable &dt, Args &args)
-{
-    uint64_t a, b, c, d, e, f;
-    if (!args.pop(a) || !args.pop(b) || !args.pop(c, 0) ||
-            !args.pop(d, 0) || !args.pop(e, 0) || !args.pop(f, 0))
-        usage();
-
-    unsigned sum = (*dt.m5_sum)(a, b, c, d, e, f);
-    std::cout << "Sum is " << sum << "." << std::endl;
-}
-
-Command sum = {
-    "sum", 2, 6, do_sum, "<a> <b> [c [d [e [f]]]]\n"
-        "        Sum a-f (defaults are 0), for testing purposes" };
-
-
-void
-do_initparam(const DispatchTable &dt, Args &args)
-{
-    uint64_t key_str[2];
-    if (!args.pop(key_str, 2))
-        usage();
-    uint64_t val = (*dt.m5_init_param)(key_str[0], key_str[1]);
-    std::cout << val;
-}
-
-Command init_param = {
-    "initparam", 1, 1, do_initparam, "[key]\n"
-        "        optional key may be at most 16 characters long" };
-
-
-void
-do_loadsymbol(const DispatchTable &dt, Args &args)
-{
-    (*dt.m5_load_symbol)();
-}
-
-Command load_symbol = {
-    "loadsymbol", 0, 0, do_loadsymbol, "\n"
-        "        load a preselected symbol file into gem5's symbol table" };
-
-
-void
-do_read_file(const DispatchTable &dt, Args &args)
-{
-    if (args.size() > 0)
-        usage();
-
-    read_file(dt, std::cout);
-}
-
-Command read_file_cmd = {
-    "readfile", 0, 0, do_read_file, "\n"
-        "        read a preselected file from the host and write it to "
-            "stdout" };
-
-
-void
-do_reset_stats(const DispatchTable &dt, Args &args)
-{
-    uint64_t ns_delay, ns_period;
-    if (!args.pop(ns_delay, 0) || !args.pop(ns_period, 0))
-        usage();
-
-    (*dt.m5_reset_stats)(ns_delay, ns_period);
-}
-
-Command reset_stats = {
-    "resetstats", 0, 2, do_reset_stats, "[delay [period]]\n"
-        "        After delay (default 0) reset the stats, and then "
-            "optionally every period after" };
-
-
-void
-do_write_file(const DispatchTable &dt, Args &args)
-{
-    const std::string &filename = args.pop();
-    const std::string &host_filename = args.pop(filename);
-
-    write_file(dt, filename, host_filename);
-}
-
-Command write_file_cmd = {
-    "writefile", 1, 2, do_write_file, "<filename> [host filename]\n"
-        "        Write a file to the host, optionally with a different "
-            "name" };
-
-} // anonymous namespace