diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..56cc685 --- /dev/null +++ b/.clang-format @@ -0,0 +1,67 @@ +# Generated from CLion C/C++ Code Style settings +BasedOnStyle: LLVM +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: Consecutive +AlignConsecutiveMacros: AcrossEmptyLinesAndComments +AlignOperands: Align +AllowAllArgumentsOnNextLine: false +AllowAllConstructorInitializersOnNextLine: false +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: Always +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Always +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: true +AlwaysBreakAfterReturnType: None +AlwaysBreakTemplateDeclarations: Yes +BreakBeforeBraces: Custom +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: true +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeColon +BreakInheritanceList: BeforeColon +ColumnLimit: 0 +CompactNamespaces: false +ContinuationIndentWidth: 8 +IndentCaseLabels: true +IndentPPDirectives: None +IndentWidth: 4 +KeepEmptyLinesAtTheStartOfBlocks: true +MaxEmptyLinesToKeep: 2 +NamespaceIndentation: All +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PointerAlignment: Right +ReflowComments: false +SpaceAfterCStyleCast: true +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInCStyleCastParentheses: false +SpacesInContainerLiterals: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +TabWidth: 4 +UseTab: Never diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a2d24fa..a83349c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,8 +6,16 @@ on: - master jobs: + clang-format: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: clang-format + run: | + docker run --rm -v ${PWD}:/src wiiuenv/clang-format:13.0.0-2 -r ./source build-binary: runs-on: ubuntu-18.04 + needs: clang-format steps: - uses: actions/checkout@v2 - name: build binary @@ -26,7 +34,7 @@ jobs: id: get_repository_name run: | echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV - echo DATETIME=$(echo $(date '+%Y%m%d-%H%M%S')) >> $GITHUB_ENV + echo DATETIME=$(echo $(date '+%Y%m%d-%H%M%S')) >> $GITHUB_ENV - uses: actions/download-artifact@master with: name: binary diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 0413d45..19c3b14 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -3,8 +3,16 @@ name: CI-PR on: [pull_request] jobs: + clang-format: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: clang-format + run: | + docker run --rm -v ${PWD}:/src wiiuenv/clang-format:13.0.0-2 -r ./source build-binary: runs-on: ubuntu-18.04 + needs: clang-format steps: - uses: actions/checkout@v2 - name: build binary diff --git a/README.md b/README.md index 6103d24..adc19c7 100644 --- a/README.md +++ b/README.md @@ -17,4 +17,8 @@ docker run -it --rm -v ${PWD}:/project functionpatchermodule-builder make # make clean docker run -it --rm -v ${PWD}:/project functionpatchermodule-builder make clean -``` \ No newline at end of file +``` + +## Format the code via docker + +`docker run --rm -v ${PWD}:/src wiiuenv/clang-format:13.0.0-2 -r ./source -i` \ No newline at end of file diff --git a/source/CThread.h b/source/CThread.h index c3b41f0..44dc64e 100644 --- a/source/CThread.h +++ b/source/CThread.h @@ -16,10 +16,10 @@ ****************************************************************************/ #pragma once +#include +#include #include #include -#include -#include class CThread { public: @@ -27,7 +27,7 @@ public: //! constructor explicit CThread(int32_t iAttr, int32_t iPriority = 16, int32_t iStackSize = 0x8000, CThread::Callback callback = NULL, void *callbackArg = NULL) - : pThread(nullptr), pThreadStack(nullptr), pCallback(callback), pCallbackArg(callbackArg) { + : pThread(nullptr), pThreadStack(nullptr), pCallback(callback), pCallbackArg(callbackArg) { //! save attribute assignment iAttributes = iAttr; //! allocate the thread @@ -36,7 +36,9 @@ public: pThreadStack = (uint8_t *) memalign(0x20, iStackSize); //! create the thread if (pThread && pThreadStack) { - OSCreateThread(pThread, (int (*)(int, const char **)) &CThread::threadCallback, 1, (char *) this, (void *) (pThreadStack + iStackSize), iStackSize, iPriority, iAttributes); + // clang-format off + OSCreateThread(pThread, (int(*)(int, const char **)) & CThread::threadCallback, 1, (char *) this, (void *) (pThreadStack + iStackSize), iStackSize, iPriority, iAttributes); + // clang-format on } } @@ -52,7 +54,7 @@ public: static void runOnAllCores(CThread::Callback callback, void *callbackArg, int32_t iAttr = 0, int32_t iPriority = 16, int32_t iStackSize = 0x8000) { int32_t aff[] = {CThread::eAttributeAffCore2, CThread::eAttributeAffCore1, CThread::eAttributeAffCore0}; - for (int i: aff) { + for (int i : aff) { CThread thread(iAttr | i, iPriority, iStackSize, callback, callbackArg); thread.resumeThread(); } @@ -125,19 +127,20 @@ public: if (pThread) { free(pThread); } - pThread = nullptr; + pThread = nullptr; pThreadStack = nullptr; } //! Thread attributes enum eCThreadAttributes { - eAttributeNone = 0x07, - eAttributeAffCore0 = 0x01, - eAttributeAffCore1 = 0x02, - eAttributeAffCore2 = 0x04, - eAttributeDetach = 0x08, + eAttributeNone = 0x07, + eAttributeAffCore0 = 0x01, + eAttributeAffCore1 = 0x02, + eAttributeAffCore2 = 0x04, + eAttributeDetach = 0x08, eAttributePinnedAff = 0x10 }; + private: static int32_t threadCallback(int32_t argc, void *arg) { //! After call to start() continue with the internal function diff --git a/source/function_patcher.cpp b/source/function_patcher.cpp index e09d92b..d9b9261 100644 --- a/source/function_patcher.cpp +++ b/source/function_patcher.cpp @@ -1,11 +1,11 @@ -#include +#include "function_patcher.h" +#include "CThread.h" +#include "logger.h" #include #include +#include #include #include -#include "function_patcher.h" -#include "logger.h" -#include "CThread.h" void writeDataAndFlushIC(CThread *thread, void *arg) { auto *data = (uint32_t *) arg; @@ -13,14 +13,14 @@ void writeDataAndFlushIC(CThread *thread, void *arg) { DCFlushRange(data, sizeof(uint32_t) * 3); uint32_t replace_instruction = data[0]; - uint32_t physical_address = data[1]; - uint32_t effective_address = data[2]; + uint32_t physical_address = data[1]; + uint32_t effective_address = data[2]; DCFlushRange(&replace_instruction, 4); DCFlushRange(&physical_address, 4); DEBUG_FUNCTION_LINE_VERBOSE("Write instruction %08X to %08X [%08X] on core %d", replace_instruction, effective_address, physical_address, OSGetThreadAffinity(OSGetCurrentThread()) / 2); - auto replace_instruction_physical = (uint32_t) & replace_instruction; + auto replace_instruction_physical = (uint32_t) &replace_instruction; if (replace_instruction_physical < 0x00800000 || replace_instruction_physical >= 0x01000000) { replace_instruction_physical = OSEffectiveToPhysical(replace_instruction_physical); @@ -67,8 +67,8 @@ void FunctionPatcherPatchFunction(function_replacement_data_t *replacements, uin DEBUG_FUNCTION_LINE_VERBOSE("Patching %s ...", function_data->function_name); uint32_t physical = function_data->physicalAddr; - auto repl_addr = (uint32_t) function_data->replaceAddr; - auto call_addr = (uint32_t) function_data->replaceCall; + auto repl_addr = (uint32_t) function_data->replaceAddr; + auto call_addr = (uint32_t) function_data->replaceCall; uint32_t real_addr = function_data->virtualAddr; if (function_data->library != LIBRARY_OTHER) { @@ -93,7 +93,7 @@ void FunctionPatcherPatchFunction(function_replacement_data_t *replacements, uin DEBUG_FUNCTION_LINE_VERBOSE("%s physical is located at %08X!", function_data->function_name, physical); - *(volatile uint32_t *) (call_addr) = (uint32_t)(space); + *(volatile uint32_t *) (call_addr) = (uint32_t) (space); auto targetAddr = (uint32_t) space; if (targetAddr < 0x00800000 || targetAddr >= 0x01000000) { @@ -110,7 +110,7 @@ void FunctionPatcherPatchFunction(function_replacement_data_t *replacements, uin space++; // fill the restore instruction section - function_data->realAddr = real_addr; + function_data->realAddr = real_addr; function_data->restoreInstruction = space[-1]; DEBUG_FUNCTION_LINE_VERBOSE("function_data->realAddr = %08X!", function_data->realAddr); @@ -123,10 +123,14 @@ void FunctionPatcherPatchFunction(function_replacement_data_t *replacements, uin 00808d08 4e800420 bctr */ - *space = 0x3d600000 | (((real_addr + 4) >> 16) & 0x0000FFFF); space++; // lis r11 ,0x1234 - *space = 0x616b0000 | ((real_addr + 4) & 0x0000ffff); space++; // ori r11 ,r11 ,0x5678 - *space = 0x7d6903a6; space++; // mtspr CTR ,r11 - *space = 0x4e800420; space++; // bctr + *space = 0x3d600000 | (((real_addr + 4) >> 16) & 0x0000FFFF); + space++; // lis r11 ,0x1234 + *space = 0x616b0000 | ((real_addr + 4) & 0x0000ffff); + space++; // ori r11 ,r11 ,0x5678 + *space = 0x7d6903a6; + space++; // mtspr CTR ,r11 + *space = 0x4e800420; + space++; // bctr //setting jump back uint32_t replace_instr = 0x48000002 | (repl_addr & 0x03FFFFFC); @@ -136,28 +140,45 @@ void FunctionPatcherPatchFunction(function_replacement_data_t *replacements, uin auto repl_addr_test = (uint32_t) space; if (function_data->targetProcess != FP_TARGET_PROCESS_ALL) { // Only use patched function if OSGetUPID matches function_data->targetProcess - *space = 0x3d600000 | (((uint32_t*) OSGetUPID)[0] & 0x0000FFFF); space++; // lis r11 ,0x0 - *space = 0x816b0000 | (((uint32_t*) OSGetUPID)[1] & 0x0000FFFF); space++; // lwz r11 ,0x0(r11) - if(function_data->targetProcess == FP_TARGET_PROCESS_GAME_AND_MENU){ - *space = 0x2c0b0000 | FP_TARGET_PROCESS_WII_U_MENU; space++; // cmpwi r11 ,FP_TARGET_PROCESS_WII_U_MENU - *space = 0x41820000 | 0x00000020; space++; // beq myfunc - *space = 0x2c0b0000 | FP_TARGET_PROCESS_GAME; space++; // cmpwi r11 ,FP_TARGET_PROCESS_GAME - *space = 0x41820000 | 0x00000018; space++; // beq myfunc + *space = 0x3d600000 | (((uint32_t *) OSGetUPID)[0] & 0x0000FFFF); + space++; // lis r11 ,0x0 + *space = 0x816b0000 | (((uint32_t *) OSGetUPID)[1] & 0x0000FFFF); + space++; // lwz r11 ,0x0(r11) + if (function_data->targetProcess == FP_TARGET_PROCESS_GAME_AND_MENU) { + *space = 0x2c0b0000 | FP_TARGET_PROCESS_WII_U_MENU; + space++; // cmpwi r11 ,FP_TARGET_PROCESS_WII_U_MENU + *space = 0x41820000 | 0x00000020; + space++; // beq myfunc + *space = 0x2c0b0000 | FP_TARGET_PROCESS_GAME; + space++; // cmpwi r11 ,FP_TARGET_PROCESS_GAME + *space = 0x41820000 | 0x00000018; + space++; // beq myfunc } else { - *space = 0x2c0b0000 | function_data->targetProcess; space++; // cmpwi r11 ,function_data->targetProcess - *space = 0x41820000 | 0x00000018; space++; // beq myfunc + *space = 0x2c0b0000 | function_data->targetProcess; + space++; // cmpwi r11 ,function_data->targetProcess + *space = 0x41820000 | 0x00000018; + space++; // beq myfunc } - *space = 0x3d600000 | (((real_addr + 4) >> 16) & 0x0000FFFF); space++; // lis r11 ,(real_addr + 4)@hi - *space = 0x616b0000 | ((real_addr + 4) & 0x0000ffff); space++; // ori r11 ,(real_addr + 4)@lo - *space = 0x7d6903a6; space++; // mtspr CTR ,r11 - *space = function_data->restoreInstruction; space++; // - *space = 0x4e800420; space++; // bctr + *space = 0x3d600000 | (((real_addr + 4) >> 16) & 0x0000FFFF); + space++; // lis r11 ,(real_addr + 4)@hi + *space = 0x616b0000 | ((real_addr + 4) & 0x0000ffff); + space++; // ori r11 ,(real_addr + 4)@lo + *space = 0x7d6903a6; + space++; // mtspr CTR ,r11 + *space = function_data->restoreInstruction; + space++; // + *space = 0x4e800420; + space++; // bctr } -// myfunc: - *space = 0x3d600000 | (((repl_addr) >> 16) & 0x0000FFFF); space++; // lis r11 ,repl_addr@hi - *space = 0x616b0000 | ((repl_addr) & 0x0000ffff); space++; // ori r11 ,r11 ,repl_addr@lo - *space = 0x7d6903a6; space++; // mtspr CTR ,r11 - *space = 0x4e800420; space++; // bctr + // myfunc: + *space = 0x3d600000 | (((repl_addr) >> 16) & 0x0000FFFF); + space++; // lis r11 ,repl_addr@hi + *space = 0x616b0000 | ((repl_addr) &0x0000ffff); + space++; // ori r11 ,r11 ,repl_addr@lo + *space = 0x7d6903a6; + space++; // mtspr CTR ,r11 + *space = 0x4e800420; + space++; // bctr // Make sure the trampoline itself is usable. if ((repl_addr_test & 0x03FFFFFC) != repl_addr_test) { @@ -177,16 +198,13 @@ void FunctionPatcherPatchFunction(function_replacement_data_t *replacements, uin uint32_t data[] = { replace_instr, physical, - real_addr - }; + real_addr}; CThread::runOnAllCores(writeDataAndFlushIC, data); function_data->alreadyPatched = 1; DEBUG_FUNCTION_LINE_VERBOSE("done with patching %s!", function_data->function_name); - } DEBUG_FUNCTION_LINE_VERBOSE("Done with patching given functions!"); - } void FunctionPatcherRestoreFunctions(function_replacement_data_t *replacements, uint32_t size) { @@ -208,8 +226,7 @@ void FunctionPatcherRestoreFunctions(function_replacement_data_t *replacements, // Other processes than the wii u menu and game one seem to keep their rpl's loaded. replacements[i].targetProcess != FP_TARGET_PROCESS_GAME_AND_MENU && replacements[i].targetProcess != FP_TARGET_PROCESS_GAME && - replacements[i].targetProcess != FP_TARGET_PROCESS_WII_U_MENU - ) { + replacements[i].targetProcess != FP_TARGET_PROCESS_WII_U_MENU) { DEBUG_FUNCTION_LINE_VERBOSE("Its a dynamic function. We don't need to restore it!", replacements[i].function_name); replacements[i].alreadyPatched = false; } else { @@ -223,7 +240,7 @@ void FunctionPatcherRestoreFunctions(function_replacement_data_t *replacements, sourceAddrPhys = sourceAddr + (0x30800000 - 0x00800000); } - if(sourceAddrPhys == 0){ + if (sourceAddrPhys == 0) { OSFatal("Failed to get physical address"); } @@ -245,73 +262,72 @@ bool isDynamicFunction(uint32_t physicalAddress) { } rpl_handling rpl_handles[] __attribute__((section(".data"))) = { - {LIBRARY_AVM, "avm.rpl", nullptr}, - {LIBRARY_CAMERA, "camera.rpl", nullptr}, + {LIBRARY_AVM, "avm.rpl", nullptr}, + {LIBRARY_CAMERA, "camera.rpl", nullptr}, {LIBRARY_COREINIT, "coreinit.rpl", nullptr}, - {LIBRARY_DC, "dc.rpl", nullptr}, - {LIBRARY_DMAE, "dmae.rpl", nullptr}, - {LIBRARY_DRMAPP, "drmapp.rpl", nullptr}, - {LIBRARY_ERREULA, "erreula.rpl", nullptr}, - {LIBRARY_GX2, "gx2.rpl", nullptr}, - {LIBRARY_H264, "h264.rpl", nullptr}, - {LIBRARY_LZMA920, "lzma920.rpl", nullptr}, - {LIBRARY_MIC, "mic.rpl", nullptr}, - {LIBRARY_NFC, "nfc.rpl", nullptr}, + {LIBRARY_DC, "dc.rpl", nullptr}, + {LIBRARY_DMAE, "dmae.rpl", nullptr}, + {LIBRARY_DRMAPP, "drmapp.rpl", nullptr}, + {LIBRARY_ERREULA, "erreula.rpl", nullptr}, + {LIBRARY_GX2, "gx2.rpl", nullptr}, + {LIBRARY_H264, "h264.rpl", nullptr}, + {LIBRARY_LZMA920, "lzma920.rpl", nullptr}, + {LIBRARY_MIC, "mic.rpl", nullptr}, + {LIBRARY_NFC, "nfc.rpl", nullptr}, {LIBRARY_NIO_PROF, "nio_prof.rpl", nullptr}, {LIBRARY_NLIBCURL, "nlibcurl.rpl", nullptr}, - {LIBRARY_NLIBNSS, "nlibnss.rpl", nullptr}, + {LIBRARY_NLIBNSS, "nlibnss.rpl", nullptr}, {LIBRARY_NLIBNSS2, "nlibnss2.rpl", nullptr}, - {LIBRARY_NN_AC, "nn_ac.rpl", nullptr}, - {LIBRARY_NN_ACP, "nn_acp.rpl", nullptr}, - {LIBRARY_NN_ACT, "nn_act.rpl", nullptr}, - {LIBRARY_NN_AOC, "nn_aoc.rpl", nullptr}, - {LIBRARY_NN_BOSS, "nn_boss.rpl", nullptr}, - {LIBRARY_NN_CCR, "nn_ccr.rpl", nullptr}, - {LIBRARY_NN_CMPT, "nn_cmpt.rpl", nullptr}, - {LIBRARY_NN_DLP, "nn_dlp.rpl", nullptr}, - {LIBRARY_NN_EC, "nn_ec.rpl", nullptr}, - {LIBRARY_NN_FP, "nn_fp.rpl", nullptr}, - {LIBRARY_NN_HAI, "nn_hai.rpl", nullptr}, - {LIBRARY_NN_HPAD, "nn_hpad.rpl", nullptr}, - {LIBRARY_NN_IDBE, "nn_idbe.rpl", nullptr}, - {LIBRARY_NN_NDM, "nn_ndm.rpl", nullptr}, + {LIBRARY_NN_AC, "nn_ac.rpl", nullptr}, + {LIBRARY_NN_ACP, "nn_acp.rpl", nullptr}, + {LIBRARY_NN_ACT, "nn_act.rpl", nullptr}, + {LIBRARY_NN_AOC, "nn_aoc.rpl", nullptr}, + {LIBRARY_NN_BOSS, "nn_boss.rpl", nullptr}, + {LIBRARY_NN_CCR, "nn_ccr.rpl", nullptr}, + {LIBRARY_NN_CMPT, "nn_cmpt.rpl", nullptr}, + {LIBRARY_NN_DLP, "nn_dlp.rpl", nullptr}, + {LIBRARY_NN_EC, "nn_ec.rpl", nullptr}, + {LIBRARY_NN_FP, "nn_fp.rpl", nullptr}, + {LIBRARY_NN_HAI, "nn_hai.rpl", nullptr}, + {LIBRARY_NN_HPAD, "nn_hpad.rpl", nullptr}, + {LIBRARY_NN_IDBE, "nn_idbe.rpl", nullptr}, + {LIBRARY_NN_NDM, "nn_ndm.rpl", nullptr}, {LIBRARY_NN_NETS2, "nn_nets2.rpl", nullptr}, - {LIBRARY_NN_NFP, "nn_nfp.rpl", nullptr}, - {LIBRARY_NN_NIM, "nn_nim.rpl", nullptr}, - {LIBRARY_NN_OLV, "nn_olv.rpl", nullptr}, - {LIBRARY_NN_PDM, "nn_pdm.rpl", nullptr}, - {LIBRARY_NN_SAVE, "nn_save.rpl", nullptr}, - {LIBRARY_NN_SL, "nn_sl.rpl", nullptr}, - {LIBRARY_NN_SPM, "nn_spm.rpl", nullptr}, - {LIBRARY_NN_TEMP, "nn_temp.rpl", nullptr}, - {LIBRARY_NN_UDS, "nn_uds.rpl", nullptr}, - {LIBRARY_NN_VCTL, "nn_vctl.rpl", nullptr}, - {LIBRARY_NSYSCCR, "nsysccr.rpl", nullptr}, - {LIBRARY_NSYSHID, "nsyshid.rpl", nullptr}, - {LIBRARY_NSYSKBD, "nsyskbd.rpl", nullptr}, - {LIBRARY_NSYSNET, "nsysnet.rpl", nullptr}, - {LIBRARY_NSYSUHS, "nsysuhs.rpl", nullptr}, - {LIBRARY_NSYSUVD, "nsysuvd.rpl", nullptr}, - {LIBRARY_NTAG, "ntag.rpl", nullptr}, + {LIBRARY_NN_NFP, "nn_nfp.rpl", nullptr}, + {LIBRARY_NN_NIM, "nn_nim.rpl", nullptr}, + {LIBRARY_NN_OLV, "nn_olv.rpl", nullptr}, + {LIBRARY_NN_PDM, "nn_pdm.rpl", nullptr}, + {LIBRARY_NN_SAVE, "nn_save.rpl", nullptr}, + {LIBRARY_NN_SL, "nn_sl.rpl", nullptr}, + {LIBRARY_NN_SPM, "nn_spm.rpl", nullptr}, + {LIBRARY_NN_TEMP, "nn_temp.rpl", nullptr}, + {LIBRARY_NN_UDS, "nn_uds.rpl", nullptr}, + {LIBRARY_NN_VCTL, "nn_vctl.rpl", nullptr}, + {LIBRARY_NSYSCCR, "nsysccr.rpl", nullptr}, + {LIBRARY_NSYSHID, "nsyshid.rpl", nullptr}, + {LIBRARY_NSYSKBD, "nsyskbd.rpl", nullptr}, + {LIBRARY_NSYSNET, "nsysnet.rpl", nullptr}, + {LIBRARY_NSYSUHS, "nsysuhs.rpl", nullptr}, + {LIBRARY_NSYSUVD, "nsysuvd.rpl", nullptr}, + {LIBRARY_NTAG, "ntag.rpl", nullptr}, {LIBRARY_PADSCORE, "padscore.rpl", nullptr}, - {LIBRARY_PROC_UI, "proc_ui.rpl", nullptr}, + {LIBRARY_PROC_UI, "proc_ui.rpl", nullptr}, {LIBRARY_SNDCORE2, "sndcore2.rpl", nullptr}, {LIBRARY_SNDUSER2, "snduser2.rpl", nullptr}, {LIBRARY_SND_CORE, "snd_core.rpl", nullptr}, {LIBRARY_SND_USER, "snd_user.rpl", nullptr}, - {LIBRARY_SWKBD, "swkbd.rpl", nullptr}, - {LIBRARY_SYSAPP, "sysapp.rpl", nullptr}, - {LIBRARY_TCL, "tcl.rpl", nullptr}, - {LIBRARY_TVE, "tve.rpl", nullptr}, - {LIBRARY_UAC, "uac.rpl", nullptr}, - {LIBRARY_UAC_RPL, "uac_rpl.rpl", nullptr}, - {LIBRARY_USB_MIC, "usb_mic.rpl", nullptr}, - {LIBRARY_UVC, "uvc.rpl", nullptr}, - {LIBRARY_UVD, "uvd.rpl", nullptr}, - {LIBRARY_VPAD, "vpad.rpl", nullptr}, + {LIBRARY_SWKBD, "swkbd.rpl", nullptr}, + {LIBRARY_SYSAPP, "sysapp.rpl", nullptr}, + {LIBRARY_TCL, "tcl.rpl", nullptr}, + {LIBRARY_TVE, "tve.rpl", nullptr}, + {LIBRARY_UAC, "uac.rpl", nullptr}, + {LIBRARY_UAC_RPL, "uac_rpl.rpl", nullptr}, + {LIBRARY_USB_MIC, "usb_mic.rpl", nullptr}, + {LIBRARY_UVC, "uvc.rpl", nullptr}, + {LIBRARY_UVD, "uvd.rpl", nullptr}, + {LIBRARY_VPAD, "vpad.rpl", nullptr}, {LIBRARY_VPADBASE, "vpadbase.rpl", nullptr}, - {LIBRARY_ZLIB125, "zlib125.rpl", nullptr} -}; + {LIBRARY_ZLIB125, "zlib125.rpl", nullptr}}; uint32_t getAddressOfFunction(char *functionName, function_replacement_library_type_t library) { uint32_t real_addr = 0; @@ -349,13 +365,13 @@ uint32_t getAddressOfFunction(char *functionName, function_replacement_library_t return 0; } - if ((library == LIBRARY_NN_ACP) && (uint32_t)(*(volatile uint32_t *) (real_addr) & 0x48000002) == 0x48000000) { - auto address_diff = (uint32_t)(*(volatile uint32_t *) (real_addr) & 0x03FFFFFC); + if ((library == LIBRARY_NN_ACP) && (uint32_t) (*(volatile uint32_t *) (real_addr) &0x48000002) == 0x48000000) { + auto address_diff = (uint32_t) (*(volatile uint32_t *) (real_addr) &0x03FFFFFC); if ((address_diff & 0x03000000) == 0x03000000) { address_diff |= 0xFC000000; } real_addr += (int32_t) address_diff; - if ((uint32_t)(*(volatile uint32_t *) (real_addr) & 0x48000002) == 0x48000000) { + if ((uint32_t) (*(volatile uint32_t *) (real_addr) &0x48000002) == 0x48000000) { return 0; } } diff --git a/source/function_patcher.h b/source/function_patcher.h index 0218d1d..2795432 100644 --- a/source/function_patcher.h +++ b/source/function_patcher.h @@ -1,7 +1,7 @@ #pragma once -#include #include +#include #ifdef __cplusplus extern "C" { diff --git a/source/logger.c b/source/logger.c index 0411db7..f700806 100644 --- a/source/logger.c +++ b/source/logger.c @@ -1,19 +1,19 @@ #ifdef DEBUG #include -#include #include #include +#include uint32_t moduleLogInit = false; -uint32_t cafeLogInit = false; -uint32_t udpLogInit = false; +uint32_t cafeLogInit = false; +uint32_t udpLogInit = false; #endif // DEBUG void initLogging() { #ifdef DEBUG if (!(moduleLogInit = WHBLogModuleInit())) { cafeLogInit = WHBLogCafeInit(); - udpLogInit = WHBLogUdpInit(); + udpLogInit = WHBLogUdpInit(); } #endif // DEBUG } diff --git a/source/logger.h b/source/logger.h index 6ff5ae2..061d52e 100644 --- a/source/logger.h +++ b/source/logger.h @@ -1,7 +1,7 @@ #pragma once -#include #include +#include #ifdef __cplusplus extern "C" { @@ -9,26 +9,28 @@ extern "C" { #ifdef DEBUG -#define __FILENAME_X__ (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) -#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILENAME_X__) +#define __FILENAME_X__ (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) +#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILENAME_X__) #define DEBUG_FUNCTION_LINE_VERBOSE(FMT, ARGS...) while (0) -#define DEBUG_FUNCTION_LINE(FMT, ARGS...)do { \ - WHBLogPrintf("[%23s]%30s@L%04d: " FMT "",__FILENAME__,__FUNCTION__, __LINE__, ## ARGS); \ +#define DEBUG_FUNCTION_LINE(FMT, ARGS...) \ + do { \ + WHBLogPrintf("[%23s]%30s@L%04d: " FMT "", __FILENAME__, __FUNCTION__, __LINE__, ##ARGS); \ } while (0) -#define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...)do { \ - WHBLogWritef("[%23s]%30s@L%04d: " FMT "",__FILENAME__,__FUNCTION__, __LINE__, ## ARGS); \ +#define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...) \ + do { \ + WHBLogWritef("[%23s]%30s@L%04d: " FMT "", __FILENAME__, __FUNCTION__, __LINE__, ##ARGS); \ } while (0) #else #define DEBUG_FUNCTION_LINE_VERBOSE(FMT, ARGS...) while (0) -#define DEBUG_FUNCTION_LINE(FMT, ARGS...) while (0) +#define DEBUG_FUNCTION_LINE(FMT, ARGS...) while (0) -#define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...) while (0) +#define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...) while (0) #endif @@ -39,4 +41,3 @@ void deinitLogging(); #ifdef __cplusplus } #endif - diff --git a/source/main.cpp b/source/main.cpp index f77d4d5..75ce468 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -1,5 +1,5 @@ -#include #include "logger.h" +#include #include "function_patcher.h"