util: added workbegin and workend in m5 util

Added m5 workbegin and m5 workend that can be used with out/m5

Change-Id: Ic2b1ac3c08dcae3f66fb65dffaa3a3358b717251
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/63751
Reviewed-by: Bobby Bruce <bbruce@ucdavis.edu>
Maintainer: Bobby Bruce <bbruce@ucdavis.edu>
Tested-by: kokoro <noreply+kokoro@google.com>
diff --git a/util/m5/src/command/SConscript b/util/m5/src/command/SConscript
index a9a59a1..0ca53f3 100644
--- a/util/m5/src/command/SConscript
+++ b/util/m5/src/command/SConscript
@@ -38,6 +38,8 @@
     'readfile.cc',
     'resetstats.cc',
     'writefile.cc',
+    'workbegin.cc',
+    'workend.cc'
 ]
 
 command_objs = list(map(env.StaticObject, command_ccs))
diff --git a/util/m5/src/command/workbegin.cc b/util/m5/src/command/workbegin.cc
new file mode 100644
index 0000000..82bf38b
--- /dev/null
+++ b/util/m5/src/command/workbegin.cc
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2022 The Regents of the University of California.
+ * 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"
+
+namespace
+{
+
+bool
+do_work_begin(const DispatchTable &dt, Args &args)
+{
+    uint64_t workid, threadid;
+    if (!args.pop(workid, 0) || !args.pop(threadid, 0))
+        return false;
+
+    (*dt.m5_work_begin)(workid, threadid);
+
+    return true;
+}
+
+Command workbegin = {
+    "workbegin", 0, 2, do_work_begin, "[workid][threadid]\n"
+        "        Exit immediately" };
+
+} // anonymous namespace
diff --git a/util/m5/src/command/workend.cc b/util/m5/src/command/workend.cc
new file mode 100644
index 0000000..5134c80
--- /dev/null
+++ b/util/m5/src/command/workend.cc
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2022 The Regents of the University of California.
+ * 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"
+
+namespace
+{
+
+bool
+do_work_end(const DispatchTable &dt, Args &args)
+{
+    uint64_t workid, threadid;
+    if (!args.pop(workid, 0) || !args.pop(threadid, 0))
+        return false;
+
+    (*dt.m5_work_end)(workid, threadid);
+
+    return true;
+}
+
+Command workend = {
+    "workend", 0, 2, do_work_end, "[workid [threadid]]\n"
+        "        Exit immediately" };
+
+} // anonymous namespace