From 6a7160db91b9b3208abe58f600c077044ad0471a Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Fri, 14 Feb 2025 20:19:41 +0000 Subject: [PATCH 1/4] Update to bdwgc 8.2 --- CMakeLists.txt | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 91d98d86..83c6083e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -265,8 +265,8 @@ add_executable(nekovm if (STATIC_BOEHMGC OR WIN32) ExternalProject_Add(libatomic_ops ${EP_CONFIGS} - URL https://github.com/bdwgc/libatomic_ops/releases/download/v7.6.14/libatomic_ops-7.6.14.tar.gz - URL_MD5 ee8251f5091b7938d18be4dda843a515 + URL https://github.com/ivmai/libatomic_ops/releases/download/v7.8.10/libatomic_ops-7.8.10.tar.gz + URL_HASH SHA256=0db3ebff755db170f65e74a64ec4511812e9ee3185c232eeffeacd274190dfb0 CONFIGURE_COMMAND echo skip config BUILD_COMMAND echo skip build INSTALL_COMMAND echo skip install @@ -276,15 +276,15 @@ if (STATIC_BOEHMGC OR WIN32) set ( BoehmGC_CONFIGS DEPENDS libatomic_ops - URL https://github.com/ivmai/bdwgc/releases/download/v7.6.16/gc-7.6.16.tar.gz - URL_MD5 74fb76b6bccf0874cec65b794535a7dd + URL https://github.com/ivmai/bdwgc/releases/download/v8.2.10/gc-8.2.10.tar.gz + URL_HASH SHA256=832cf4f7cf676b59582ed3b1bbd90a8d0e0ddbc3b11cb3b2096c5177ce39cc47 ) set(GC_INCLUDE_DIR ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/include) if (WIN32) set(GC_LIBRARIES - ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/${CMAKE_CFG_INTDIR}/gcmt-dll.lib + ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/${CMAKE_CFG_INTDIR}/gc.lib ) ExternalProject_Add(BoehmGC ${EP_CONFIGS} @@ -301,14 +301,14 @@ if (STATIC_BOEHMGC OR WIN32) ${CMAKE_BINARY_DIR}/libs/src/BoehmGC/include ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/include/gc ) - add_custom_command(OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gcmt-dll.dll + add_custom_command(OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gc.dll DEPENDS BoehmGC - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/${CMAKE_CFG_INTDIR}/gcmt-dll.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/${CMAKE_CFG_INTDIR}/gc.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ) - add_custom_target(gcmt-dll.dll ALL - DEPENDS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gcmt-dll.dll + add_custom_target(gc.dll ALL + DEPENDS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gc.dll ) - add_dependencies(nekovm gcmt-dll.dll) + add_dependencies(nekovm gc.dll) else() if (APPLE) set(GC_CFLAGS "-w -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") @@ -573,7 +573,7 @@ if (WIN32) include(InstallRequiredSystemLibraries) install ( FILES - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gcmt-dll.dll + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gc.dll DESTINATION . ) else() From 0dd342a17a36359764cf710c63396b75f764603b Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Fri, 14 Feb 2025 20:27:20 +0000 Subject: [PATCH 2/4] Use more fine grained cmake flag on windows On windows, we have to disable thread local allocation as it does not work with the dll build of bdwgc. With version 8.2, it is possible to use the more finegrained `-Denable_thread_local_alloc` flag instead of `-Denable_parallel_mark` which also disables parallel marking. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 83c6083e..1f4a9fbc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -292,7 +292,7 @@ if (STATIC_BOEHMGC OR WIN32) CMAKE_ARGS -Wno-dev -Denable_threads=ON - -Denable_parallel_mark=OFF + -Denable_thread_local_alloc=OFF -DCMAKE_USE_WIN32_THREADS_INIT=ON -DCMAKE_CXX_STANDARD=14 PATCH_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/libs/src/libatomic_ops ${CMAKE_BINARY_DIR}/libs/src/BoehmGC/libatomic_ops From 7a400f3ea5922ff0c1ef8f906e9a2710b535da14 Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Sat, 15 Feb 2025 22:15:46 +0000 Subject: [PATCH 3/4] Enable executable pages in gc for jit mode --- vm/alloc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vm/alloc.c b/vm/alloc.c index 8a3986af..c95f3e44 100644 --- a/vm/alloc.c +++ b/vm/alloc.c @@ -117,6 +117,9 @@ static void null_warn_proc( char *msg, int arg ) { } void neko_gc_init() { +#ifdef NEKO_JIT_ENABLE + GC_set_pages_executable(1); +#endif # ifndef NEKO_WINDOWS // we can't set this on windows with old GC since // it's already initialized through its own DllMain From 2d37e2984c2ec16d140f545c7438254c509acead Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Tue, 23 Dec 2025 13:24:25 +0000 Subject: [PATCH 4/4] [cmake] Add libatomic_ops only for msvc Other compilers should support builtin atomics so don't require libatomic_ops with gc 8.2 --- CMakeLists.txt | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f4a9fbc..c8b134c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -263,25 +263,28 @@ add_executable(nekovm # We need to build from source on Windows regardless if (STATIC_BOEHMGC OR WIN32) - ExternalProject_Add(libatomic_ops - ${EP_CONFIGS} - URL https://github.com/ivmai/libatomic_ops/releases/download/v7.8.10/libatomic_ops-7.8.10.tar.gz - URL_HASH SHA256=0db3ebff755db170f65e74a64ec4511812e9ee3185c232eeffeacd274190dfb0 - CONFIGURE_COMMAND echo skip config - BUILD_COMMAND echo skip build - INSTALL_COMMAND echo skip install - ) - set_target_properties(libatomic_ops PROPERTIES ${EP_PROPS}) - set ( BoehmGC_CONFIGS - DEPENDS libatomic_ops URL https://github.com/ivmai/bdwgc/releases/download/v8.2.10/gc-8.2.10.tar.gz URL_HASH SHA256=832cf4f7cf676b59582ed3b1bbd90a8d0e0ddbc3b11cb3b2096c5177ce39cc47 ) set(GC_INCLUDE_DIR ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/include) + if (MSVC) + ExternalProject_Add(libatomic_ops + ${EP_CONFIGS} + URL https://github.com/ivmai/libatomic_ops/releases/download/v7.8.10/libatomic_ops-7.8.10.tar.gz + URL_HASH SHA256=0db3ebff755db170f65e74a64ec4511812e9ee3185c232eeffeacd274190dfb0 + CONFIGURE_COMMAND echo skip config + BUILD_COMMAND echo skip build + INSTALL_COMMAND echo skip install + ) + set_target_properties(libatomic_ops PROPERTIES ${EP_PROPS}) + + list(APPEND BoehmGC_CONFIGS DEPENDS libatomic_ops) + endif() + if (WIN32) set(GC_LIBRARIES ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/${CMAKE_CFG_INTDIR}/gc.lib