+++ /dev/null
-
-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
+++ /dev/null
-# 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
+++ /dev/null
-/*
- * 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.
- */
-
-#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;
-}
+++ /dev/null
-
-CPP := g++
-
-TEST_OBJS := mwait.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 pthread.o
-
-%.o: %.c Makefile
- $(CPP) -c -o $@ $*.c -msse3
+++ /dev/null
-// author: Marc Orr
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#define NUM_TRIES 1000
-
-// Make sure that flags and wait sit in different cache lines
-volatile int flags[10];
-volatile int wait[10];
-
-pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-
-void *DoWork1(void *threadid)
-{
- flags[0] = flags[0] + 1;
- wait[0] = 0;
- pthread_exit(0);
-}
-
-void *DoWork2(void *threadid)
-{
- pthread_mutex_lock (&mutex);
- flags[0] = flags[0] + 1;
- pthread_mutex_unlock (&mutex);
- pthread_exit(0);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Program main
-////////////////////////////////////////////////////////////////////////////////
-int main( int argc, char** argv)
-{
- // stuff for thread
- pthread_t threads[1];
-
- // initialize global variables
- flags[0] = 0;
- wait[0] = 1;
-
- // monitor (via gcc intrinsic)
- __builtin_ia32_monitor ((void *)&flags, 0, 0);
-
- // invalidate flags in this cpu's cache
- pthread_create(&threads[0], NULL, DoWork1, NULL);
- while (wait[0]);
-
- // launch thread to invalidate address being monitored
- pthread_create(&threads[0], NULL, DoWork2, NULL);
-
- // wait for other thread to modify flags
- int mwait_cnt = 0;
- do {
- pthread_mutex_lock (&mutex);
- if (flags[0] != 2) {
- pthread_mutex_unlock (&mutex);
- __builtin_ia32_mwait(0, 0);
- } else {
- pthread_mutex_unlock (&mutex);
- }
- mwait_cnt++;
- } while (flags[0] != 2 && mwait_cnt < NUM_TRIES);
-
- // test may hang if mwait is not working
- if (flags[0]==2) {
- printf("mwait regression PASSED, flags[0] = %d\n", flags[0]);
- } else {
- printf("mwait regression FAILED, flags[0] = %d\n", flags[0]);
- }
-
- return 0;
-}
+++ /dev/null
-
-CPP := g++
-
-TEST_OBJS := page-access-wrap.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
+++ /dev/null
-/*
- * Copyright (c) 2019 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.
- */
-
-#include <sys/mman.h>
-
-#include <cstdint>
-#include <cstdio>
-#include <cstdlib>
-#include <ctime>
-
-int main(void)
-{
- uint64_t page_size = 0x1000;
- uint64_t num_pages = 0x10000;
- uint64_t length = page_size * num_pages;
-
- void *raw = mmap(NULL, length, PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
- uint8_t *mem = reinterpret_cast<uint8_t*>(raw);
-
- srand(0xABCD);
-
- uint64_t last_byte = page_size - 1;
- uint64_t page_boundaries = num_pages - 1;
-
- for (int i = 0; i < 2000; i++) {
- uint64_t random_boundary = rand() % page_boundaries;
- uint64_t boundary_offset = random_boundary * page_size;
- uint64_t boundary_last_byte = boundary_offset + last_byte;
- uint32_t *poke = reinterpret_cast<uint32_t*>(mem + boundary_last_byte);
- printf("%p\n", poke);
- uint32_t value = *poke;
- }
-
- return 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 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.
- *
- * Author: Brandon Potter
- */
-
-#include <elf.h>
-#include <stdio.h>
-
-int main(int argc, char **argv, char **envp)
-{
- int i;
-
- printf("%p: argc: [%d]\n", &argc, argc);
- printf("\n");
-
- for (i = 0; i < argc; i++)
- printf("%p: argv[%d]: [%s]\n", &argv[i], i, argv[i]);
- printf("\n");
-
- i = 0;
- while (envp[i] != NULL) {
- printf("%p: envp[%d]: [%s]\n", &envp[i], i, envp[i]);
- i++;
- }
- printf("\n");
-
- Elf64_auxv_t *auxv = (Elf64_auxv_t*)&envp[--i];
- while (auxv++) {
- char *type;
- switch(auxv->a_type) {
- case AT_IGNORE:
- type = "AT_IGNORE";
- break;
- case AT_EXECFD:
- type = "AT_EXECFD";
- break;
- case AT_PHDR:
- type = "AT_PHDR";
- break;
- case AT_PHENT:
- type = "AT_PHENT";
- break;
- case AT_PHNUM:
- type = "AT_PHNUM";
- break;
- case AT_PAGESZ:
- type = "AT_PAGESZ";
- break;
- case AT_BASE:
- type = "AT_BASE";
- break;
- case AT_FLAGS:
- type = "AT_FLAGS";
- break;
- case AT_ENTRY:
- type = "AT_ENTRY";
- break;
- case AT_NOTELF:
- type = "AT_NOTELF";
- break;
- case AT_UID:
- type = "AT_UID";
- break;
- case AT_EUID:
- type = "AT_EUID";
- break;
- case AT_GID:
- type = "AT_GID";
- break;
- case AT_EGID:
- type = "AT_EGID";
- break;
- case AT_CLKTCK:
- type = "AT_CLKTCK";
- break;
- case AT_PLATFORM:
- type = "AT_PLATFORM";
- break;
- case AT_HWCAP:
- type = "AT_HWCAP";
- break;
- case AT_FPUCW:
- type = "AT_FPUCW";
- break;
- case AT_DCACHEBSIZE:
- type = "AT_DCACHEBSIZE";
- break;
- case AT_ICACHEBSIZE:
- type = "AT_ICACHEBSIZE";
- break;
- case AT_UCACHEBSIZE:
- type = "AT_UCACHEBSIZE";
- break;
- case AT_IGNOREPPC:
- type = "AT_IGNOREPPC";
- break;
- case AT_SECURE:
- type = "AT_SECURE";
- break;
- case AT_BASE_PLATFORM:
- type = "AT_BASE_PLATFORM";
- break;
- case AT_RANDOM:
- type = "AT_RANDOM";
- break;
- case AT_EXECFN:
- type = "AT_EXECFN";
- break;
- case AT_SYSINFO:
- type = "AT_SYSINFO";
- break;
- case AT_SYSINFO_EHDR:
- type = "AT_SYSINFO_EHDR";
- break;
- case AT_L1I_CACHESHAPE:
- type = "AT_L1I_CACHESHAPE";
- break;
- case AT_L1D_CACHESHAPE:
- type = "AT_L1D_CACHESHAPE";
- break;
- case AT_L2_CACHESHAPE:
- type = "AT_L2_CACHESHAPE";
- break;
- case AT_L3_CACHESHAPE:
- type = "AT_L3_CACHESHAPE";
- break;
- case AT_NULL:
- default:
- printf("\n");
- return 0;
- }
- printf("%p: %s: [%lx]\n", auxv, type, auxv->a_un.a_val);
- }
-}
-