From 9840f06aacd746e381dff06877f4cad5e4d8095c Mon Sep 17 00:00:00 2001 From: Maschell Date: Thu, 30 Jan 2025 18:34:52 +0100 Subject: [PATCH] Implement support for WUMS 0.3.3 --- Dockerfile | 4 ++-- wumsloader/src/entry.cpp | 2 ++ wumsloader/src/module/ModuleDataFactory.cpp | 2 +- wumsloader/src/utils/hooks.cpp | 11 +++++++++-- wumsloader/src/utils/hooks.h | 2 +- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index c5d85ab..0a45500 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ -FROM ghcr.io/wiiu-env/devkitppc:20240704 +FROM ghcr.io/wiiu-env/devkitppc:20241128 -COPY --from=ghcr.io/wiiu-env/wiiumodulesystem:20240424 /artifacts $DEVKITPRO +COPY --from=ghcr.io/wiiu-env/wiiumodulesystem:0.3.3-dev-20250130-474ef70 /artifacts $DEVKITPRO WORKDIR project diff --git a/wumsloader/src/entry.cpp b/wumsloader/src/entry.cpp index 5c0cf6b..ac1f6ad 100644 --- a/wumsloader/src/entry.cpp +++ b/wumsloader/src/entry.cpp @@ -220,6 +220,7 @@ void doStart(int argc, char **argv) { DEBUG_FUNCTION_LINE_VERBOSE("Call Relocations done hook"); CallHook(gLoadedModules, WUMS_HOOK_RELOCATIONS_DONE); + CallHook(gLoadedModules, WUMS_HOOK_RELOCATIONS_DONE); for (auto &curModule : gLoadedModules) { if (!curModule->isInitBeforeRelocationDoneHook()) { @@ -237,6 +238,7 @@ void doStart(int argc, char **argv) { CallHook(gLoadedModules, WUMS_HOOK_INIT_WUT_DEVOPTAB); CallHook(gLoadedModules, WUMS_HOOK_INIT_WUT_SOCKETS); CallHook(gLoadedModules, WUMS_HOOK_APPLICATION_STARTS); + CallHook(gLoadedModules, WUMS_HOOK_ALL_APPLICATION_STARTS_DONE); deinitLogging(); fini_wut(); diff --git a/wumsloader/src/module/ModuleDataFactory.cpp b/wumsloader/src/module/ModuleDataFactory.cpp index 62e2d1d..ccb72d4 100644 --- a/wumsloader/src/module/ModuleDataFactory.cpp +++ b/wumsloader/src/module/ModuleDataFactory.cpp @@ -95,7 +95,7 @@ std::optional> ModuleDataFactory::load(const std::st } } else if (key == "wums" || key == "wum") { checkedVersion = true; - if (value != "0.3.1" && value != "0.3.2") { + if (value != "0.3.1" && value != "0.3.2" && value != "0.3.3") { DEBUG_FUNCTION_LINE_WARN("Ignoring module - Unsupported WUMS version: %s.", value.c_str()); return std::nullopt; } diff --git a/wumsloader/src/utils/hooks.cpp b/wumsloader/src/utils/hooks.cpp index faa632c..16384e9 100644 --- a/wumsloader/src/utils/hooks.cpp +++ b/wumsloader/src/utils/hooks.cpp @@ -27,7 +27,11 @@ static const char **hook_names = (const char *[]){ "WUMS_HOOK_APPLICATION_ENDS", "WUMS_HOOK_RELOCATIONS_DONE", "WUMS_HOOK_APPLICATION_REQUESTS_EXIT", - "WUMS_HOOK_DEINIT"}; + "WUMS_HOOK_DEINIT", + "WUMS_HOOK_ALL_APPLICATION_STARTS_DONE", + "WUMS_HOOK_ALL_APPLICATION_ENDS_DONE", + "WUMS_HOOK_ALL_APPLICATION_REQUESTS_EXIT_DONE", +}; #endif void CallHook(const std::vector> &modules, wums_hook_type_t type, bool condition) { @@ -75,7 +79,10 @@ void CallHook(const std::shared_ptr &module, wums_hook_type_t type) type == WUMS_HOOK_FINI_WUT_SOCKETS || type == WUMS_HOOK_INIT_WRAPPER || type == WUMS_HOOK_FINI_WRAPPER || - type == WUMS_HOOK_DEINIT)) { + type == WUMS_HOOK_DEINIT || + type == WUMS_HOOK_ALL_APPLICATION_STARTS_DONE || + type == WUMS_HOOK_ALL_APPLICATION_ENDS_DONE || + type == WUMS_HOOK_ALL_APPLICATION_REQUESTS_EXIT_DONE)) { DEBUG_FUNCTION_LINE("Calling hook of type %s [%d] %d for %s: %08X", hook_names[type], type, curHook->getType(), module->getExportName().c_str(), curHook->getTarget()); ((void (*)())((uint32_t *) func_ptr))(); break; diff --git a/wumsloader/src/utils/hooks.h b/wumsloader/src/utils/hooks.h index f527516..7685af1 100644 --- a/wumsloader/src/utils/hooks.h +++ b/wumsloader/src/utils/hooks.h @@ -3,7 +3,7 @@ #include "module/ModuleData.h" #include #include -#include +#include void CallHook(const std::vector> &modules, wums_hook_type_t type, bool condition);