util: Reorganize the java wrapper for gem5 ops.
authorGabe Black <gabe.black@gmail.com>
Fri, 23 Oct 2020 03:00:55 +0000 (20:00 -0700)
committerGabe Black <gabe.black@gmail.com>
Fri, 4 Dec 2020 22:56:24 +0000 (22:56 +0000)
Rather than use a top level package of jni which is generic, switch to a
top level package of "gem5". With that prefix, call the actual class
Ops, which is capitalized according to Java tradition and also
unambiguous given its package name.

Also move the java class definition and c JNI implementation into a java
subdir to keep it all together. The java related output will now be in
out/java for the same reason.

Change-Id: Ia0468d2edbcffe87a62022898f867ae391adc94c
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28176
Reviewed-by: Gabe Black <gabe.black@gmail.com>
Maintainer: Gabe Black <gabe.black@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
util/m5/README.md
util/m5/src/SConscript
util/m5/src/java/gem5/Ops.java [new file with mode: 0644]
util/m5/src/java/gem5/ops.c [new file with mode: 0644]
util/m5/src/jni/gem5Op.java [deleted file]
util/m5/src/jni_gem5Op.c [deleted file]

index 00c0aeb148517962ebb732e4dc417b8308f712d6..9a350e2f37ca614f46d4fe4cd8607c1f16d4e040 100644 (file)
@@ -344,14 +344,14 @@ library only if that trigger mechanism is supported for that ABI.
 To use the gem5 java jar, you will need to load the corresponding .so.
 
 ```shell
-System.loadLibrary("gem5OpJni");
+System.loadLibrary("gem5Ops");
 ```
 
 In your java source, import the gem5Op class which will have methods for
 calling each of the gem5 operations.
 
 ```shell
-import jni.gem5Op
+import gem5.Ops
 ```
 
 These methods will all use the magic instruction based trigger mechanism.
index 395abb921707124e84cddc534af3c9210366f5e7..70c123a3ab99dda02b875039efb7d3a64032537c 100644 (file)
@@ -37,7 +37,7 @@ m5 = 'm5.cc'
 m5_mmap = 'm5_mmap.c'
 usage = 'usage.cc'
 
-jni = 'jni_gem5Op.c'
+jni = 'java/gem5/ops.c'
 lua = 'lua_gem5Op.cc'
 
 all_call_types = list(env['CALL_TYPE'].values())
@@ -101,18 +101,19 @@ if env['HAVE_JAVA']:
     # that the javah tool exists. Java has dropped that tool in favor of a -h
     # option on javac which the Java builder doesn't know how to use. To get
     # around this, we set up our own builder which does the "right thing" here.
-    java_env.Command([ 'jni_gem5Op.h', 'out/gem5OpJni.jar' ],
-                     'jni/gem5Op.java',
+    java_env.Command([ Dir('java').File('gem5_Ops.h'),
+                       Dir('out').Dir('java').File('gem5Ops.jar') ],
+                     Dir('java').Dir('gem5').File('Ops.java'),
                      MakeAction([
                          '${JAVAC} ${JAVACFLAGS} -d ${OUT} '
-                         '${SOURCES} -h ${CWD}',
-                         '${JAR} cvf ${TARGETS[1]} ${JNI_DIR}/*.class' ],
+                         '${SOURCES} -h ${JAVA_DIR}',
+                         '${JAR} cvf ${TARGETS[1]} ${CLS_DIR}/*.class' ],
                         'JAVA'),
-                     JNI_DIR=Dir('out').Dir('jni'),
-                     OUT=Dir('out'), CWD=Dir('.'))
+                     CLS_DIR=Dir('out').Dir('java').Dir('gem5'),
+                     OUT=Dir('out').Dir('java'), JAVA_DIR=Dir('java'))
     # Set include paths to the C headers from the JDK which scons found for us.
     java_env.Append(CPPPATH='${JAVAINCLUDES}')
-    java_env.SharedLibrary('out/gem5OpJni',
+    java_env.SharedLibrary('out/java/gem5Ops',
                            [ jni ] + m5op_shared + m5_mmap_shared)
 
 
diff --git a/util/m5/src/java/gem5/Ops.java b/util/m5/src/java/gem5/Ops.java
new file mode 100644 (file)
index 0000000..fea5aad
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2010 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.
+ *
+ * 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.
+ */
+
+package gem5;
+
+/**
+ * Java class to implement JNI for m5Ops
+ */
+
+public class Ops {
+    public native void arm(long address);
+    public native void quiesce();
+    public native void quiesce_ns(long ns);
+    public native void quiesce_cycle(long cycles);
+    public native long quiesce_time();
+    public native long rpns();
+    public native void wake_cpu(long cpuid);
+
+    public native void exit(long ns_delay);
+    public native void fail(long ns_delay, long code);
+    public native long sum(long a, long b, long c, long d, long e, long f);
+    public native long init_param(long key_str1, long key_str2);
+    public native void checkpoint(long ns_delay, long ns_period);
+    public native void reset_stats(long ns_delay, long ns_period);
+    public native void dump_stats(long ns_delay, long ns_period);
+    public native void dump_reset_stats(long ns_delay, long ns_period);
+    public native long read_file(byte[] buffer, long len, long offset);
+    public native long write_file(byte[] buffer, long len, long offset,
+                                  String filename);
+    public native void debug_break();
+    public native void switch_cpu();
+    public native void dist_toggle_sync();
+    public native void add_symbol(long addr, String symbol);
+    public native void load_symbol();
+    public native void panic();
+    public native void work_begin(long workid, long threadid);
+    public native void work_end(long workid, long threadid);
+
+}
diff --git a/util/m5/src/java/gem5/ops.c b/util/m5/src/java/gem5/ops.c
new file mode 100644 (file)
index 0000000..c3f9328
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+ * Copyright (c) 2010 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.
+ *
+ * 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 <stdint.h>
+
+#include "gem5/m5ops.h"
+#include "java/gem5_Ops.h"
+
+/*
+ * C library interface for gem5Op JNI
+ */
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_arm(JNIEnv *env, jobject obj, jlong j_address)
+{
+    m5_arm(j_address);
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_quiesce(JNIEnv *env, jobject obj)
+{
+    m5_quiesce();
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_quiesce_1ns(JNIEnv *env, jobject obj, jlong j_ns)
+{
+    m5_quiesce_ns(j_ns);
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_quiesce_1cycle(JNIEnv *env, jobject obj, jlong j_cycles)
+{
+    m5_quiesce_cycle(j_cycles);
+}
+
+JNIEXPORT jlong JNICALL
+Java_gem5_Ops_quiesce_1time(JNIEnv *env, jobject obj)
+{
+    uint64_t time = m5_quiesce_time();
+    if (time & 0x8000000000000000ULL)
+        printf("Truncated return value from quiesceTime() to 63 bits\n");
+    return (time & 0x7FFFFFFFFFFFFFFFULL);
+}
+
+JNIEXPORT jlong JNICALL
+Java_gem5_Ops_rpns(JNIEnv *env, jobject obj)
+{
+    uint64_t time = m5_rpns();
+    if (time & 0x8000000000000000ULL)
+        printf("Truncated return value from rpns() to 63 bits\n");
+    return (time & 0x7FFFFFFFFFFFFFFFULL);
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_wake_1cpu(JNIEnv *env, jobject obj, jlong j_cpuid)
+{
+    m5_wake_cpu(j_cpuid);
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_exit(JNIEnv *env, jobject obj, jlong j_ns_delay)
+{
+    m5_exit(j_ns_delay);
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_fail(JNIEnv *env, jobject obj, jlong j_ns_delay, jlong j_code)
+{
+    m5_fail(j_ns_delay, j_code);
+}
+
+JNIEXPORT jlong JNICALL
+Java_gem5_Ops_sum(JNIEnv *env, jobject obj, jlong a, jlong b, jlong c,
+                    jlong d, jlong e, jlong f)
+{
+    uint64_t result = m5_sum(a, b, c, d, e, f);
+    if (result & 0x8000000000000000ULL)
+        printf("Truncated return value from sum() to 63 bits\n");
+    return (result & 0x7FFFFFFFFFFFFFFFULL);
+}
+
+JNIEXPORT jlong JNICALL
+Java_gem5_Ops_init_1param(JNIEnv *env, jobject obj, jlong j_key_str1,
+                           jlong j_key_str2)
+{
+    uint64_t param = m5_init_param(j_key_str1, j_key_str2);
+    if (param & 0x8000000000000000ULL)
+        printf("Truncated return value from m_initparam() to 63 bits\n");
+    return (param & 0x7FFFFFFFFFFFFFFFULL);
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_checkpoint(JNIEnv *env, jobject obj,
+                           jlong j_ns_delay, jlong j_ns_period)
+{
+    m5_checkpoint(j_ns_delay, j_ns_period);
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_reset_1stats(JNIEnv *env, jobject obj,
+                             jlong j_ns_delay, jlong j_ns_period)
+{
+    m5_reset_stats(j_ns_delay, j_ns_period);
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_dump_1stats(JNIEnv *env, jobject obj,
+                            jlong j_ns_delay, jlong j_ns_period)
+{
+    m5_dump_stats(j_ns_delay, j_ns_period);
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_dump_1reset_1stats(JNIEnv *env, jobject obj,
+                                  jlong j_ns_delay, jlong j_ns_period)
+{
+    m5_dump_reset_stats(j_ns_delay, j_ns_period);
+}
+
+JNIEXPORT jlong JNICALL
+Java_gem5_Ops_read_1file(JNIEnv *env, jobject obj,
+                           jbyteArray j_buffer, jlong j_len, jlong j_offset)
+{
+    jbyte *buffer = (*env)->GetByteArrayElements(env, j_buffer, 0);
+
+    uint64_t result = m5_read_file(buffer, j_len, j_offset);
+
+    (*env)->ReleaseByteArrayElements(env, j_buffer, buffer, JNI_ABORT);
+    return (result & 0x7FFFFFFFFFFFFFFFULL);
+}
+
+JNIEXPORT jlong JNICALL
+Java_gem5_Ops_write_1file(JNIEnv *env, jobject obj,
+                            jbyteArray j_buffer, jlong j_len, jlong j_offset,
+                            jstring j_filename)
+{
+    jbyte *buffer = (*env)->GetByteArrayElements(env, j_buffer, 0);
+    const char *filename = (*env)->GetStringUTFChars(env, j_filename, NULL);
+
+    uint64_t result = m5_write_file(buffer, j_len, j_offset, filename);
+
+    (*env)->ReleaseStringUTFChars(env, j_filename, filename);
+    (*env)->ReleaseByteArrayElements(env, j_buffer, buffer, JNI_ABORT);
+    return (result & 0x7FFFFFFFFFFFFFFFULL);
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_debug_1break(JNIEnv *env, jobject obj)
+{
+    m5_debug_break();
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_switch_1cpu (JNIEnv *env, jobject obj)
+{
+    m5_switch_cpu();
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_dist_1toggle_1sync(JNIEnv *env, jobject obj)
+{
+    m5_dist_toggle_sync();
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_add_symbol(JNIEnv *env, jobject obj,
+        jlong j_addr, jstring j_symbol)
+{
+    const char *symbol = (*env)->GetStringUTFChars(env, j_symbol, NULL);
+
+    m5_add_symbol(j_addr, symbol);
+
+    (*env)->ReleaseStringUTFChars(env, j_symbol, symbol);
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_load_1symbol(JNIEnv *env, jobject obj)
+{
+    m5_load_symbol();
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_panic(JNIEnv *env, jobject obj)
+{
+    m5_panic();
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_work_1begin(JNIEnv *env, jobject obj,
+                            jlong j_workid, jlong j_threadid)
+{
+    m5_work_begin(j_workid, j_threadid);
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_work_1end(JNIEnv *env, jobject obj,
+                          jlong j_workid, jlong j_threadid)
+{
+    m5_work_end(j_workid, j_threadid);
+}
+
diff --git a/util/m5/src/jni/gem5Op.java b/util/m5/src/jni/gem5Op.java
deleted file mode 100644 (file)
index 968c4a2..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2010 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.
- *
- * 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.
- */
-
-package jni;
-
-/**
- * Java class to implement JNI for m5Ops
- */
-
-public class gem5Op {
-    public native void arm(long address);
-    public native void quiesce();
-    public native void quiesce_ns(long ns);
-    public native void quiesce_cycle(long cycles);
-    public native long quiesce_time();
-    public native long rpns();
-    public native void wake_cpu(long cpuid);
-
-    public native void exit(long ns_delay);
-    public native void fail(long ns_delay, long code);
-    public native long sum(long a, long b, long c, long d, long e, long f);
-    public native long init_param(long key_str1, long key_str2);
-    public native void checkpoint(long ns_delay, long ns_period);
-    public native void reset_stats(long ns_delay, long ns_period);
-    public native void dump_stats(long ns_delay, long ns_period);
-    public native void dump_reset_stats(long ns_delay, long ns_period);
-    public native long read_file(byte[] buffer, long len, long offset);
-    public native long write_file(byte[] buffer, long len, long offset,
-                                  String filename);
-    public native void debug_break();
-    public native void switch_cpu();
-    public native void dist_toggle_sync();
-    public native void add_symbol(long addr, String symbol);
-    public native void load_symbol();
-    public native void panic();
-    public native void work_begin(long workid, long threadid);
-    public native void work_end(long workid, long threadid);
-
-}
diff --git a/util/m5/src/jni_gem5Op.c b/util/m5/src/jni_gem5Op.c
deleted file mode 100644 (file)
index fe8d41d..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright (c) 2010 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.
- *
- * 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 <stdint.h>
-
-#include "gem5/m5ops.h"
-#include "jni_gem5Op.h"
-
-/*
- * C library interface for gem5Op JNI
- */
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_arm(JNIEnv *env, jobject obj, jlong j_address)
-{
-    m5_arm(j_address);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_quiesce(JNIEnv *env, jobject obj)
-{
-    m5_quiesce();
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_quiesce_1ns(JNIEnv *env, jobject obj, jlong j_ns)
-{
-    m5_quiesce_ns(j_ns);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_quiesce_1cycle(JNIEnv *env, jobject obj, jlong j_cycles)
-{
-    m5_quiesce_cycle(j_cycles);
-}
-
-JNIEXPORT jlong JNICALL
-Java_jni_gem5Op_quiesce_1time(JNIEnv *env, jobject obj)
-{
-    uint64_t time = m5_quiesce_time();
-    if (time & 0x8000000000000000ULL)
-        printf("Truncated return value from quiesceTime() to 63 bits\n");
-    return (time & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-JNIEXPORT jlong JNICALL
-Java_jni_gem5Op_rpns(JNIEnv *env, jobject obj)
-{
-    uint64_t time = m5_rpns();
-    if (time & 0x8000000000000000ULL)
-        printf("Truncated return value from rpns() to 63 bits\n");
-    return (time & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_wake_1cpu(JNIEnv *env, jobject obj, jlong j_cpuid)
-{
-    m5_wake_cpu(j_cpuid);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_exit(JNIEnv *env, jobject obj, jlong j_ns_delay)
-{
-    m5_exit(j_ns_delay);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_fail(JNIEnv *env, jobject obj, jlong j_ns_delay, jlong j_code)
-{
-    m5_fail(j_ns_delay, j_code);
-}
-
-JNIEXPORT jlong JNICALL
-Java_jni_gem5Op_sum(JNIEnv *env, jobject obj, jlong a, jlong b, jlong c,
-                    jlong d, jlong e, jlong f)
-{
-    uint64_t result = m5_sum(a, b, c, d, e, f);
-    if (result & 0x8000000000000000ULL)
-        printf("Truncated return value from sum() to 63 bits\n");
-    return (result & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-JNIEXPORT jlong JNICALL
-Java_jni_gem5Op_init_1param(JNIEnv *env, jobject obj, jlong j_key_str1,
-                           jlong j_key_str2)
-{
-    uint64_t param = m5_init_param(j_key_str1, j_key_str2);
-    if (param & 0x8000000000000000ULL)
-        printf("Truncated return value from m_initparam() to 63 bits\n");
-    return (param & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_checkpoint(JNIEnv *env, jobject obj,
-                           jlong j_ns_delay, jlong j_ns_period)
-{
-    m5_checkpoint(j_ns_delay, j_ns_period);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_reset_1stats(JNIEnv *env, jobject obj,
-                             jlong j_ns_delay, jlong j_ns_period)
-{
-    m5_reset_stats(j_ns_delay, j_ns_period);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_dump_1stats(JNIEnv *env, jobject obj,
-                            jlong j_ns_delay, jlong j_ns_period)
-{
-    m5_dump_stats(j_ns_delay, j_ns_period);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_dump_1reset_1stats(JNIEnv *env, jobject obj,
-                                  jlong j_ns_delay, jlong j_ns_period)
-{
-    m5_dump_reset_stats(j_ns_delay, j_ns_period);
-}
-
-JNIEXPORT jlong JNICALL
-Java_jni_gem5Op_read_1file(JNIEnv *env, jobject obj,
-                           jbyteArray j_buffer, jlong j_len, jlong j_offset)
-{
-    jbyte *buffer = (*env)->GetByteArrayElements(env, j_buffer, 0);
-
-    uint64_t result = m5_read_file(buffer, j_len, j_offset);
-
-    (*env)->ReleaseByteArrayElements(env, j_buffer, buffer, JNI_ABORT);
-    return (result & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-JNIEXPORT jlong JNICALL
-Java_jni_gem5Op_write_1file(JNIEnv *env, jobject obj,
-                            jbyteArray j_buffer, jlong j_len, jlong j_offset,
-                            jstring j_filename)
-{
-    jbyte *buffer = (*env)->GetByteArrayElements(env, j_buffer, 0);
-    const char *filename = (*env)->GetStringUTFChars(env, j_filename, NULL);
-
-    uint64_t result = m5_write_file(buffer, j_len, j_offset, filename);
-
-    (*env)->ReleaseStringUTFChars(env, j_filename, filename);
-    (*env)->ReleaseByteArrayElements(env, j_buffer, buffer, JNI_ABORT);
-    return (result & 0x7FFFFFFFFFFFFFFFULL);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_debug_1break(JNIEnv *env, jobject obj)
-{
-    m5_debug_break();
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_switch_1cpu (JNIEnv *env, jobject obj)
-{
-    m5_switch_cpu();
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_dist_1toggle_1sync(JNIEnv *env, jobject obj)
-{
-    m5_dist_toggle_sync();
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_add_symbol(JNIEnv *env, jobject obj,
-        jlong j_addr, jstring j_symbol)
-{
-    const char *symbol = (*env)->GetStringUTFChars(env, j_symbol, NULL);
-
-    m5_add_symbol(j_addr, symbol);
-
-    (*env)->ReleaseStringUTFChars(env, j_symbol, symbol);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_load_1symbol(JNIEnv *env, jobject obj)
-{
-    m5_load_symbol();
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_panic(JNIEnv *env, jobject obj)
-{
-    m5_panic();
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_work_1begin(JNIEnv *env, jobject obj,
-                            jlong j_workid, jlong j_threadid)
-{
-    m5_work_begin(j_workid, j_threadid);
-}
-
-JNIEXPORT void JNICALL
-Java_jni_gem5Op_work_1end(JNIEnv *env, jobject obj,
-                          jlong j_workid, jlong j_threadid)
-{
-    m5_work_end(j_workid, j_threadid);
-}
-