From: Gabe Black Date: Tue, 24 Mar 2020 07:36:09 +0000 (-0700) Subject: util: Move source files into a src directory. X-Git-Tag: v20.0.0.0~223 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a959f28ec9d234c3016fcfb6328b2f2e3649d33b;p=gem5.git util: Move source files into a src directory. This also moves the Makefiles, which will still produce build output in the src directory. This is to prepare for a scons based build system which will create a separate build directory with build artifacts. Change-Id: I7c6d325e1d0a428656b2e3070b5e942515543696 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/27209 Tested-by: kokoro Reviewed-by: Daniel Carvalho Maintainer: Bobby R. Bruce --- diff --git a/util/m5/Android.mk b/util/m5/Android.mk deleted file mode 100644 index 34fb10ec9..000000000 --- a/util/m5/Android.mk +++ /dev/null @@ -1,21 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE := m5 -LOCAL_SRC_FILES := \ - m5.c - -ifeq ($(TARGET_ARCH),x86) - LOCAL_SRC_FILES += \ - m5op_x86.S -else ifeq ($(TARGET_ARCH),arm) - LOCAL_SRC_FILES += \ - m5op_arm.S -else ifeq ($(TARGET_ARCH),arm64) - LOCAL_SRC_FILES += \ - m5op_arm_A64.S -else - $(error "Unsupported TARGET_ARCH $(TARGET_ARCH)") -endif - -include $(BUILD_EXECUTABLE) diff --git a/util/m5/Makefile.aarch64 b/util/m5/Makefile.aarch64 deleted file mode 100644 index f0b649425..000000000 --- a/util/m5/Makefile.aarch64 +++ /dev/null @@ -1,95 +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. -# -# Copyright (c) 2005-2006 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. - -### If we are not compiling on an arm v8, we must use cross tools ### -ifneq ($(shell uname -m), aarch64) -CROSS_COMPILE?=aarch64-linux-gnu- -endif -CC=$(CROSS_COMPILE)gcc -AS=$(CROSS_COMPILE)as -LD=$(CROSS_COMPILE)ld -AR=$(CROSS_COMPILE)ar - -JC=javac -JH=javah -JR=jar -### JDK_PATH must be set to build gem5OpJni -#JDK_PATH=/path/to/jdk/version_number - -CFLAGS=-O2 -I $(JDK_PATH)/include/ -I $(JDK_PATH)/include/linux \ - -I../../include -march=armv8-a -LDFLAGS=-static -L. -lm5 - -LIB_OBJS=m5op_arm_A64.o m5_mmap.o -OBJS=m5.o -JNI_OBJS=m5op_arm_A64.o jni_gem5Op.o -LUA_OBJS=lua_gem5Op.o m5op_arm_A64.o m5_mmap.o - -### Need to install lua5.1 library to compile gem5OpLua.so -LUA_HEADER_INCLUDE=$(shell pkg-config --cflags lua51) -I/usr/include/x86_64-linux-gnu - -all: libm5.a m5 - -%.o: %.S - $(CC) $(CFLAGS) -o $@ -c $< - -%.o: %.c - $(CC) $(CFLAGS) -o $@ -c $< - -m5: $(OBJS) libm5.a - $(CC) -o $@ $^ $(LDFLAGS) - -libm5.a: $(LIB_OBJS) - $(AR) rcs $@ $^ - -gem5OpJni: gem5OpJni.jar $(JNI_OBJS) - $(CC) --shared -o lib$@.so $(JNI_OBJS) - -gem5OpJni.jar: - $(JC) jni/gem5Op.java; \ - $(JH) jni.gem5Op; \ - $(JR) cvf $@ jni/*.class - -lua_gem5Op.o: lua_gem5Op.c - $(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -o $@ -c $< - -gem5OpLua.so: $(LUA_OBJS) - $(CC) $(CFLAGS) $^ -o $@ -shared - -clean: - rm -f *.o m5 libgem5OpJni.so gem5OpJni.jar jni/*.class libm5.a gem5OpLua.so diff --git a/util/m5/Makefile.arm b/util/m5/Makefile.arm deleted file mode 100644 index 1fd1840fd..000000000 --- a/util/m5/Makefile.arm +++ /dev/null @@ -1,97 +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. -# -# Copyright (c) 2005-2006 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. - -### If we are not compiling on an arm, we must use cross tools ### -ifneq ($(shell uname -m), armv7l) -CROSS_COMPILE?=arm-linux-gnueabi- -endif -CC=$(CROSS_COMPILE)gcc -AS=$(CROSS_COMPILE)as -LD=$(CROSS_COMPILE)ld -AR=$(CROSS_COMPILE)ar - -JC=javac -JH=javah -JR=jar -### JDK_PATH must be set to build gem5OpJni -#JDK_PATH=/path/to/jdk/version_number - -CFLAGS=-O2 -I $(JDK_PATH)/include/ -I $(JDK_PATH)/include/linux \ - -I../../include -march=armv7-a -LDFLAGS=-L. -lm5 -static - -LIB_OBJS=m5op_arm.o m5_mmap.o -OBJS=m5.o -JNI_OBJS=m5op_arm.o jni_gem5Op.o -LUA_OBJS=lua_gem5Op.o m5op_arm.o m5_mmap.o - -### Need to install lua5.1 library to compile gem5OpLua.so -LUA_HEADER_INCLUDE=$(shell pkg-config --cflags lua51) \ - -I/usr/include/x86_64-linux-gnu - -all: libm5.a m5 - -%.o: %.S - $(CC) $(CFLAGS) -o $@ -c $< - -%.o: %.c - $(CC) $(CFLAGS) -o $@ -c $< - -m5: $(OBJS) libm5.a - $(CC) -o $@ $^ $(LDFLAGS) - -libm5.a: $(LIB_OBJS) - $(AR) rcs $@ $^ - -gem5OpJni: gem5OpJni.jar $(JNI_OBJS) - $(CC) --shared -o lib$@.so $(JNI_OBJS) - -gem5OpJni.jar: - $(JC) jni/gem5Op.java; \ - $(JH) jni.gem5Op; \ - $(JR) cvf $@ jni/*.class - -lua_gem5Op.o: lua_gem5Op.c - $(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -o $@ -c $< -fPIC - -gem5OpLua.so: $(LUA_OBJS) - $(CC) $(CFLAGS) $^ -o $@ -shared - -clean: - rm -f *.o m5 libgem5OpJni.so gem5OpJni.jar jni/*.class libm5.a \ - jni_gem5Op.h gem5OpLua.so diff --git a/util/m5/Makefile.sparc b/util/m5/Makefile.sparc deleted file mode 100644 index 9f19db9fb..000000000 --- a/util/m5/Makefile.sparc +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright (c) 2005-2006 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. - -### If we are not compiling on an alpha, we must use cross tools ### -ifneq ($(shell uname -m), sun4v) -CROSS_COMPILE?=sparc64-sun-solaris2.10- -endif -CC=$(CROSS_COMPILE)gcc -AS=$(CROSS_COMPILE)as -LD=$(CROSS_COMPILE)ld - -CFLAGS=-O2 -m64 -I../../include -OBJS=m5.o m5op_sparc.o m5_mmap.o - -all: m5 - -%.o: %.S - $(CC) $(CFLAGS) -o $@ -c $< - -%.o: %.c - $(CC) $(CFLAGS) -o $@ -c $< - -m5: $(OBJS) - $(CC) -m64 -o $@ $(OBJS) - -clean: - rm -f *.o m5 diff --git a/util/m5/Makefile.thumb b/util/m5/Makefile.thumb deleted file mode 100644 index 1d7ad518e..000000000 --- a/util/m5/Makefile.thumb +++ /dev/null @@ -1,71 +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. -# -# Copyright (c) 2005-2006 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. - -### If we are not compiling on an arm, we must use cross tools ### -ifneq ($(shell uname -m), arm) -CROSS_COMPILE?=arm-none-linux-gnueabi- -endif -CC=$(CROSS_COMPILE)gcc -AS=$(CROSS_COMPILE)as -LD=$(CROSS_COMPILE)ld -AR=$(CROSS_COMPILE)ar - -#CFLAGS=-O2 -march=armv7 -mthumb -I../../include -CFLAGS=-O2 -mthumb -I../../include -LDFLAGS=-L. -lm5 - -OBJS=m5.o -LIB_OBJS=m5op_arm.o m5_mmap.o - -all: libm5.a m5 - -%.o: %.S - $(CC) $(CFLAGS) -o $@ -c $< - -%.o: %.c - $(CC) $(CFLAGS) -o $@ -c $< - -m5: $(OBJS) libm5.a - $(CC) -o $@ -march=armv7 -mthumb $(OBJS) $(LDFLAGS) - -libm5.a: $(LIB_OBJS) - $(AR) rcs $@ $^ - - -clean: - rm -f *.o m5 libm5.a diff --git a/util/m5/Makefile.x86 b/util/m5/Makefile.x86 deleted file mode 100644 index fae81bbae..000000000 --- a/util/m5/Makefile.x86 +++ /dev/null @@ -1,63 +0,0 @@ -# Copyright (c) 2005-2006 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. - -CC=gcc -AS=as -LD=ld - -CFLAGS?=-O2 -DM5OP_ADDR=0xFFFF0000 -I../../include -OBJS=m5.o m5op_x86.o m5_mmap.o -LUA_HEADER_INCLUDE=$(shell pkg-config --cflags-only-I lua51) -LUA_OBJS=lua_gem5Op.opic m5op_x86.opic m5_mmap.opic - -all: m5 - -%.o: %.S - $(CC) $(CFLAGS) -o $@ -c $< - -%.o: %.c - $(CC) $(CFLAGS) -o $@ -c $< - -%.opic : %.S - $(CC) $(CFLAGS) -fPIC -o $@ -c $< - -%.opic : %.c - $(CC) $(CFLAGS) -fPIC -o $@ -c $< - -m5: $(OBJS) - $(CC) -o $@ $(OBJS) -no-pie - -m5op_x86.opic: m5op_x86.S - $(CC) $(CFLAGS) -DM5OP_PIC -fPIC -o $@ -c $< - -lua_gem5Op.opic: lua_gem5Op.c - $(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -fPIC -o $@ -c $< - -gem5OpLua.so: $(LUA_OBJS) - $(CC) $(CFLAGS) -fPIC $^ -o $@ -shared - -clean: - rm -f *.o *.opic m5 gem5OpLua.so diff --git a/util/m5/jni/gem5Op.java b/util/m5/jni/gem5Op.java deleted file mode 100644 index 579ff3455..000000000 --- a/util/m5/jni/gem5Op.java +++ /dev/null @@ -1,66 +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 quiesceNs(long ns); - public native void quiesceCycle(long cycles); - public native long quiesceTime(); - public native long rpns(); - public native void wakeCPU(long cpuid); - - public native void exit(long ns_delay); - public native void fail(long ns_delay, long code); - public native long initparam(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 dumpreset_stats(long ns_delay, long ns_period); - public native void debugbreak(); - public native void switchcpu(); - 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/jni_gem5Op.c b/util/m5/jni_gem5Op.c deleted file mode 100644 index 4d1075083..000000000 --- a/util/m5/jni_gem5Op.c +++ /dev/null @@ -1,177 +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 - -#include "jni_gem5Op.h" -#include "m5op.h" - -/** - C library interface for gem5Op JNI - -*/ - -JNIEXPORT void JNICALL -Java_jni_gem5Op_arm(JNIEnv *env, jobject obj, jlong j_address) -{ - arm(j_address); -} - -JNIEXPORT void JNICALL -Java_jni_gem5Op_quiesce(JNIEnv *env, jobject obj) -{ - quiesce(); -} - -JNIEXPORT void JNICALL -Java_jni_gem5Op_quiesceNs(JNIEnv *env, jobject obj, jlong j_ns) -{ - quiesceNs(j_ns); -} - -JNIEXPORT void JNICALL -Java_jni_gem5Op_quiesceCycle(JNIEnv *env, jobject obj, jlong j_cycles) -{ - quiesceCycle(j_cycles); -} - -JNIEXPORT jlong JNICALL -Java_jni_gem5Op_quiesceTime(JNIEnv *env, jobject obj) -{ - uint64_t time = quiesceTime(); - 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 = rpns(); - if (time & 0x8000000000000000ULL) - printf("Truncated return value from rpns() to 63 bits\n"); - return (time & 0x7FFFFFFFFFFFFFFFULL); -} - -JNIEXPORT void JNICALL -Java_jni_gem5Op_wakeCPU(JNIEnv *env, jobject obj, jlong j_cpuid) -{ - wakeCPU(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_initparam(JNIEnv *env, jobject obj, jlong j_key_str1, - jlong j_key_str2) -{ - uint64_t param = m5_initparam(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_dumpreset_1stats(JNIEnv *env, jobject obj, - jlong j_ns_delay, jlong j_ns_period) -{ - m5_dumpreset_stats(j_ns_delay, j_ns_period); -} - -JNIEXPORT void JNICALL -Java_jni_gem5Op_debugbreak(JNIEnv *env, jobject obj) -{ - m5_debugbreak(); -} - -JNIEXPORT void JNICALL -Java_jni_gem5Op_switchcpu (JNIEnv *env, jobject obj) -{ - m5_switchcpu(); -} - -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); -} - diff --git a/util/m5/lua_gem5Op.c b/util/m5/lua_gem5Op.c deleted file mode 100644 index 89aec1432..000000000 --- a/util/m5/lua_gem5Op.c +++ /dev/null @@ -1,278 +0,0 @@ -/* Copyright (c) 2017 Hanhwi Jang - * 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 -#include -#include -#include -#include - -#include - -#include "m5_mmap.h" - -static int -do_arm(lua_State *L) -{ - uint64_t address = lua_tointeger(L, 1); - m5_arm(address); - return 0; -} - -static int -do_quiesce(lua_State *L) -{ - m5_quiesce(); - return 0; -} - -static int -do_quiesce_ns(lua_State *L) -{ - uint64_t ns = lua_tointeger(L, 1); - m5_quiesce_ns(ns); - return 0; -} - -static int -do_quiesce_cycle(lua_State *L) -{ - uint64_t cycles = lua_tointeger(L, 1); - m5_quiesce_cycle(cycles); - return 0; -} - -static int -do_quiesce_time(lua_State *L) -{ - uint64_t ns = m5_quiesce_time(); - lua_pushinteger(L, ns); - return 1; -} - -static int -do_rpns(lua_State *L) -{ - uint64_t ns = m5_rpns(); - lua_pushinteger(L, ns); - return 1; -} - -static int -do_wake_cpu(lua_State *L) -{ - uint64_t cpuid = lua_tointeger(L, 1); - m5_wake_cpu(cpuid); - return 0; -} - -static int -do_exit(lua_State *L) -{ - uint64_t ns_delay = lua_tointeger(L, 1); - m5_exit(ns_delay); - return 0; -} - -static int -do_fail(lua_State *L) -{ - uint64_t ns_delay = lua_tointeger(L, 1); - uint64_t code = lua_tointeger(L, 2); - m5_fail(ns_delay, code); - return 0; -} - -static int -do_init_param(lua_State *L) -{ - uint64_t key_str1 = lua_tointeger(L, 1); - uint64_t key_str2 = lua_tointeger(L, 2); - lua_pushinteger(L, m5_init_param(key_str1, key_str2)); - return 1; -} - -static int -do_checkpoint(lua_State *L) -{ - uint64_t delay = lua_tointeger(L, 1); - uint64_t period = lua_tointeger(L, 2); - m5_checkpoint(delay, period); - return 0; -} - -static int -do_reset_stats(lua_State *L) -{ - uint64_t ns_delay = lua_tointeger(L, 1); - uint64_t ns_period = lua_tointeger(L, 2); - m5_reset_stats(ns_delay, ns_period); - return 0; -} - -static int -do_dump_stats(lua_State *L) -{ - uint64_t delay = lua_tointeger(L, 1); - uint64_t period = lua_tointeger(L, 2); - m5_dump_stats(delay, period); - return 0; -} - -static int -do_dump_reset_stats(lua_State *L) -{ - uint64_t delay = lua_tointeger(L, 1); - uint64_t period = lua_tointeger(L, 2); - m5_dump_reset_stats(delay, period); - return 0; -} - -static int -do_read_file(lua_State *L) -{ - uint64_t len = lua_tointeger(L, 1); - uint64_t offset = lua_tointeger(L, 2); - char *buf = malloc(len); - uint64_t readlen = m5_read_file(buf, len, offset); - lua_pushlstring(L, buf, readlen); - return 1; -} - -static int -do_write_file(lua_State *L) -{ - const char* buf = lua_tostring(L, 1); - uint64_t len = lua_tointeger(L, 2); - assert(len <= lua_strlen(L, 1)); - uint64_t offset = lua_tointeger(L, 3); - const char *filename = lua_tostring(L, 4); - uint64_t w_len = m5_write_file((void *)buf, len, offset, filename); - lua_pushinteger(L, w_len); - return 1; -} - -static int -do_debug_break(lua_State *L) -{ - m5_debug_break(); - return 0; -} - -static int -do_switch_cpu(lua_State *L) -{ - m5_switch_cpu(); - return 0; -} - -static int -do_dist_toggle_sync(lua_State *L) -{ - m5_dist_toggle_sync(); - return 0; -} - -static int -do_add_symbol(lua_State *L) -{ - uint64_t addr = lua_tointeger(L, 1); - char *string = (char*) lua_tostring(L, 2); - m5_add_symbol(addr, string); - return 0; -} - -static int -do_loadsymbol(lua_State *L) -{ - m5_load_symbol(); - return 0; -} - -static int -do_panic(lua_State *L) -{ - m5_panic(); - return 0; -} - -static int -do_work_begin(lua_State *L) -{ - uint64_t workid = lua_tointeger(L, 1); - uint64_t threadid = lua_tointeger(L, 2); - m5_work_begin(workid, threadid); - return 0; -} - -static int -do_work_end(lua_State *L) -{ - uint64_t workid = lua_tointeger(L, 1); - uint64_t threadid = lua_tointeger(L, 2); - m5_work_end(workid, threadid); - return 0; -} - -int -luaopen_gem5OpLua(lua_State *L) -{ - map_m5_mem(); -#define ADD_FUNC(fname) do{ \ - lua_pushcfunction(L, fname); \ - lua_setfield(L, -2, #fname); \ - }while (0) - - lua_newtable(L); - ADD_FUNC(do_arm); - ADD_FUNC(do_quiesce); - ADD_FUNC(do_quiesce_ns); - ADD_FUNC(do_quiesce_cycle); - ADD_FUNC(do_quiesce_time); - ADD_FUNC(do_rpns); - ADD_FUNC(do_wake_cpu); - ADD_FUNC(do_exit); - ADD_FUNC(do_fail); - ADD_FUNC(do_init_param); - ADD_FUNC(do_checkpoint); - ADD_FUNC(do_reset_stats); - ADD_FUNC(do_dump_stats); - ADD_FUNC(do_dump_reset_stats); - ADD_FUNC(do_read_file); - ADD_FUNC(do_write_file); - ADD_FUNC(do_debug_break); - ADD_FUNC(do_switch_cpu); - ADD_FUNC(do_dist_toggle_sync); - ADD_FUNC(do_add_symbol); - ADD_FUNC(do_loadsymbol); - ADD_FUNC(do_panic); - ADD_FUNC(do_work_begin); - ADD_FUNC(do_work_end); -#undef ADD_FUNC - return 1; -} diff --git a/util/m5/m5.c b/util/m5/m5.c deleted file mode 100644 index 4d14ed907..000000000 --- a/util/m5/m5.c +++ /dev/null @@ -1,399 +0,0 @@ -/* - * Copyright (c) 2011, 2017 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) 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. - */ - -#ifdef linux -#define _GNU_SOURCE -#include - -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include "m5_mmap.h" - -char *progname; -char *command = "unspecified"; -void usage(); - -void -parse_int_args(int argc, char *argv[], uint64_t ints[], int len) -{ - if (argc > len) - usage(); - -// On 32 bit platforms we need to use strtoull to do the conversion -#ifdef __LP64__ -#define strto64 strtoul -#else -#define strto64 strtoull -#endif - int i; - for (i = 0; i < len; ++i) - ints[i] = (i < argc) ? strto64(argv[i], NULL, 0) : 0; - -#undef strto64 -} - -void -parse_str_args_to_regs(int argc, char *argv[], uint64_t regs[], int len) -{ - if (argc > 1 || (argc > 0 && strlen(argv[0]) > len * sizeof(uint64_t))) - usage(); - - int i; - for (i = 0; i < len; i++) - regs[i] = 0; - - if (argc == 0) - return; - - int n; - for (n = 0, i = 0; i < len && n < strlen(argv[0]); n++) { - *((char *)(®s[i]) + (n % 8)) = argv[0][n]; - if ((n % 8) == 7) - i++; - } -} - -int -read_file(int dest_fid) -{ - uint8_t buf[256*1024]; - int offset = 0; - int len, ret; - - // 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)); - - while ((len = m5_read_file(buf, sizeof(buf), offset)) > 0) { - uint8_t *base = buf; - offset += len; - do { - ret = write(dest_fid, base, len); - if (ret < 0) { - perror("Failed to write file"); - exit(2); - } else if (ret == 0) { - fprintf(stderr, "Failed to write file: " - "Unhandled short write\n"); - exit(2); - } - - base += ret; - len -= ret; - } while (len); - } - - return offset; -} - -void -write_file(const char *filename, const char *host_filename) -{ - fprintf(stderr, "opening %s\n", filename); - int src_fid = open(filename, O_RDONLY); - - if (src_fid < 0) { - fprintf(stderr, "error opening %s\n", filename); - return; - } - - char buf[256*1024]; - int offset = 0; - int len; - int bytes = 0; - - memset(buf, 0, sizeof(buf)); - - while ((len = read(src_fid, buf, sizeof(buf))) > 0) { - bytes += m5_write_file(buf, len, offset, host_filename); - offset += len; - } - fprintf(stderr, "written %d bytes\n", bytes); - - close(src_fid); -} - -void -do_exit(int argc, char *argv[]) -{ - if (argc > 1) - usage(); - - uint64_t ints[1]; - parse_int_args(argc, argv, ints, 1); - m5_exit(ints[0]); -} - -void -do_fail(int argc, char *argv[]) -{ - if (argc < 1 || argc > 2) - usage(); - - uint64_t ints[2] = {0,0}; - parse_int_args(argc, argv, ints, argc); - m5_fail(ints[1], ints[0]); -} - -void -do_reset_stats(int argc, char *argv[]) -{ - uint64_t ints[2]; - parse_int_args(argc, argv, ints, 2); - m5_reset_stats(ints[0], ints[1]); -} - -void -do_dump_stats(int argc, char *argv[]) -{ - uint64_t ints[2]; - parse_int_args(argc, argv, ints, 2); - m5_dump_stats(ints[0], ints[1]); -} - -void -do_dump_reset_stats(int argc, char *argv[]) -{ - uint64_t ints[2]; - parse_int_args(argc, argv, ints, 2); - m5_dump_reset_stats(ints[0], ints[1]); -} - -void -do_read_file(int argc, char *argv[]) -{ - if (argc > 0) - usage(); - - read_file(STDOUT_FILENO); -} - -void -do_write_file(int argc, char *argv[]) -{ - if (argc != 1 && argc != 2) - usage(); - - const char *filename = argv[0]; - const char *host_filename = (argc == 2) ? argv[1] : argv[0]; - - write_file(filename, host_filename); -} - -void -do_exec_file(int argc, char *argv[]) -{ - if (argc > 0) - usage(); - - const char *destname = "/tmp/execfile"; - - int fid = open(destname, O_WRONLY, 0777); - int len = read_file(fid); - close(fid); - if (len > 0) { - execl(destname, "execfile", NULL); - err(1, "execl failed!"); - } -} - -void -do_checkpoint(int argc, char *argv[]) -{ - uint64_t ints[2]; - parse_int_args(argc, argv, ints, 2); - m5_checkpoint(ints[0], ints[1]); -} - -void -do_addsymbol(int argc, char *argv[]) -{ - if (argc != 2) - usage(); - - uint64_t addr = strtoul(argv[0], NULL, 0); - char *symbol = argv[1]; - m5_add_symbol(addr, symbol); -} - - -void -do_loadsymbol(int argc, char *argv[]) -{ - if (argc > 0) - usage(); - - m5_load_symbol(); -} - -void -do_initparam(int argc, char *argv[]) -{ - if (argc > 1) - usage(); - - uint64_t key_str[2]; - parse_str_args_to_regs(argc, argv, key_str, 2); - uint64_t val = m5_init_param(key_str[0], key_str[1]); - printf("%"PRIu64, val); -} - -void -do_sw99param(int argc, char *argv[]) -{ - if (argc != 0) - usage(); - - uint64_t param = m5_init_param(0, 0); - - // run-time, rampup-time, rampdown-time, warmup-time, connections - printf("%"PRId64" %"PRId64" %"PRId64" %"PRId64" %"PRId64, - (param >> 48) & 0xfff, - (param >> 36) & 0xfff, (param >> 24) & 0xfff, - (param >> 12) & 0xfff, (param >> 0) & 0xfff); -} - -#ifdef linux -void -do_pin(int argc, char *argv[]) -{ - if (argc < 2) - usage(); - - cpu_set_t mask; - CPU_ZERO(&mask); - - const char *sep = ","; - char *target = strtok(argv[0], sep); - while (target) { - CPU_SET(atoi(target), &mask); - target = strtok(NULL, sep); - } - - if (sched_setaffinity(0, sizeof(cpu_set_t), &mask) < 0) - err(1, "setaffinity"); - - execvp(argv[1], &argv[1]); - err(1, "execvp failed!"); -} -#endif - -struct MainFunc -{ - char *name; - void (*func)(int argc, char *argv[]); - char *usage; -}; - -struct MainFunc mainfuncs[] = { - { "exit", do_exit, "[delay]" }, - { "fail", do_fail, " [delay]" }, - { "resetstats", do_reset_stats, "[delay [period]]" }, - { "dumpstats", do_dump_stats, "[delay [period]]" }, - { "dumpresetstats", do_dump_reset_stats, "[delay [period]]" }, - { "readfile", do_read_file, "" }, - { "writefile", do_write_file, " [host filename]" }, - { "execfile", do_exec_file, "" }, - { "checkpoint", do_checkpoint, "[delay [period]]" }, - { "addsymbol", do_addsymbol, "
" }, - { "loadsymbol", do_loadsymbol, "" }, - { "initparam", do_initparam, "[key] // key must be shorter" - " than 16 chars" }, - { "sw99param", do_sw99param, "" }, -#ifdef linux - { "pin", do_pin, " [args ...]" } -#endif -}; -int numfuncs = sizeof(mainfuncs) / sizeof(mainfuncs[0]); - -void -usage() -{ - int i; - - for (i = 0; i < numfuncs; ++i) { - char *header = i ? "" : "usage:"; - fprintf(stderr, "%-6s %s %s %s\n", - header, progname, mainfuncs[i].name, mainfuncs[i].usage); - } - fprintf(stderr, "\n"); - fprintf(stderr, "All times in nanoseconds!\n"); - - exit(1); -} - -int -main(int argc, char *argv[]) -{ - progname = argv[0]; - if (argc < 2) - usage(1); - - map_m5_mem(); - - command = argv[1]; - - argv += 2; - argc -= 2; - - int i; - for (i = 0; i < numfuncs; ++i) { - if (strcmp(command, mainfuncs[i].name) != 0) - continue; - - mainfuncs[i].func(argc, argv); - exit(0); - } - - usage(1); -} diff --git a/util/m5/m5_mmap.c b/util/m5/m5_mmap.c deleted file mode 100644 index 79de59baa..000000000 --- a/util/m5/m5_mmap.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2011, 2017 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) 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 -#include -#include -#include -#include -#include - -#include "m5_mmap.h" - -void *m5_mem = NULL; - -void -map_m5_mem() -{ -#ifdef M5OP_ADDR - int fd; - - fd = open("/dev/mem", O_RDWR | O_SYNC); - if (fd == -1) { - perror("Can't open /dev/mem"); - exit(1); - } - - m5_mem = mmap(NULL, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, - M5OP_ADDR); - if (!m5_mem) { - perror("Can't mmap /dev/mem"); - exit(1); - } -#endif -} diff --git a/util/m5/m5_mmap.h b/util/m5/m5_mmap.h deleted file mode 100644 index d32857f0b..000000000 --- a/util/m5/m5_mmap.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2011, 2017 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) 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. - */ - -#ifndef __UTIL_M5_MMAP_H__ -#define __UTIL_M5_MMAP_H__ - -#include -#include - -extern void *m5_mem; - -void map_m5_mem(); - -#endif diff --git a/util/m5/m5op_arm.S b/util/m5/m5op_arm.S deleted file mode 100644 index bd3bb4dc6..000000000 --- a/util/m5/m5op_arm.S +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2010, 2016 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) 2003-2006 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. - */ -.syntax unified -#ifdef __thumb__ -.thumb -#endif - -#include - -.text - -.macro m5op_func name, func - .align 2 - .globl \name -\name: -#ifdef __thumb__ - .short 0xEE00 | \func - .short 0x0110 -#else - .long 0xEE000110 | (\func << 16) -#endif - mov pc,lr -.endm - -.text -#define M5OP(name, func) m5op_func name, func - M5OP_FOREACH -#undef M5OP diff --git a/util/m5/m5op_arm_A64.S b/util/m5/m5op_arm_A64.S deleted file mode 100644 index c0224e21b..000000000 --- a/util/m5/m5op_arm_A64.S +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2010-2013, 2016-2017 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) 2003-2006 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 - -#ifdef M5OP_ADDR -.macro m5op_func, name, func - .globl \name - \name: - ldr x9, m5_mem - movz x10, #(\func << 8) - ldr x0, [ x9, x10 ] - ret -.endm -#else -.macro m5op_func, name, func - .globl \name - \name: - .long 0xff000110 | (\func << 16) - ret -.endm -#endif - -.text -#define M5OP(name, func) m5op_func name, func - M5OP_FOREACH -#undef M5OP diff --git a/util/m5/m5op_sparc.S b/util/m5/m5op_sparc.S deleted file mode 100644 index 9ed9a99cc..000000000 --- a/util/m5/m5op_sparc.S +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2003-2006 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. - */ - -#define m5_op 0x2 -#define m5_op3 0x37 - -#include - -.macro m5op_func name, func - .section ".text"; - .align 4; - .global \name; - .type \name, #function; -\name: - retl - .long (m5_op) << 30 | (m5_op3) << 19 | (\func) << 7; - .size \name, (.-\name) -.endm - -#define M5OP(name, func) m5op_func name, func - M5OP_FOREACH -#undef M5OP diff --git a/util/m5/m5op_x86.S b/util/m5/m5op_x86.S deleted file mode 100644 index cd83a9412..000000000 --- a/util/m5/m5op_x86.S +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2003-2006 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 - -/* - Note: The ABI for pseudo ops using the M5OP_ADDR is defined in - src/arch/x86/pseudo_inst_abi.hh. If the ABI is changed below, it's likely - that the ABI in the arch directory will also need to be updated. - - The ABI for the magic instruction-based pseudo ops is not affected by this. -*/ - -#if defined(M5OP_ADDR) && defined(M5OP_PIC) -/* Use the memory mapped m5op interface */ -#define TWO_BYTE_OP(name, number) \ - .globl name; \ - .func name; \ -name: \ - mov m5_mem@gotpcrel(%rip), %r11; \ - mov (%r11), %r11; \ - mov $number, %rax; \ - shl $8, %rax; \ - mov 0(%r11, %rax, 1), %rax; \ - ret; \ - .endfunc; - -#elif defined(M5OP_ADDR) && !defined(M5OP_PIC) -/* Use the memory mapped m5op interface */ -#define TWO_BYTE_OP(name, number) \ - .globl name; \ - .func name; \ -name: \ - mov m5_mem, %r11; \ - mov $number, %rax; \ - shl $8, %rax; \ - mov 0(%r11, %rax, 1), %rax; \ - ret; \ - .endfunc; - -#else -/* Use the magic instruction based m5op interface. This does not work - * in virtualized environments. - */ - -#define TWO_BYTE_OP(name, number) \ - .globl name; \ - .func name; \ -name: \ - .byte 0x0F, 0x04; \ - .word number; \ - ret; \ - .endfunc; - -#endif - -#define M5OP(name, number) TWO_BYTE_OP(name, number) - M5OP_FOREACH -#undef M5OP diff --git a/util/m5/src/Android.mk b/util/m5/src/Android.mk new file mode 100644 index 000000000..34fb10ec9 --- /dev/null +++ b/util/m5/src/Android.mk @@ -0,0 +1,21 @@ +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE := m5 +LOCAL_SRC_FILES := \ + m5.c + +ifeq ($(TARGET_ARCH),x86) + LOCAL_SRC_FILES += \ + m5op_x86.S +else ifeq ($(TARGET_ARCH),arm) + LOCAL_SRC_FILES += \ + m5op_arm.S +else ifeq ($(TARGET_ARCH),arm64) + LOCAL_SRC_FILES += \ + m5op_arm_A64.S +else + $(error "Unsupported TARGET_ARCH $(TARGET_ARCH)") +endif + +include $(BUILD_EXECUTABLE) diff --git a/util/m5/src/Makefile.aarch64 b/util/m5/src/Makefile.aarch64 new file mode 100644 index 000000000..c1c084d00 --- /dev/null +++ b/util/m5/src/Makefile.aarch64 @@ -0,0 +1,95 @@ +# 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. +# +# Copyright (c) 2005-2006 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. + +### If we are not compiling on an arm v8, we must use cross tools ### +ifneq ($(shell uname -m), aarch64) +CROSS_COMPILE?=aarch64-linux-gnu- +endif +CC=$(CROSS_COMPILE)gcc +AS=$(CROSS_COMPILE)as +LD=$(CROSS_COMPILE)ld +AR=$(CROSS_COMPILE)ar + +JC=javac +JH=javah +JR=jar +### JDK_PATH must be set to build gem5OpJni +#JDK_PATH=/path/to/jdk/version_number + +CFLAGS=-O2 -I $(JDK_PATH)/include/ -I $(JDK_PATH)/include/linux \ + -I../../../include -march=armv8-a +LDFLAGS=-static -L. -lm5 + +LIB_OBJS=m5op_arm_A64.o m5_mmap.o +OBJS=m5.o +JNI_OBJS=m5op_arm_A64.o jni_gem5Op.o +LUA_OBJS=lua_gem5Op.o m5op_arm_A64.o m5_mmap.o + +### Need to install lua5.1 library to compile gem5OpLua.so +LUA_HEADER_INCLUDE=$(shell pkg-config --cflags lua51) -I/usr/include/x86_64-linux-gnu + +all: libm5.a m5 + +%.o: %.S + $(CC) $(CFLAGS) -o $@ -c $< + +%.o: %.c + $(CC) $(CFLAGS) -o $@ -c $< + +m5: $(OBJS) libm5.a + $(CC) -o $@ $^ $(LDFLAGS) + +libm5.a: $(LIB_OBJS) + $(AR) rcs $@ $^ + +gem5OpJni: gem5OpJni.jar $(JNI_OBJS) + $(CC) --shared -o lib$@.so $(JNI_OBJS) + +gem5OpJni.jar: + $(JC) jni/gem5Op.java; \ + $(JH) jni.gem5Op; \ + $(JR) cvf $@ jni/*.class + +lua_gem5Op.o: lua_gem5Op.c + $(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -o $@ -c $< + +gem5OpLua.so: $(LUA_OBJS) + $(CC) $(CFLAGS) $^ -o $@ -shared + +clean: + rm -f *.o m5 libgem5OpJni.so gem5OpJni.jar jni/*.class libm5.a gem5OpLua.so diff --git a/util/m5/src/Makefile.arm b/util/m5/src/Makefile.arm new file mode 100644 index 000000000..042cf0069 --- /dev/null +++ b/util/m5/src/Makefile.arm @@ -0,0 +1,97 @@ +# 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. +# +# Copyright (c) 2005-2006 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. + +### If we are not compiling on an arm, we must use cross tools ### +ifneq ($(shell uname -m), armv7l) +CROSS_COMPILE?=arm-linux-gnueabi- +endif +CC=$(CROSS_COMPILE)gcc +AS=$(CROSS_COMPILE)as +LD=$(CROSS_COMPILE)ld +AR=$(CROSS_COMPILE)ar + +JC=javac +JH=javah +JR=jar +### JDK_PATH must be set to build gem5OpJni +#JDK_PATH=/path/to/jdk/version_number + +CFLAGS=-O2 -I $(JDK_PATH)/include/ -I $(JDK_PATH)/include/linux \ + -I../../../include -march=armv7-a +LDFLAGS=-L. -lm5 -static + +LIB_OBJS=m5op_arm.o m5_mmap.o +OBJS=m5.o +JNI_OBJS=m5op_arm.o jni_gem5Op.o +LUA_OBJS=lua_gem5Op.o m5op_arm.o m5_mmap.o + +### Need to install lua5.1 library to compile gem5OpLua.so +LUA_HEADER_INCLUDE=$(shell pkg-config --cflags lua51) \ + -I/usr/include/x86_64-linux-gnu + +all: libm5.a m5 + +%.o: %.S + $(CC) $(CFLAGS) -o $@ -c $< + +%.o: %.c + $(CC) $(CFLAGS) -o $@ -c $< + +m5: $(OBJS) libm5.a + $(CC) -o $@ $^ $(LDFLAGS) + +libm5.a: $(LIB_OBJS) + $(AR) rcs $@ $^ + +gem5OpJni: gem5OpJni.jar $(JNI_OBJS) + $(CC) --shared -o lib$@.so $(JNI_OBJS) + +gem5OpJni.jar: + $(JC) jni/gem5Op.java; \ + $(JH) jni.gem5Op; \ + $(JR) cvf $@ jni/*.class + +lua_gem5Op.o: lua_gem5Op.c + $(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -o $@ -c $< -fPIC + +gem5OpLua.so: $(LUA_OBJS) + $(CC) $(CFLAGS) $^ -o $@ -shared + +clean: + rm -f *.o m5 libgem5OpJni.so gem5OpJni.jar jni/*.class libm5.a \ + jni_gem5Op.h gem5OpLua.so diff --git a/util/m5/src/Makefile.sparc b/util/m5/src/Makefile.sparc new file mode 100644 index 000000000..242478436 --- /dev/null +++ b/util/m5/src/Makefile.sparc @@ -0,0 +1,50 @@ +# Copyright (c) 2005-2006 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. + +### If we are not compiling on an alpha, we must use cross tools ### +ifneq ($(shell uname -m), sun4v) +CROSS_COMPILE?=sparc64-sun-solaris2.10- +endif +CC=$(CROSS_COMPILE)gcc +AS=$(CROSS_COMPILE)as +LD=$(CROSS_COMPILE)ld + +CFLAGS=-O2 -m64 -I../../../include +OBJS=m5.o m5op_sparc.o m5_mmap.o + +all: m5 + +%.o: %.S + $(CC) $(CFLAGS) -o $@ -c $< + +%.o: %.c + $(CC) $(CFLAGS) -o $@ -c $< + +m5: $(OBJS) + $(CC) -m64 -o $@ $(OBJS) + +clean: + rm -f *.o m5 diff --git a/util/m5/src/Makefile.thumb b/util/m5/src/Makefile.thumb new file mode 100644 index 000000000..1eb5b3d5d --- /dev/null +++ b/util/m5/src/Makefile.thumb @@ -0,0 +1,71 @@ +# 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. +# +# Copyright (c) 2005-2006 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. + +### If we are not compiling on an arm, we must use cross tools ### +ifneq ($(shell uname -m), arm) +CROSS_COMPILE?=arm-none-linux-gnueabi- +endif +CC=$(CROSS_COMPILE)gcc +AS=$(CROSS_COMPILE)as +LD=$(CROSS_COMPILE)ld +AR=$(CROSS_COMPILE)ar + +#CFLAGS=-O2 -march=armv7 -mthumb -I../../include +CFLAGS=-O2 -mthumb -I../../../include +LDFLAGS=-L. -lm5 + +OBJS=m5.o +LIB_OBJS=m5op_arm.o m5_mmap.o + +all: libm5.a m5 + +%.o: %.S + $(CC) $(CFLAGS) -o $@ -c $< + +%.o: %.c + $(CC) $(CFLAGS) -o $@ -c $< + +m5: $(OBJS) libm5.a + $(CC) -o $@ -march=armv7 -mthumb $(OBJS) $(LDFLAGS) + +libm5.a: $(LIB_OBJS) + $(AR) rcs $@ $^ + + +clean: + rm -f *.o m5 libm5.a diff --git a/util/m5/src/Makefile.x86 b/util/m5/src/Makefile.x86 new file mode 100644 index 000000000..59493ce3a --- /dev/null +++ b/util/m5/src/Makefile.x86 @@ -0,0 +1,63 @@ +# Copyright (c) 2005-2006 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. + +CC=gcc +AS=as +LD=ld + +CFLAGS?=-O2 -DM5OP_ADDR=0xFFFF0000 -I../../../include +OBJS=m5.o m5op_x86.o m5_mmap.o +LUA_HEADER_INCLUDE=$(shell pkg-config --cflags-only-I lua51) +LUA_OBJS=lua_gem5Op.opic m5op_x86.opic m5_mmap.opic + +all: m5 + +%.o: %.S + $(CC) $(CFLAGS) -o $@ -c $< + +%.o: %.c + $(CC) $(CFLAGS) -o $@ -c $< + +%.opic : %.S + $(CC) $(CFLAGS) -fPIC -o $@ -c $< + +%.opic : %.c + $(CC) $(CFLAGS) -fPIC -o $@ -c $< + +m5: $(OBJS) + $(CC) -o $@ $(OBJS) -no-pie + +m5op_x86.opic: m5op_x86.S + $(CC) $(CFLAGS) -DM5OP_PIC -fPIC -o $@ -c $< + +lua_gem5Op.opic: lua_gem5Op.c + $(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -fPIC -o $@ -c $< + +gem5OpLua.so: $(LUA_OBJS) + $(CC) $(CFLAGS) -fPIC $^ -o $@ -shared + +clean: + rm -f *.o *.opic m5 gem5OpLua.so diff --git a/util/m5/src/jni/gem5Op.java b/util/m5/src/jni/gem5Op.java new file mode 100644 index 000000000..579ff3455 --- /dev/null +++ b/util/m5/src/jni/gem5Op.java @@ -0,0 +1,66 @@ +/* + * 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 quiesceNs(long ns); + public native void quiesceCycle(long cycles); + public native long quiesceTime(); + public native long rpns(); + public native void wakeCPU(long cpuid); + + public native void exit(long ns_delay); + public native void fail(long ns_delay, long code); + public native long initparam(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 dumpreset_stats(long ns_delay, long ns_period); + public native void debugbreak(); + public native void switchcpu(); + 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 new file mode 100644 index 000000000..4d1075083 --- /dev/null +++ b/util/m5/src/jni_gem5Op.c @@ -0,0 +1,177 @@ +/* + * 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 + +#include "jni_gem5Op.h" +#include "m5op.h" + +/** + C library interface for gem5Op JNI + +*/ + +JNIEXPORT void JNICALL +Java_jni_gem5Op_arm(JNIEnv *env, jobject obj, jlong j_address) +{ + arm(j_address); +} + +JNIEXPORT void JNICALL +Java_jni_gem5Op_quiesce(JNIEnv *env, jobject obj) +{ + quiesce(); +} + +JNIEXPORT void JNICALL +Java_jni_gem5Op_quiesceNs(JNIEnv *env, jobject obj, jlong j_ns) +{ + quiesceNs(j_ns); +} + +JNIEXPORT void JNICALL +Java_jni_gem5Op_quiesceCycle(JNIEnv *env, jobject obj, jlong j_cycles) +{ + quiesceCycle(j_cycles); +} + +JNIEXPORT jlong JNICALL +Java_jni_gem5Op_quiesceTime(JNIEnv *env, jobject obj) +{ + uint64_t time = quiesceTime(); + 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 = rpns(); + if (time & 0x8000000000000000ULL) + printf("Truncated return value from rpns() to 63 bits\n"); + return (time & 0x7FFFFFFFFFFFFFFFULL); +} + +JNIEXPORT void JNICALL +Java_jni_gem5Op_wakeCPU(JNIEnv *env, jobject obj, jlong j_cpuid) +{ + wakeCPU(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_initparam(JNIEnv *env, jobject obj, jlong j_key_str1, + jlong j_key_str2) +{ + uint64_t param = m5_initparam(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_dumpreset_1stats(JNIEnv *env, jobject obj, + jlong j_ns_delay, jlong j_ns_period) +{ + m5_dumpreset_stats(j_ns_delay, j_ns_period); +} + +JNIEXPORT void JNICALL +Java_jni_gem5Op_debugbreak(JNIEnv *env, jobject obj) +{ + m5_debugbreak(); +} + +JNIEXPORT void JNICALL +Java_jni_gem5Op_switchcpu (JNIEnv *env, jobject obj) +{ + m5_switchcpu(); +} + +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); +} + diff --git a/util/m5/src/lua_gem5Op.c b/util/m5/src/lua_gem5Op.c new file mode 100644 index 000000000..89aec1432 --- /dev/null +++ b/util/m5/src/lua_gem5Op.c @@ -0,0 +1,278 @@ +/* Copyright (c) 2017 Hanhwi Jang + * 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 +#include +#include +#include +#include + +#include + +#include "m5_mmap.h" + +static int +do_arm(lua_State *L) +{ + uint64_t address = lua_tointeger(L, 1); + m5_arm(address); + return 0; +} + +static int +do_quiesce(lua_State *L) +{ + m5_quiesce(); + return 0; +} + +static int +do_quiesce_ns(lua_State *L) +{ + uint64_t ns = lua_tointeger(L, 1); + m5_quiesce_ns(ns); + return 0; +} + +static int +do_quiesce_cycle(lua_State *L) +{ + uint64_t cycles = lua_tointeger(L, 1); + m5_quiesce_cycle(cycles); + return 0; +} + +static int +do_quiesce_time(lua_State *L) +{ + uint64_t ns = m5_quiesce_time(); + lua_pushinteger(L, ns); + return 1; +} + +static int +do_rpns(lua_State *L) +{ + uint64_t ns = m5_rpns(); + lua_pushinteger(L, ns); + return 1; +} + +static int +do_wake_cpu(lua_State *L) +{ + uint64_t cpuid = lua_tointeger(L, 1); + m5_wake_cpu(cpuid); + return 0; +} + +static int +do_exit(lua_State *L) +{ + uint64_t ns_delay = lua_tointeger(L, 1); + m5_exit(ns_delay); + return 0; +} + +static int +do_fail(lua_State *L) +{ + uint64_t ns_delay = lua_tointeger(L, 1); + uint64_t code = lua_tointeger(L, 2); + m5_fail(ns_delay, code); + return 0; +} + +static int +do_init_param(lua_State *L) +{ + uint64_t key_str1 = lua_tointeger(L, 1); + uint64_t key_str2 = lua_tointeger(L, 2); + lua_pushinteger(L, m5_init_param(key_str1, key_str2)); + return 1; +} + +static int +do_checkpoint(lua_State *L) +{ + uint64_t delay = lua_tointeger(L, 1); + uint64_t period = lua_tointeger(L, 2); + m5_checkpoint(delay, period); + return 0; +} + +static int +do_reset_stats(lua_State *L) +{ + uint64_t ns_delay = lua_tointeger(L, 1); + uint64_t ns_period = lua_tointeger(L, 2); + m5_reset_stats(ns_delay, ns_period); + return 0; +} + +static int +do_dump_stats(lua_State *L) +{ + uint64_t delay = lua_tointeger(L, 1); + uint64_t period = lua_tointeger(L, 2); + m5_dump_stats(delay, period); + return 0; +} + +static int +do_dump_reset_stats(lua_State *L) +{ + uint64_t delay = lua_tointeger(L, 1); + uint64_t period = lua_tointeger(L, 2); + m5_dump_reset_stats(delay, period); + return 0; +} + +static int +do_read_file(lua_State *L) +{ + uint64_t len = lua_tointeger(L, 1); + uint64_t offset = lua_tointeger(L, 2); + char *buf = malloc(len); + uint64_t readlen = m5_read_file(buf, len, offset); + lua_pushlstring(L, buf, readlen); + return 1; +} + +static int +do_write_file(lua_State *L) +{ + const char* buf = lua_tostring(L, 1); + uint64_t len = lua_tointeger(L, 2); + assert(len <= lua_strlen(L, 1)); + uint64_t offset = lua_tointeger(L, 3); + const char *filename = lua_tostring(L, 4); + uint64_t w_len = m5_write_file((void *)buf, len, offset, filename); + lua_pushinteger(L, w_len); + return 1; +} + +static int +do_debug_break(lua_State *L) +{ + m5_debug_break(); + return 0; +} + +static int +do_switch_cpu(lua_State *L) +{ + m5_switch_cpu(); + return 0; +} + +static int +do_dist_toggle_sync(lua_State *L) +{ + m5_dist_toggle_sync(); + return 0; +} + +static int +do_add_symbol(lua_State *L) +{ + uint64_t addr = lua_tointeger(L, 1); + char *string = (char*) lua_tostring(L, 2); + m5_add_symbol(addr, string); + return 0; +} + +static int +do_loadsymbol(lua_State *L) +{ + m5_load_symbol(); + return 0; +} + +static int +do_panic(lua_State *L) +{ + m5_panic(); + return 0; +} + +static int +do_work_begin(lua_State *L) +{ + uint64_t workid = lua_tointeger(L, 1); + uint64_t threadid = lua_tointeger(L, 2); + m5_work_begin(workid, threadid); + return 0; +} + +static int +do_work_end(lua_State *L) +{ + uint64_t workid = lua_tointeger(L, 1); + uint64_t threadid = lua_tointeger(L, 2); + m5_work_end(workid, threadid); + return 0; +} + +int +luaopen_gem5OpLua(lua_State *L) +{ + map_m5_mem(); +#define ADD_FUNC(fname) do{ \ + lua_pushcfunction(L, fname); \ + lua_setfield(L, -2, #fname); \ + }while (0) + + lua_newtable(L); + ADD_FUNC(do_arm); + ADD_FUNC(do_quiesce); + ADD_FUNC(do_quiesce_ns); + ADD_FUNC(do_quiesce_cycle); + ADD_FUNC(do_quiesce_time); + ADD_FUNC(do_rpns); + ADD_FUNC(do_wake_cpu); + ADD_FUNC(do_exit); + ADD_FUNC(do_fail); + ADD_FUNC(do_init_param); + ADD_FUNC(do_checkpoint); + ADD_FUNC(do_reset_stats); + ADD_FUNC(do_dump_stats); + ADD_FUNC(do_dump_reset_stats); + ADD_FUNC(do_read_file); + ADD_FUNC(do_write_file); + ADD_FUNC(do_debug_break); + ADD_FUNC(do_switch_cpu); + ADD_FUNC(do_dist_toggle_sync); + ADD_FUNC(do_add_symbol); + ADD_FUNC(do_loadsymbol); + ADD_FUNC(do_panic); + ADD_FUNC(do_work_begin); + ADD_FUNC(do_work_end); +#undef ADD_FUNC + return 1; +} diff --git a/util/m5/src/m5.c b/util/m5/src/m5.c new file mode 100644 index 000000000..4d14ed907 --- /dev/null +++ b/util/m5/src/m5.c @@ -0,0 +1,399 @@ +/* + * Copyright (c) 2011, 2017 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) 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. + */ + +#ifdef linux +#define _GNU_SOURCE +#include + +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "m5_mmap.h" + +char *progname; +char *command = "unspecified"; +void usage(); + +void +parse_int_args(int argc, char *argv[], uint64_t ints[], int len) +{ + if (argc > len) + usage(); + +// On 32 bit platforms we need to use strtoull to do the conversion +#ifdef __LP64__ +#define strto64 strtoul +#else +#define strto64 strtoull +#endif + int i; + for (i = 0; i < len; ++i) + ints[i] = (i < argc) ? strto64(argv[i], NULL, 0) : 0; + +#undef strto64 +} + +void +parse_str_args_to_regs(int argc, char *argv[], uint64_t regs[], int len) +{ + if (argc > 1 || (argc > 0 && strlen(argv[0]) > len * sizeof(uint64_t))) + usage(); + + int i; + for (i = 0; i < len; i++) + regs[i] = 0; + + if (argc == 0) + return; + + int n; + for (n = 0, i = 0; i < len && n < strlen(argv[0]); n++) { + *((char *)(®s[i]) + (n % 8)) = argv[0][n]; + if ((n % 8) == 7) + i++; + } +} + +int +read_file(int dest_fid) +{ + uint8_t buf[256*1024]; + int offset = 0; + int len, ret; + + // 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)); + + while ((len = m5_read_file(buf, sizeof(buf), offset)) > 0) { + uint8_t *base = buf; + offset += len; + do { + ret = write(dest_fid, base, len); + if (ret < 0) { + perror("Failed to write file"); + exit(2); + } else if (ret == 0) { + fprintf(stderr, "Failed to write file: " + "Unhandled short write\n"); + exit(2); + } + + base += ret; + len -= ret; + } while (len); + } + + return offset; +} + +void +write_file(const char *filename, const char *host_filename) +{ + fprintf(stderr, "opening %s\n", filename); + int src_fid = open(filename, O_RDONLY); + + if (src_fid < 0) { + fprintf(stderr, "error opening %s\n", filename); + return; + } + + char buf[256*1024]; + int offset = 0; + int len; + int bytes = 0; + + memset(buf, 0, sizeof(buf)); + + while ((len = read(src_fid, buf, sizeof(buf))) > 0) { + bytes += m5_write_file(buf, len, offset, host_filename); + offset += len; + } + fprintf(stderr, "written %d bytes\n", bytes); + + close(src_fid); +} + +void +do_exit(int argc, char *argv[]) +{ + if (argc > 1) + usage(); + + uint64_t ints[1]; + parse_int_args(argc, argv, ints, 1); + m5_exit(ints[0]); +} + +void +do_fail(int argc, char *argv[]) +{ + if (argc < 1 || argc > 2) + usage(); + + uint64_t ints[2] = {0,0}; + parse_int_args(argc, argv, ints, argc); + m5_fail(ints[1], ints[0]); +} + +void +do_reset_stats(int argc, char *argv[]) +{ + uint64_t ints[2]; + parse_int_args(argc, argv, ints, 2); + m5_reset_stats(ints[0], ints[1]); +} + +void +do_dump_stats(int argc, char *argv[]) +{ + uint64_t ints[2]; + parse_int_args(argc, argv, ints, 2); + m5_dump_stats(ints[0], ints[1]); +} + +void +do_dump_reset_stats(int argc, char *argv[]) +{ + uint64_t ints[2]; + parse_int_args(argc, argv, ints, 2); + m5_dump_reset_stats(ints[0], ints[1]); +} + +void +do_read_file(int argc, char *argv[]) +{ + if (argc > 0) + usage(); + + read_file(STDOUT_FILENO); +} + +void +do_write_file(int argc, char *argv[]) +{ + if (argc != 1 && argc != 2) + usage(); + + const char *filename = argv[0]; + const char *host_filename = (argc == 2) ? argv[1] : argv[0]; + + write_file(filename, host_filename); +} + +void +do_exec_file(int argc, char *argv[]) +{ + if (argc > 0) + usage(); + + const char *destname = "/tmp/execfile"; + + int fid = open(destname, O_WRONLY, 0777); + int len = read_file(fid); + close(fid); + if (len > 0) { + execl(destname, "execfile", NULL); + err(1, "execl failed!"); + } +} + +void +do_checkpoint(int argc, char *argv[]) +{ + uint64_t ints[2]; + parse_int_args(argc, argv, ints, 2); + m5_checkpoint(ints[0], ints[1]); +} + +void +do_addsymbol(int argc, char *argv[]) +{ + if (argc != 2) + usage(); + + uint64_t addr = strtoul(argv[0], NULL, 0); + char *symbol = argv[1]; + m5_add_symbol(addr, symbol); +} + + +void +do_loadsymbol(int argc, char *argv[]) +{ + if (argc > 0) + usage(); + + m5_load_symbol(); +} + +void +do_initparam(int argc, char *argv[]) +{ + if (argc > 1) + usage(); + + uint64_t key_str[2]; + parse_str_args_to_regs(argc, argv, key_str, 2); + uint64_t val = m5_init_param(key_str[0], key_str[1]); + printf("%"PRIu64, val); +} + +void +do_sw99param(int argc, char *argv[]) +{ + if (argc != 0) + usage(); + + uint64_t param = m5_init_param(0, 0); + + // run-time, rampup-time, rampdown-time, warmup-time, connections + printf("%"PRId64" %"PRId64" %"PRId64" %"PRId64" %"PRId64, + (param >> 48) & 0xfff, + (param >> 36) & 0xfff, (param >> 24) & 0xfff, + (param >> 12) & 0xfff, (param >> 0) & 0xfff); +} + +#ifdef linux +void +do_pin(int argc, char *argv[]) +{ + if (argc < 2) + usage(); + + cpu_set_t mask; + CPU_ZERO(&mask); + + const char *sep = ","; + char *target = strtok(argv[0], sep); + while (target) { + CPU_SET(atoi(target), &mask); + target = strtok(NULL, sep); + } + + if (sched_setaffinity(0, sizeof(cpu_set_t), &mask) < 0) + err(1, "setaffinity"); + + execvp(argv[1], &argv[1]); + err(1, "execvp failed!"); +} +#endif + +struct MainFunc +{ + char *name; + void (*func)(int argc, char *argv[]); + char *usage; +}; + +struct MainFunc mainfuncs[] = { + { "exit", do_exit, "[delay]" }, + { "fail", do_fail, " [delay]" }, + { "resetstats", do_reset_stats, "[delay [period]]" }, + { "dumpstats", do_dump_stats, "[delay [period]]" }, + { "dumpresetstats", do_dump_reset_stats, "[delay [period]]" }, + { "readfile", do_read_file, "" }, + { "writefile", do_write_file, " [host filename]" }, + { "execfile", do_exec_file, "" }, + { "checkpoint", do_checkpoint, "[delay [period]]" }, + { "addsymbol", do_addsymbol, "
" }, + { "loadsymbol", do_loadsymbol, "" }, + { "initparam", do_initparam, "[key] // key must be shorter" + " than 16 chars" }, + { "sw99param", do_sw99param, "" }, +#ifdef linux + { "pin", do_pin, " [args ...]" } +#endif +}; +int numfuncs = sizeof(mainfuncs) / sizeof(mainfuncs[0]); + +void +usage() +{ + int i; + + for (i = 0; i < numfuncs; ++i) { + char *header = i ? "" : "usage:"; + fprintf(stderr, "%-6s %s %s %s\n", + header, progname, mainfuncs[i].name, mainfuncs[i].usage); + } + fprintf(stderr, "\n"); + fprintf(stderr, "All times in nanoseconds!\n"); + + exit(1); +} + +int +main(int argc, char *argv[]) +{ + progname = argv[0]; + if (argc < 2) + usage(1); + + map_m5_mem(); + + command = argv[1]; + + argv += 2; + argc -= 2; + + int i; + for (i = 0; i < numfuncs; ++i) { + if (strcmp(command, mainfuncs[i].name) != 0) + continue; + + mainfuncs[i].func(argc, argv); + exit(0); + } + + usage(1); +} diff --git a/util/m5/src/m5_mmap.c b/util/m5/src/m5_mmap.c new file mode 100644 index 000000000..79de59baa --- /dev/null +++ b/util/m5/src/m5_mmap.c @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2011, 2017 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) 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 +#include +#include +#include +#include +#include + +#include "m5_mmap.h" + +void *m5_mem = NULL; + +void +map_m5_mem() +{ +#ifdef M5OP_ADDR + int fd; + + fd = open("/dev/mem", O_RDWR | O_SYNC); + if (fd == -1) { + perror("Can't open /dev/mem"); + exit(1); + } + + m5_mem = mmap(NULL, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, + M5OP_ADDR); + if (!m5_mem) { + perror("Can't mmap /dev/mem"); + exit(1); + } +#endif +} diff --git a/util/m5/src/m5_mmap.h b/util/m5/src/m5_mmap.h new file mode 100644 index 000000000..d32857f0b --- /dev/null +++ b/util/m5/src/m5_mmap.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2011, 2017 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) 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. + */ + +#ifndef __UTIL_M5_MMAP_H__ +#define __UTIL_M5_MMAP_H__ + +#include +#include + +extern void *m5_mem; + +void map_m5_mem(); + +#endif diff --git a/util/m5/src/m5op_arm.S b/util/m5/src/m5op_arm.S new file mode 100644 index 000000000..bd3bb4dc6 --- /dev/null +++ b/util/m5/src/m5op_arm.S @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2010, 2016 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) 2003-2006 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. + */ +.syntax unified +#ifdef __thumb__ +.thumb +#endif + +#include + +.text + +.macro m5op_func name, func + .align 2 + .globl \name +\name: +#ifdef __thumb__ + .short 0xEE00 | \func + .short 0x0110 +#else + .long 0xEE000110 | (\func << 16) +#endif + mov pc,lr +.endm + +.text +#define M5OP(name, func) m5op_func name, func + M5OP_FOREACH +#undef M5OP diff --git a/util/m5/src/m5op_arm_A64.S b/util/m5/src/m5op_arm_A64.S new file mode 100644 index 000000000..c0224e21b --- /dev/null +++ b/util/m5/src/m5op_arm_A64.S @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2010-2013, 2016-2017 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) 2003-2006 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 + +#ifdef M5OP_ADDR +.macro m5op_func, name, func + .globl \name + \name: + ldr x9, m5_mem + movz x10, #(\func << 8) + ldr x0, [ x9, x10 ] + ret +.endm +#else +.macro m5op_func, name, func + .globl \name + \name: + .long 0xff000110 | (\func << 16) + ret +.endm +#endif + +.text +#define M5OP(name, func) m5op_func name, func + M5OP_FOREACH +#undef M5OP diff --git a/util/m5/src/m5op_sparc.S b/util/m5/src/m5op_sparc.S new file mode 100644 index 000000000..9ed9a99cc --- /dev/null +++ b/util/m5/src/m5op_sparc.S @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2003-2006 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. + */ + +#define m5_op 0x2 +#define m5_op3 0x37 + +#include + +.macro m5op_func name, func + .section ".text"; + .align 4; + .global \name; + .type \name, #function; +\name: + retl + .long (m5_op) << 30 | (m5_op3) << 19 | (\func) << 7; + .size \name, (.-\name) +.endm + +#define M5OP(name, func) m5op_func name, func + M5OP_FOREACH +#undef M5OP diff --git a/util/m5/src/m5op_x86.S b/util/m5/src/m5op_x86.S new file mode 100644 index 000000000..cd83a9412 --- /dev/null +++ b/util/m5/src/m5op_x86.S @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2003-2006 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 + +/* + Note: The ABI for pseudo ops using the M5OP_ADDR is defined in + src/arch/x86/pseudo_inst_abi.hh. If the ABI is changed below, it's likely + that the ABI in the arch directory will also need to be updated. + + The ABI for the magic instruction-based pseudo ops is not affected by this. +*/ + +#if defined(M5OP_ADDR) && defined(M5OP_PIC) +/* Use the memory mapped m5op interface */ +#define TWO_BYTE_OP(name, number) \ + .globl name; \ + .func name; \ +name: \ + mov m5_mem@gotpcrel(%rip), %r11; \ + mov (%r11), %r11; \ + mov $number, %rax; \ + shl $8, %rax; \ + mov 0(%r11, %rax, 1), %rax; \ + ret; \ + .endfunc; + +#elif defined(M5OP_ADDR) && !defined(M5OP_PIC) +/* Use the memory mapped m5op interface */ +#define TWO_BYTE_OP(name, number) \ + .globl name; \ + .func name; \ +name: \ + mov m5_mem, %r11; \ + mov $number, %rax; \ + shl $8, %rax; \ + mov 0(%r11, %rax, 1), %rax; \ + ret; \ + .endfunc; + +#else +/* Use the magic instruction based m5op interface. This does not work + * in virtualized environments. + */ + +#define TWO_BYTE_OP(name, number) \ + .globl name; \ + .func name; \ +name: \ + .byte 0x0F, 0x04; \ + .word number; \ + ret; \ + .endfunc; + +#endif + +#define M5OP(name, number) TWO_BYTE_OP(name, number) + M5OP_FOREACH +#undef M5OP