diff --git a/.gitignore b/.gitignore index 44a51ce..4ed3ed8 100644 --- a/.gitignore +++ b/.gitignore @@ -10,5 +10,4 @@ !init.sh /fceux-am /nvboard -**/.cache -**/result +/am-kernels diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index d7bc671..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "am-kernels"] - path = am-kernels - url = ./am-kernels/ diff --git a/abstract-machine/.gitignore b/abstract-machine/.gitignore index bcba0ab..84c3ed2 100644 --- a/abstract-machine/.gitignore +++ b/abstract-machine/.gitignore @@ -1,6 +1,19 @@ -**/.direnv/ -**/build/ -**/.envrc -**/.cache -.vscode -compile_commands.json +* +!*/ +!*.h +!*.c +!*.cc +!*.S +!*.ld +!*.sh +!*.py +!*.mk +!Makefile +!README +!LICENSE +.* +_* +*~ +build/ +!.gitignore +.vscode \ No newline at end of file diff --git a/abstract-machine/CMakeLists.txt b/abstract-machine/CMakeLists.txt deleted file mode 100644 index 508bc68..0000000 --- a/abstract-machine/CMakeLists.txt +++ /dev/null @@ -1,87 +0,0 @@ -cmake_minimum_required(VERSION 3.22) - -project(abstract-machine) -enable_language(CXX C ASM) -set(CMAKE_C_STANDARD 11) -set(CMAKE_CXX_STANDARD 11) - -include(CMakeDependentOption) -include(CMakePackageConfigHelpers) # Used to find libcheck -include(CTest) - -# -- General options -set(ISA CACHE STRING "Target ISA") -set_property(CACHE ISA PROPERTY STRINGS "riscv" "x86" "x86_64" "native") -string(TOUPPER ${ISA} ISA_UPPER) - -cmake_dependent_option( - __PLATFORM_NEMU__ "Run on NEMU" - ON "ISA MATCHES \"(riscv | x86)\"" OFF) -cmake_dependent_option( - __PLATFORM_NATIVE__ "Run on native" - ON "ISA MATCHES native" OFF) - -# -- Set PLATFORM according to options -set(MATCH_PLATFORM_PATTERN "^__PLATFORM_([A-Z]*)__") -get_cmake_property(CACHE_VARS CACHE_VARIABLES) - -message(STATUS "ISA: ${ISA}") -foreach(VAR IN LISTS CACHE_VARS) - if(VAR MATCHES ${MATCH_PLATFORM_PATTERN}) - # Retrieve the value of the cache variable - get_property(VAR_VALUE CACHE ${VAR} PROPERTY VALUE) - set(PLATFORM_UPPER ${CMAKE_MATCH_1}) - string(TOLOWER ${PLATFORM_UPPER} PLATFORM) - message(STATUS "Variable: ${VAR}=${VAR_VALUE}, Platform: ${PLATFORM}") - endif() -endforeach() - -if(${PLATFORM} MATCHES "native") -set(ARCH "native") -else() -set(ARCH ${ISA}-${PLATFORM}) -endif() -string(TOUPPER ${ARCH} ARCH_UPPER) - -# -- Target specific options -cmake_dependent_option( - NATIVE_USE_KLIB "Use Klib even if on native" - ON "NOT __ISA_NATIVE__" OFF) - -# -- Add compile definitions based on options -add_compile_definitions( - $ - __ISA_${ISA_UPPER}__ - __PLATFORM_${PLATFORM_UPPER}__ -) - -add_compile_definitions( - $<$:__NATIVE_USE_KLIB__> -) - -# -- Required compiler flags -add_compile_options( - # -Werror - -Wno-main - -fno-asynchronous-unwind-tables - -fno-builtin - -fno-stack-protector - -U_FORTIFY_SOURCE - $<$:-fno-exceptions> - $<$:-ffreestanding> - $<$:-fno-rtti>) - -add_link_options( - -znoexecstack -) - -# -- Include linker script here. Use this linker script at link time if INCLUDE_LINKER_SCRIPT is set to true -set(LINKER_SCRIPT linker.ld) - -list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") - -add_compile_options(-march=rv32if -mabi=ilp32) -add_link_options(-march=rv32if -mabi=ilp32) - -add_subdirectory(klib) -add_subdirectory(am) diff --git a/abstract-machine/CMakePresets.json b/abstract-machine/CMakePresets.json deleted file mode 100644 index d14c0b6..0000000 --- a/abstract-machine/CMakePresets.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": 6, - "configurePresets": [ - { - "name": "native", - "displayName": "Native", - "generator": "Unix Makefiles", - "binaryDir": "${sourceDir}/out/build/${presetName}", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug", - "ISA": "native", - "__PLATFORM_NATIVE__": true, - "NATIVE_USE_KLIB": true - } - }, - { - "name": "riscv-nemu", - "displayName": "Riscv32 NEMU", - "generator": "Unix Makefiles", - "binaryDir": "${sourceDir}/out/build/${presetName}", - "installDir": "/home/xin/repo/ysyx-workbench/abstract-machine/out/install", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug", - "ISA": "riscv", - "__PLATFORM_NEMU__": true - } - } - ] -} \ No newline at end of file diff --git a/abstract-machine/am/CMakeLists.txt b/abstract-machine/am/CMakeLists.txt deleted file mode 100644 index b0462e4..0000000 --- a/abstract-machine/am/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) - -add_library(am_interface INTERFACE) -target_include_directories(am_interface INTERFACE - $ - $) - -add_subdirectory(src) - -install(DIRECTORY include/ DESTINATION include/abstract-machine) diff --git a/abstract-machine/am/src/CMakeLists.txt b/abstract-machine/am/src/CMakeLists.txt deleted file mode 100644 index 533dd3b..0000000 --- a/abstract-machine/am/src/CMakeLists.txt +++ /dev/null @@ -1,53 +0,0 @@ -if(ISA MATCHES "native") -set(SOURCEDIR "./${PLATFORM}") -else() -set(SOURCEDIR "./${ISA}/${PLATFORM}") -endif() - -add_subdirectory(${SOURCEDIR}) - -target_include_directories(am-${ARCH} - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - PUBLIC - $ - $) -target_link_libraries(am-${ARCH} - PUBLIC klib_interface - INTERFACE m) - -# TODO: Check -target_link_options(am-${ARCH} INTERFACE - $ - $) - -# Interface compile flags -target_link_options(am-${ARCH} INTERFACE - -znoexecstack) - -target_compile_options(am-${ARCH} INTERFACE - -fno-asynchronous-unwind-tables - -fno-builtin - -fno-stack-protector - -U_FORTIFY_SOURCE - $<$:-fno-exceptions> - $<$:-ffreestanding> - $<$:-fno-rtti>) - -install(TARGETS am-${ARCH} klib_interface am_interface - EXPORT amTargets - LIBRARY DESTINATION lib) - -install(EXPORT amTargets - FILE amTargets.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH}) - -configure_package_config_file(${CMAKE_SOURCE_DIR}/cmake/am-config.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/am-${ARCH}-config.cmake - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH}) - -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/am-${ARCH}-config.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH}) - -# TODO: check -install(FILES ${CMAKE_SOURCE_DIR}/scripts/${LINKER_SCRIPT} - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH}) diff --git a/abstract-machine/am/src/native/CMakeLists.txt b/abstract-machine/am/src/native/CMakeLists.txt deleted file mode 100644 index e3c9303..0000000 --- a/abstract-machine/am/src/native/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -include(CheckPIESupported) -check_pie_supported() - -set(SOURCES - trap.S - cte.c - ioe.c - mpe.c - platform.c - trm.c - vme.c - ioe/audio.c - ioe/disk.c - ioe/gpu.c - ioe/input.c - ioe/timer.c -) -add_library(am-native ${SOURCES}) - -# FIXME: get free(): invalid address when user program compiled without pie -set_target_properties(am-native PROPERTIES - POSITION_INDEPENDENT_CODE TRUE - INTERFACE_POSITION_INDEPENDENT_CODE TRUE) - -find_package(SDL2 REQUIRED) -target_link_libraries(am-${ARCH} PUBLIC SDL2::SDL2) diff --git a/abstract-machine/am/src/riscv/nemu/CMakeLists.txt b/abstract-machine/am/src/riscv/nemu/CMakeLists.txt deleted file mode 100644 index a6992db..0000000 --- a/abstract-machine/am/src/riscv/nemu/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -include(nemu-settings) -include(riscv-settings) - -add_library(am-${ISA}-nemu - cte.c - start.S - trap.S - vme.c - ${NEMU_SOURCES} -) - -target_compile_options(am-${ISA}-nemu PRIVATE - ${NEMU_COMPILE_OPTIONS} - ${RISCV_COMPILE_OPTIONS}) -target_link_options(am-${ISA}-nemu PRIVATE - ${NEMU_LINK_OPITIONS} - ${RISCV_LINK_OPTIONS}) -target_include_directories(am-${ISA}-nemu PRIVATE - ${NEMU_INCLUDE_DIRECTORIES}) -target_link_options(am-${ISA}-nemu INTERFACE - LINKER:--defsym=_pmem_start=0x80000000 - LINKER:--defsym=_entry_offset=0x0 - LINKER:--gc-sections - LINKER:-e _start - -nostartfiles) - -target_compile_definitions(am-${ISA}-nemu PUBLIC - ARCH_H="arch/riscv.h") -target_compile_definitions(am-${ISA}-nemu PRIVATE - ISA_H="riscv/riscv.h") - -set_target_properties(am-${ISA}-nemu PROPERTIES - POSITION_INDEPENDENT_CODE OFF - INTERFACE_POSITION_INDEPENDENT_CODE OFF) diff --git a/abstract-machine/cmake/am-config.cmake.in b/abstract-machine/cmake/am-config.cmake.in deleted file mode 100644 index f2fbb32..0000000 --- a/abstract-machine/cmake/am-config.cmake.in +++ /dev/null @@ -1,9 +0,0 @@ -@PACKAGE_INIT@ - -include(CMakeFindDependencyMacro) -if(${ARCH} MATCHES "native") -find_dependency(SDL2 REQUIRED) -endif() - -# Include the targets file -include("${CMAKE_CURRENT_LIST_DIR}/amTargets.cmake") diff --git a/abstract-machine/cmake/klib-config.cmake.in b/abstract-machine/cmake/klib-config.cmake.in deleted file mode 100644 index 6b57e7f..0000000 --- a/abstract-machine/cmake/klib-config.cmake.in +++ /dev/null @@ -1,6 +0,0 @@ -@PACKAGE_INIT@ - -include(CMakeFindDependencyMacro) - -# Include the targets file -include("${CMAKE_CURRENT_LIST_DIR}/klibTargets.cmake") diff --git a/abstract-machine/cmake/nemu-settings.cmake b/abstract-machine/cmake/nemu-settings.cmake deleted file mode 100644 index 910cdcf..0000000 --- a/abstract-machine/cmake/nemu-settings.cmake +++ /dev/null @@ -1,11 +0,0 @@ -set(NEMU_COMPILE_OPTIONS -fdata-sections -ffunction-sections) -set(NEMU_LINK_OPTIONS - --defsym=_pmem_start=0x80000000 - --defsym=_entry_offset=0x0 - --gc-sections - -e _start) -set(NEMU_INCLUDE_DIRECTORIES - ${CMAKE_SOURCE_DIR}/am/src/platform/nemu/include) -file(GLOB_RECURSE NEMU_SOURCES - ${CMAKE_SOURCE_DIR}/am/src/platform/nemu/*.[cS]) -set(INCLUDE_LINKER_SCRIPT ON) diff --git a/abstract-machine/cmake/riscv-settings.cmake b/abstract-machine/cmake/riscv-settings.cmake deleted file mode 100644 index 1286e4c..0000000 --- a/abstract-machine/cmake/riscv-settings.cmake +++ /dev/null @@ -1,2 +0,0 @@ -set(RISCV_COMPILE_OPTIONS) -set(RISCV_LINK_OPTIONS) diff --git a/abstract-machine/default.nix b/abstract-machine/default.nix deleted file mode 100644 index 1f1f67d..0000000 --- a/abstract-machine/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ stdenv, - lib, - cmake, - SDL2, - isa ? "native", - platform ? "NEMU" -}: -stdenv.mkDerivation { - pname = "abstract-machine"; - version = "2024.02.18"; - - src = ./.; - - cmakeFlags = [ - (lib.cmakeFeature "ISA" isa) - (lib.cmakeBool "__PLATFORM_${lib.strings.toUpper platform}__" true) - ]; - - nativeBuildInputs = [ - cmake - ]; - - buildInputs = [ - - ] ++ (if platform=="native" then [ SDL2 ] else [ ]); -} diff --git a/abstract-machine/klib/CMakeLists.txt b/abstract-machine/klib/CMakeLists.txt deleted file mode 100644 index 2cf4a78..0000000 --- a/abstract-machine/klib/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) - -add_library(klib_interface INTERFACE) -target_include_directories(klib_interface - INTERFACE - $ - $) - -add_subdirectory(src) -# add_subdirectory(tests) - -install(DIRECTORY include/ DESTINATION include/abstract-machine) diff --git a/abstract-machine/klib/include/klib.h b/abstract-machine/klib/include/klib.h index 48d63e9..ecb24c8 100644 --- a/abstract-machine/klib/include/klib.h +++ b/abstract-machine/klib/include/klib.h @@ -35,7 +35,6 @@ int atoi (const char *nptr); int printf (const char *format, ...); int sprintf (char *str, const char *format, ...); int snprintf (char *str, size_t size, const char *format, ...); -int vprintf (const char *format, va_list ap); int vsprintf (char *str, const char *format, va_list ap); int vsnprintf (char *str, size_t size, const char *format, va_list ap); diff --git a/abstract-machine/klib/src/CMakeLists.txt b/abstract-machine/klib/src/CMakeLists.txt deleted file mode 100644 index bf7e136..0000000 --- a/abstract-machine/klib/src/CMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ -# find_package(FLEX) -# find_package(BISON) - -# FLEX_TARGET(fmt_scanner fmt_scanner.l fmt_scanner.c) - -set(SOURCES - cpp.c - int64.c - stdio.c - stdlib.c - string.c - # ${FLEX_fmt_scanner_OUTPUTS} -) - -add_library(klib ${SOURCES}) -target_include_directories(klib PUBLIC $) -target_compile_definitions(klib PUBLIC $) - -install(TARGETS klib - EXPORT klibTargets - LIBRARY DESTINATION lib) - -install(EXPORT klibTargets - FILE klibTargets.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/klib) - -configure_package_config_file(${CMAKE_SOURCE_DIR}/cmake/klib-config.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/klib-config.cmake - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/klib) - -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/klib-config.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/klib) - diff --git a/abstract-machine/klib/src/stdio.c b/abstract-machine/klib/src/stdio.c index fec63bc..1b19953 100644 --- a/abstract-machine/klib/src/stdio.c +++ b/abstract-machine/klib/src/stdio.c @@ -5,20 +5,8 @@ #if !defined(__ISA_NATIVE__) || defined(__NATIVE_USE_KLIB__) -int vprintf(const char *fmt, va_list ap) { - const char *p = fmt; - while(*p != '\0') { - putch(*p); - } - return 0; -} - int printf(const char *fmt, ...) { - va_list args; - va_start(args, fmt); - vprintf(fmt, args); - va_end(args); - return 0; + panic("Not implemented"); } int vsprintf(char *out, const char *fmt, va_list ap) { diff --git a/abstract-machine/klib/src/string.c b/abstract-machine/klib/src/string.c index 931e7dd..f1a1f22 100644 --- a/abstract-machine/klib/src/string.c +++ b/abstract-machine/klib/src/string.c @@ -5,115 +5,43 @@ #if !defined(__ISA_NATIVE__) || defined(__NATIVE_USE_KLIB__) size_t strlen(const char *s) { - const char *p = s; - size_t len = 0; - while(*(p++) != '\0') len++; - return len; + panic("Not implemented"); } char *strcpy(char *dst, const char *src) { - char *p_dst = dst; - const char *p_src = src; - for(; *p_src != '\0'; p_src++, p_dst++) { - *p_dst = *p_src; - } - *p_dst = '\0'; - return dst; + panic("Not implemented"); } char *strncpy(char *dst, const char *src, size_t n) { - int i = 0; - for(; i < n && src[i] != '\0'; i++) { - dst[i] = src[i]; - } - for(; i < n; i++) { - dst[i] = '\0'; - } - return dst; + panic("Not implemented"); } char *strcat(char *dst, const char *src) { - char *p_dst = dst; - const char *p_src = src; - while(*p_dst != '\0') p_dst++; - for(; *p_src != '\0'; p_src++, p_dst++) { - *p_dst = *p_src; - } - *p_dst = '\0'; - return dst; + panic("Not implemented"); } int strcmp(const char *s1, const char *s2) { - const char *p_s1 = s1, *p_s2 = s2; - for(; *p_s1 == *p_s2; p_s1++, p_s2++) { - if(*p_s1 == '\0' || *p_s2 == '\0') { - break; - } - } - return *p_s1 - *p_s2; + panic("Not implemented"); } int strncmp(const char *s1, const char *s2, size_t n) { - const char *p_s1 = s1, *p_s2 = s2; - int i = 0; - for(i = 0; i < n - 1; i++) { - if(s1[i] == '\0' || s2[i] == '\0') - break; - } - return s1[i] - s2[i]; + panic("Not implemented"); } void *memset(void *s, int c, size_t n) { - uint8_t *p = s; - for(int i = 0; i < n; i++) { - p[i] = c; - } - return s; + panic("Not implemented"); } void *memmove(void *dst, const void *src, size_t n) { - if (src + n > dst && src < dst) { - size_t len = dst - src; - void *p_dst = (void *)src + n; - const void *p_src = src + n - len; - while(p_dst >= dst) { - memcpy(p_dst, p_src, len); - p_src -= len; - p_dst -= len; - } - if(n % len) memcpy(dst, src, n % len); - } else if (dst < src && dst + n > src) { - size_t len = src - dst; - void *p_dst = dst; - const void *p_src = src; - while(p_src < src + n) { - memcpy(p_dst, p_src, len); - p_src += len; - p_dst += len; - } - if(n % len) memcpy(p_dst, p_src, n % len); - } else { - memcpy(dst, src, n); - } - - return dst; + panic("Not implemented"); } void *memcpy(void *out, const void *in, size_t n) { - for (size_t i = 0 ; i < n ; i++) { - *(uint8_t *)(out + i) = *(uint8_t *)(in + i); - } - return out; + panic("Not implemented"); } int memcmp(const void *s1, const void *s2, size_t n) { - const uint8_t *p1 = s1, *p2 = s2; - for (int i = 0; i < n; i++) { - if(*p1 != *p2) - return p1 - p2; - p1++; p2++; - } - return 0; + panic("Not implemented"); } #endif diff --git a/abstract-machine/klib/tests/CMakeLists.txt b/abstract-machine/klib/tests/CMakeLists.txt deleted file mode 100644 index f72c555..0000000 --- a/abstract-machine/klib/tests/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -set(TEST_SOURCES - stdio - string -) - -foreach(TEST IN LISTS TEST_SOURCES) - add_executable(${TEST} ${TEST}.c) - target_link_libraries(${TEST} am-${ARCH} klib m) - target_include_directories(${TEST} - PRIVATE $ - PRIVATE $ - ) - # TODO: Run tests in other configurations - if(__PLATFORM_NATIVE__) - add_test(NAME ${TEST} COMMAND ${TEST}) - endif() -endforeach() diff --git a/abstract-machine/klib/tests/stdio.c b/abstract-machine/klib/tests/stdio.c deleted file mode 100644 index 7287e83..0000000 --- a/abstract-machine/klib/tests/stdio.c +++ /dev/null @@ -1,5 +0,0 @@ -#include - -int main(void) { - return 0; -} \ No newline at end of file diff --git a/abstract-machine/klib/tests/string.c b/abstract-machine/klib/tests/string.c deleted file mode 100644 index 640f2d6..0000000 --- a/abstract-machine/klib/tests/string.c +++ /dev/null @@ -1,75 +0,0 @@ -#include -#include -#include - -void test_strcpy() { - char b[32]; - char *s; - b[16]='a'; b[17]='b'; b[18]='c'; b[19]=0; - panic_on((s = strcpy(b, b+16)) != b, "strcpy wrong return value"); - panic_on(strcmp(s, "abc") != 0, "strcpy gave incorrect string"); - panic_on((s = strcpy(b+1, b+16)) != b+1, "strcpy wrong return value"); - panic_on(strcmp(s, "abc") != 0, "strcpy gave incorrect string"); - - panic_on((s = strcpy(b+1, b+17)) != b+1, "strcpy wrong return value"); - panic_on(strcmp(s, "bc") != 0, "strcpy gave incorrect string"); -} - -void test_strncpy() { - char b[32]; - char *s; - int i; - b[3] = 'x'; b[4] = 0; - panic_on((s = strncpy(b, "abc", 3)) != b, "strncpy wrong return value"); - panic_on(b[2] != 'c', "strncpy fails to copy last byte"); - panic_on(b[3] != 'x', "strncpy overruns buffer to null-terminate"); -} - -void test_strncmp() { - panic_on(strncmp("abcd", "abce", 3) != 0, "strncmp compares past n"); - panic_on(strncmp("abc", "abd", 3) == 0, "strncmp fails to compare n-1st byte"); -} - -void test_memset() { - uint8_t arr[128]; - arr[120] = 0xd; - panic_on(memset(arr, 0xf, 120) != arr, "memset wrong return value"); - panic_on(arr[7] != 0xf, "memset fails to set value in range"); - panic_on(arr[120] != 0xd, "memset set value past n"); -} - -void test_memcpy() { - const uint8_t src[] = { 0x0, 0x0, 0x1, 0x2, 0x3, 0x4, 0x0, 0x0 }; - uint8_t dst[8] = {0}; - memcpy(dst, src, 8); - panic_on(memcmp(dst, src, 8) != 0, "memcpy fails to copy memory"); -} - -void test_memmove() { - const uint8_t ref[] = { 0x0, 0x0, 0x1, 0x2, 0x3, 0x4, 0x0, 0x0 }; - uint8_t dst[8] = {0}; - const uint8_t ans1[] = { 0x1, 0x2, 0x3, 0x4, 0x3, 0x4, 0x0, 0x0 }; - const uint8_t ans2[] = { 0x1, 0x2, 0x2, 0x3, 0x4, 0x3, 0x0, 0x0 }; - const uint8_t ans3[] = { 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x3, 0x4 }; - memmove(dst, ref, 8); - panic_on(memcmp(dst, ref, 8) != 0, "memmove fails to copy non-overlapping memory"); - - memmove(dst, dst + 2, 4); - panic_on(memcmp(dst, ans1, 8) != 0, "memmove fails to copy overlapping memory (dst < src)"); - - memmove(dst + 2, dst + 1, 4); - panic_on(memcmp(dst, ans2, 8) != 0, "memmove fails to copy overlapping memory (src < dst)"); - - memmove(dst + 3, dst, 5); - panic_on(memcmp(dst, ans3, 8) != 0, "memmove fails to copy overlapping memory (src < dst)"); -} - -int main(void) { - test_strcpy(); - test_strncpy(); - test_strncmp(); - test_memset(); - test_memcpy(); - test_memmove(); - return 0; -} diff --git a/abstract-machine/out/install/lib/libklib.a b/abstract-machine/out/install/lib/libklib.a deleted file mode 100644 index 5023a30..0000000 Binary files a/abstract-machine/out/install/lib/libklib.a and /dev/null differ diff --git a/am-kernels b/am-kernels deleted file mode 160000 index 2f55982..0000000 --- a/am-kernels +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2f559823a63cf6909d5a9e32dee47d6891caf553 diff --git a/flake.nix b/flake.nix index 42dccac..4492e28 100644 --- a/flake.nix +++ b/flake.nix @@ -12,37 +12,54 @@ localSystem = system; crossSystem = { config = "riscv32-none-elf"; - gcc = { - abi = "ilp32"; - arch = "rv32if"; - }; + abi = "ilp32"; }; }; in { - packages.nemu = pkgs.callPackage ./nemu { am-kernels = self.packages.${system}.am-kernels-cmake; }; - packages.abstract-machine = crossPkgs.callPackage ./abstract-machine { isa = "riscv"; platform = "nemu"; }; + packages.nemu = pkgs.callPackage ./nemu { am-kernels = self.packages.${system}.am-kernels; }; - packages.am-kernels-cmake = crossPkgs.stdenv.mkDerivation rec { - pname = "am-kernels-cmake"; + packages.am-kernels = crossPkgs.stdenv.mkDerivation rec { + pname = "am-kernels"; version = "2024.02.18"; - src = ./am-kernels; + src = pkgs.fetchFromGitHub { + owner = "NJU-ProjectN"; + repo = "am-kernels"; + rev = "bb725d6f8223dd7de831c3b692e8c4531e9d01af"; + hash = "sha256-ZHdrw28TN8cMvhhzM469OV7cp0Yp+8yao855HP4+P4A="; + }; - nativeBuildInputs = [ - pkgs.cmake - ]; + AM_HOME = pkgs.fetchFromGitHub { + owner = "xinyangli"; + repo = "abstract-machine"; + rev = "788595aac61c6b2f3b78ca8aa7d08dc33911bca4"; + hash = "sha256-YvWHIBP9tz3HL2TyibftvvQrpkWUDPnviCF4oyLmdjg="; + }; - cmakeFlags = [ - (pkgs.lib.cmakeFeature "ISA" "riscv") - (pkgs.lib.cmakeFeature "PLATFORM" "nemu") - (pkgs.lib.cmakeFeature "CMAKE_INSTALL_DATADIR" "share") - ]; + ARCH = "riscv32-nemu"; - buildInputs = [ - # SDL2 - self.packages.${system}.abstract-machine - ]; + patchPhase = '' + sed -i 's/\/bin\/echo/echo/' tests/cpu-tests/Makefile + ''; + + buildPhase = '' + AS=$CC make -C tests/cpu-tests BUILD_DIR=$(pwd)/build ARCH=$ARCH + ''; + + installPhase = '' + mkdir -p $out/share/images $out/share/dump + cp build/riscv32-nemu/*.bin $out/share/images + cp build/riscv32-nemu/*.txt $out/share/dump + ''; + + dontFixup = true; + }; + + devShells.default = pkgs.mkShell { + packages = with pkgs; [ + gdb + ] ++ builtins.attrValues self.packages.${system}; }; devShells.nemu = pkgs.mkShell { @@ -57,3 +74,4 @@ } ); } + diff --git a/nemu/.result.tmp b/nemu/.result.tmp new file mode 100644 index 0000000..e69de29 diff --git a/nemu/Makefile b/nemu/Makefile index e5e5838..e5e37c3 100644 --- a/nemu/Makefile +++ b/nemu/Makefile @@ -94,4 +94,4 @@ integration-tests: $(IMAGES) test: unit-tests integration-tests -.PHONY: test unit-tests integration-tests +.PHONY: test unit-tests integration-tests \ No newline at end of file diff --git a/nemu/default.nix b/nemu/default.nix index e746a7c..a886b79 100644 --- a/nemu/default.nix +++ b/nemu/default.nix @@ -38,7 +38,7 @@ stdenv.mkDerivation rec { doCheck = true; checkPhase = '' - export IMAGES_PATH=${am-kernels}/share/binary + export IMAGES_PATH=${am-kernels}/share/images make test ''; @@ -49,7 +49,7 @@ stdenv.mkDerivation rec { shellHook = '' export NEMU_HOME=$(pwd) - export IMAGES_PATH=${am-kernels}/share/binary + export IMAGES_PATH=${am-kernels}/share/images ''; meta = with lib; { diff --git a/nemu/include/debug.h b/nemu/include/debug.h index 329c64a..3aae781 100644 --- a/nemu/include/debug.h +++ b/nemu/include/debug.h @@ -18,7 +18,6 @@ #include #include -#include IFDEF(CONFIG_ITRACE, void log_itrace_print()); diff --git a/nemu/src/isa/riscv32/inst.c b/nemu/src/isa/riscv32/inst.c index 1c41c63..41c2098 100644 --- a/nemu/src/isa/riscv32/inst.c +++ b/nemu/src/isa/riscv32/inst.c @@ -62,7 +62,6 @@ static void do_branch(Decode *s, bool condition, word_t offset) { } } -#ifdef CONFIG_FTRACE static void ftrace_jalr(Decode *s, int rd, vaddr_t dst) { uint32_t i = s->isa.inst.val; int rs1 = BITS(i, 19, 15); @@ -72,7 +71,6 @@ static void ftrace_jalr(Decode *s, int rd, vaddr_t dst) { ftrace_call(s->pc, dst); } } -#endif static int decode_exec(Decode *s) { int rd = 0; diff --git a/nemu/src/monitor/monitor.c b/nemu/src/monitor/monitor.c index 0154208..6755edf 100644 --- a/nemu/src/monitor/monitor.c +++ b/nemu/src/monitor/monitor.c @@ -133,12 +133,8 @@ void init_monitor(int argc, char *argv[]) { // printf("elf_file: %s\n", elf_file); if(elf_file != NULL) { -#ifdef CONFIG_FTRACE void init_elf(const char *path); init_elf(elf_file); -#else - Warning("Elf file provided, but ftrace not turned on. Ignoring elf file."); -#endif } #ifndef CONFIG_ISA_loongarch32r diff --git a/nemu/src/utils/ftrace.c b/nemu/src/utils/ftrace.c index ea2f2b6..ec668c0 100644 --- a/nemu/src/utils/ftrace.c +++ b/nemu/src/utils/ftrace.c @@ -10,6 +10,7 @@ static vaddr_t ftrace_stack[CONFIG_FTRACE_STACK_SIZE] = {0}; static vaddr_t ftrace_stack_len = 0; func_t *func_table = NULL; int func_table_len = 0, func_table_size = 8; +#endif static int cmp_func_t(const void *a, const void *b) { return ((func_t *)a)->start > ((func_t *)b)->start; @@ -121,4 +122,3 @@ void ftrace_return(vaddr_t pc, vaddr_t addr) { Trace("%*s0x%x ret 0x%x <%s+0x%x>", ftrace_stack_len, "", pc, addr, f == NULL ? "???" : f->name, addr - f->start); } -#endif