From 77f7cc489efac6df93316fe4dc434f860f971a3e Mon Sep 17 00:00:00 2001 From: Brandon Potter Date: Mon, 11 Mar 2019 14:30:57 -0400 Subject: [PATCH] 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 Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power --- tests/test-progs/chdir-print/Makefile | 20 ++++++ tests/test-progs/chdir-print/README.txt | 67 ++++++++++++++++++ tests/test-progs/chdir-print/chdir-print.c | 80 ++++++++++++++++++++++ 3 files changed, 167 insertions(+) create mode 100644 tests/test-progs/chdir-print/Makefile create mode 100644 tests/test-progs/chdir-print/README.txt create mode 100644 tests/test-progs/chdir-print/chdir-print.c 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 +/build/X86/gem5.opt /configs/example/se.py -c /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 +#include +#include +#include +#include + +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; +} -- 2.30.2