mirror of
https://github.com/wiiu-env/WUMSLoader.git
synced 2024-06-02 08:38:48 +02:00
Rewrite InitHook calling, add functions to call hooks only when a condition is true
This commit is contained in:
parent
8eeb8d95dc
commit
7f76c9f8c8
|
@ -23,6 +23,8 @@ extern "C" void socket_lib_init();
|
||||||
|
|
||||||
std::vector<std::shared_ptr<ModuleDataMinimal>> OrderModulesByDependencies(const std::vector<std::shared_ptr<ModuleDataMinimal>> &loadedModules);
|
std::vector<std::shared_ptr<ModuleDataMinimal>> OrderModulesByDependencies(const std::vector<std::shared_ptr<ModuleDataMinimal>> &loadedModules);
|
||||||
|
|
||||||
|
void CallInitHooksForModule(const std::shared_ptr<ModuleDataMinimal> &curModule);
|
||||||
|
|
||||||
extern "C" void doStart(int argc, char **argv);
|
extern "C" void doStart(int argc, char **argv);
|
||||||
// We need to wrap it to make sure the main function is called AFTER our code.
|
// We need to wrap it to make sure the main function is called AFTER our code.
|
||||||
// The compiler tries to optimize this otherwise and calling the main function earlier
|
// The compiler tries to optimize this otherwise and calling the main function earlier
|
||||||
|
@ -175,17 +177,7 @@ extern "C" void doStart(int argc, char **argv) {
|
||||||
|
|
||||||
for (auto &curModule: loadedModules) {
|
for (auto &curModule: loadedModules) {
|
||||||
if (curModule->isInitBeforeRelocationDoneHook()) {
|
if (curModule->isInitBeforeRelocationDoneHook()) {
|
||||||
CallHook(curModule, WUMS_HOOK_INIT_WUT_MALLOC);
|
CallInitHooksForModule(curModule);
|
||||||
CallHook(curModule, WUMS_HOOK_INIT_WUT_NEWLIB);
|
|
||||||
CallHook(curModule, WUMS_HOOK_INIT_WUT_STDCPP);
|
|
||||||
CallHook(curModule, WUMS_HOOK_INIT_WUT_DEVOPTAB);
|
|
||||||
CallHook(curModule, WUMS_HOOK_INIT_WUT_SOCKETS);
|
|
||||||
CallHook(curModule, WUMS_HOOK_INIT);
|
|
||||||
CallHook(curModule, WUMS_HOOK_FINI_WUT_SOCKETS);
|
|
||||||
CallHook(curModule, WUMS_HOOK_FINI_WUT_DEVOPTAB);
|
|
||||||
CallHook(curModule, WUMS_HOOK_FINI_WUT_STDCPP);
|
|
||||||
CallHook(curModule, WUMS_HOOK_FINI_WUT_NEWLIB);
|
|
||||||
CallHook(curModule, WUMS_HOOK_FINI_WUT_MALLOC);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,17 +194,7 @@ extern "C" void doStart(int argc, char **argv) {
|
||||||
|
|
||||||
for (auto &curModule: loadedModules) {
|
for (auto &curModule: loadedModules) {
|
||||||
if (!curModule->isInitBeforeRelocationDoneHook()) {
|
if (!curModule->isInitBeforeRelocationDoneHook()) {
|
||||||
CallHook(curModule, WUMS_HOOK_INIT_WUT_MALLOC);
|
CallInitHooksForModule(curModule);
|
||||||
CallHook(curModule, WUMS_HOOK_INIT_WUT_NEWLIB);
|
|
||||||
CallHook(curModule, WUMS_HOOK_INIT_WUT_STDCPP);
|
|
||||||
CallHook(curModule, WUMS_HOOK_INIT_WUT_DEVOPTAB);
|
|
||||||
CallHook(curModule, WUMS_HOOK_INIT_WUT_SOCKETS);
|
|
||||||
CallHook(curModule, WUMS_HOOK_INIT);
|
|
||||||
CallHook(curModule, WUMS_HOOK_FINI_WUT_SOCKETS);
|
|
||||||
CallHook(curModule, WUMS_HOOK_FINI_WUT_DEVOPTAB);
|
|
||||||
CallHook(curModule, WUMS_HOOK_FINI_WUT_STDCPP);
|
|
||||||
CallHook(curModule, WUMS_HOOK_FINI_WUT_NEWLIB);
|
|
||||||
CallHook(curModule, WUMS_HOOK_FINI_WUT_MALLOC);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -230,6 +212,20 @@ extern "C" void doStart(int argc, char **argv) {
|
||||||
//CallHook(loadedModules, WUMS_HOOK_FINI_WUT);
|
//CallHook(loadedModules, WUMS_HOOK_FINI_WUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CallInitHooksForModule(const std::shared_ptr<ModuleDataMinimal> &curModule) {
|
||||||
|
CallHook(curModule, WUMS_HOOK_INIT_WUT_MALLOC);
|
||||||
|
CallHook(curModule, WUMS_HOOK_INIT_WUT_NEWLIB);
|
||||||
|
CallHook(curModule, WUMS_HOOK_INIT_WUT_STDCPP);
|
||||||
|
CallHook(curModule, WUMS_HOOK_INIT_WUT_DEVOPTAB);
|
||||||
|
CallHook(curModule, WUMS_HOOK_INIT_WUT_SOCKETS);
|
||||||
|
CallHook(curModule, WUMS_HOOK_INIT);
|
||||||
|
CallHook(curModule, WUMS_HOOK_FINI_WUT_SOCKETS);
|
||||||
|
CallHook(curModule, WUMS_HOOK_FINI_WUT_DEVOPTAB);
|
||||||
|
CallHook(curModule, WUMS_HOOK_FINI_WUT_STDCPP);
|
||||||
|
CallHook(curModule, WUMS_HOOK_FINI_WUT_NEWLIB);
|
||||||
|
CallHook(curModule, WUMS_HOOK_FINI_WUT_MALLOC);
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<std::shared_ptr<ModuleDataMinimal>> OrderModulesByDependencies(const std::vector<std::shared_ptr<ModuleDataMinimal>> &loadedModules) {
|
std::vector<std::shared_ptr<ModuleDataMinimal>> OrderModulesByDependencies(const std::vector<std::shared_ptr<ModuleDataMinimal>> &loadedModules) {
|
||||||
std::vector<std::shared_ptr<ModuleDataMinimal>> finalOrder;
|
std::vector<std::shared_ptr<ModuleDataMinimal>> finalOrder;
|
||||||
std::vector<std::string> loadedModulesExportNames;
|
std::vector<std::string> loadedModulesExportNames;
|
||||||
|
|
|
@ -21,6 +21,12 @@ static const char **hook_names = (const char *[]) {
|
||||||
"WUMS_HOOK_APPLICATION_REQUESTS_EXIT"
|
"WUMS_HOOK_APPLICATION_REQUESTS_EXIT"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void CallHook(const std::vector<std::shared_ptr<ModuleDataMinimal>> &modules, wums_hook_type_t type, bool condition) {
|
||||||
|
if (condition) {
|
||||||
|
CallHook(modules, type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CallHook(const std::vector<std::shared_ptr<ModuleDataMinimal>> &modules, wums_hook_type_t type) {
|
void CallHook(const std::vector<std::shared_ptr<ModuleDataMinimal>> &modules, wums_hook_type_t type) {
|
||||||
DEBUG_FUNCTION_LINE_VERBOSE("Calling hook of type %s [%d] for all modules\n", hook_names[type], type);
|
DEBUG_FUNCTION_LINE_VERBOSE("Calling hook of type %s [%d] for all modules\n", hook_names[type], type);
|
||||||
for (auto &curModule: modules) {
|
for (auto &curModule: modules) {
|
||||||
|
@ -28,6 +34,12 @@ void CallHook(const std::vector<std::shared_ptr<ModuleDataMinimal>> &modules, wu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CallHook(const std::shared_ptr<ModuleDataMinimal> &module, wums_hook_type_t type, bool condition) {
|
||||||
|
if (condition) {
|
||||||
|
CallHook(module, type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CallHook(const std::shared_ptr<ModuleDataMinimal> &module, wums_hook_type_t type) {
|
void CallHook(const std::shared_ptr<ModuleDataMinimal> &module, wums_hook_type_t type) {
|
||||||
if (!module->relocationsDone) {
|
if (!module->relocationsDone) {
|
||||||
DEBUG_FUNCTION_LINE("Hook not called because the relocations failed\n");
|
DEBUG_FUNCTION_LINE("Hook not called because the relocations failed\n");
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <wums.h>
|
#include <wums.h>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "ModuleDataMinimal.h"
|
#include "ModuleDataMinimal.h"
|
||||||
|
|
||||||
|
void CallHook(const std::vector<std::shared_ptr<ModuleDataMinimal>> &modules, wums_hook_type_t type, bool condition);
|
||||||
|
|
||||||
void CallHook(const std::vector<std::shared_ptr<ModuleDataMinimal>> &modules, wums_hook_type_t type);
|
void CallHook(const std::vector<std::shared_ptr<ModuleDataMinimal>> &modules, wums_hook_type_t type);
|
||||||
|
|
||||||
void CallHook(const std::shared_ptr<ModuleDataMinimal> &module, wums_hook_type_t type);
|
void CallHook(const std::shared_ptr<ModuleDataMinimal> &module, wums_hook_type_t type, bool condition);
|
||||||
|
|
||||||
|
void CallHook(const std::shared_ptr<ModuleDataMinimal> &module, wums_hook_type_t type);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user