summaryrefslogtreecommitdiff
path: root/tests/test-progs
diff options
context:
space:
mode:
authorBrandon Potter <brandon.potter@amd.com>2019-03-11 14:30:57 -0400
committerBrandon Potter <Brandon.Potter@amd.com>2019-08-07 22:07:06 +0000
commit77f7cc489efac6df93316fe4dc434f860f971a3e (patch)
treea848792d9b4dd72f5811ccc3c6190cada0d1ed54 /tests/test-progs
parentfb9038ed23dd36b2aaa855932a4aabb015f423e9 (diff)
downloadgem5-77f7cc489efac6df93316fe4dc434f860f971a3e.tar.xz
sim-se, tests: add a new sim-se test
This changeset adds a test to check the redirection features added in faux-filesystem changeset. The test contains a "chdir" system call to "/proc" which should be redirected to "$(gem5-dir)/m5out/fs/proc" (as specified by the config files). After "chdir", the test subsequently outputs the "/proc/cpuinfo" file which should output a configuration of a fake cpu with values set by a Python configuration file. Note, the test will call "clone" once. To avoid a runtime error, make sure that you run this test with "-n2" supplied to the "config/example/se.py" script. Change-Id: I505b046b7a4feddfa93a6ef0f0773ac43078cc94 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17112 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'tests/test-progs')
-rw-r--r--tests/test-progs/chdir-print/Makefile20
-rw-r--r--tests/test-progs/chdir-print/README.txt67
-rw-r--r--tests/test-progs/chdir-print/chdir-print.c80
3 files changed, 167 insertions, 0 deletions
diff --git a/tests/test-progs/chdir-print/Makefile b/tests/test-progs/chdir-print/Makefile
new file mode 100644
index 000000000..6a357d504
--- /dev/null
+++ b/tests/test-progs/chdir-print/Makefile
@@ -0,0 +1,20 @@
+
+CPP := g++
+
+TEST_OBJS := chdir-print.o
+TEST_PROGS := $(TEST_OBJS:.o=)
+
+# ==== Rules ==================================================================
+
+.PHONY: default clean
+
+default: $(TEST_PROGS)
+
+clean:
+ $(RM) $(TEST_OBJS) $(TEST_PROGS)
+
+$(TEST_PROGS): $(TEST_OBJS)
+ $(CPP) -static -o $@ $@.o
+
+%.o: %.c Makefile
+ $(CPP) -c -o $@ $*.c -msse3
diff --git a/tests/test-progs/chdir-print/README.txt b/tests/test-progs/chdir-print/README.txt
new file mode 100644
index 000000000..b1e921307
--- /dev/null
+++ b/tests/test-progs/chdir-print/README.txt
@@ -0,0 +1,67 @@
+# example test compile and run parameters
+# Note: the absolute path to the chdir-print binary should be specified
+# in the run command even if running from the same folder. This is needed
+# because chdir is executed before triggering a clone for the file read,
+# and the cloned process won't be able to find the executable if a relative
+# path is provided.
+
+# compile examples
+scons --default=X86 ./build/X86/gem5.opt PROTOCOL=MOESI_hammer
+scons --default=X86 ./build/X86/gem5.opt PROTOCOL=MESI_Three_Level
+
+# run parameters
+<GEM5_ROOT>/build/X86/gem5.opt <GEM5_ROOT>/configs/example/se.py -c <GEM5_ROOT>/tests/test-progs/chdir-print/chdir-print -n2 --ruby
+
+
+# example successful output for MESI_Three_Level:
+
+<...>
+
+**** REAL SIMULATION ****
+info: Entering event queue @ 0. Starting simulation...
+warn: Replacement policy updates recently became the responsibility of SLICC state machines. Make sure to setMRU() near callbacks in .sm files!
+cwd: /proj/research_simu/users/jalsop/gem5-mem_dif_debug/tests/test-progs/chdir-print/
+cwd: /proc
+
+<...>
+
+processor : 0
+vendor_id : Generic
+cpu family : 0
+model : 0
+model name : Generic
+stepping : 0
+cpu MHz : 2000
+cache size: : 2048K
+physical id : 0
+siblings : 2
+core id : 0
+cpu cores : 2
+fpu : yes
+fpu exception : yes
+cpuid level : 1
+wp : yes
+flags : fpu
+cache alignment : 64
+
+processor : 1
+vendor_id : Generic
+cpu family : 0
+model : 0
+model name : Generic
+stepping : 0
+cpu MHz : 2000
+cache size: : 2048K
+physical id : 0
+siblings : 2
+core id : 1
+cpu cores : 2
+fpu : yes
+fpu exception : yes
+cpuid level : 1
+wp : yes
+flags : fpu
+cache alignment : 64
+
+SUCCESS
+Exiting @ tick 2694923000 because exiting with last active thread context
diff --git a/tests/test-progs/chdir-print/chdir-print.c b/tests/test-progs/chdir-print/chdir-print.c
new file mode 100644
index 000000000..9fe42cd42
--- /dev/null
+++ b/tests/test-progs/chdir-print/chdir-print.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2011-2015 Advanced Micro Devices, Inc.
+ * All rights reserved.
+ *
+ * For use for simulation and test purposes only
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
+ *
+ * 3. Neither the name of the copyright holder 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 HOLDER 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.
+ *
+ * Authors: Brandon Potter,
+ * John Alsop
+ */
+
+#include <linux/limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+const int BUFFER_SIZE = 64;
+
+// Tests the functionality of RegisterFilesystem
+int main(void)
+{
+ char *cwd = getcwd(NULL, PATH_MAX);
+ printf("cwd: %s\n", cwd);
+ free(cwd);
+
+ chdir("/proc");
+
+ cwd = getcwd(NULL, PATH_MAX);
+ printf("cwd: %s\n", cwd);
+ free(cwd);
+
+ FILE *fp;
+ char buffer[BUFFER_SIZE];
+
+ bool found_procline = false;
+ fp = popen("cat cpuinfo", "r");
+ if (fp != NULL) {
+ while (fgets(buffer, BUFFER_SIZE, fp) != NULL) {
+ printf("%s", buffer);
+ if (strstr(buffer, "processor")) {
+ found_procline = true;
+ }
+ }
+ pclose(fp);
+ }
+
+ if (found_procline) {
+ printf("SUCCESS\n");
+ return EXIT_SUCCESS;
+ }
+
+ printf("FAILURE\n");
+ return EXIT_FAILURE;
+}