From c4b8d7d8b5d88eb9e5c52d333024f1832daf9508 Mon Sep 17 00:00:00 2001 From: Garhoogin Date: Sat, 6 May 2023 21:35:16 -0500 Subject: [PATCH] Allow using hook.h in assembly source files --- include/hook.h | 39 +++++++++++++++++++++++++++++++++++---- rcm_sample/Makefile | 2 +- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/include/hook.h b/include/hook.h index 0c37cd4..fba4cfb 100644 --- a/include/hook.h +++ b/include/hook.h @@ -1,10 +1,15 @@ #pragma once +#ifndef __ASSEMBLER__ + #ifdef SDK_ARM9 -# include -#else -# include -#endif +#include +#else //SDK_ARM9 +#include +#endif //SDK_ARM9 + +#endif //__ASSEMBLER__ + #define R_ARM_ABS32 2 #define R_ARM_CALL 28 @@ -30,6 +35,8 @@ #define AUX_SHIFT 31 #define AUX_MASK 0x80000000 +#ifndef __ASSEMBLER__ + typedef struct HOOK_TABLE_ENTRY_ { u32 branchSrcAddr : 28; //memory location of patch source u32 type : 3; //type of patch @@ -80,6 +87,21 @@ typedef void (*RCM_UNLOAD_CALLBACK) (u32 imageBase); #define HOOK_TREPL(addr,dest) ((void *) ((HOOK_TYPE_TREPL << HOOK_SHIFT) + (u32) (addr))), (void *) dest #define HOOK_TNSUB(addr,dest) HOOK_DATA16(addr, 0xB500), HOOK_TREPL(((u32) (addr)) + 2, dest), HOOK_DATA16(((u32) (addr)) + 6, 0xBD00) +#else //__ASSEMBLER__ + +#define HOOK_DATA8(addr,b) ((HOOK_TYPE_DATA8 << HOOK_SHIFT) + addr), b +#define HOOK_DATA16(addr,hw) ((HOOK_TYPE_DATA16 << HOOK_SHIFT) + addr), hw +#define HOOK_DATA32(addr,w) ((HOOK_TYPE_DATA32 << HOOK_SHIFT) + addr), w +#define HOOK_LOAD(dest) ((HOOK_TYPE_LOAD << HOOK_SHIFT)), dest +#define HOOK_UNLOAD(dest) ((HOOK_TYPE_UNLOAD << HOOK_SHIFT)), dest +#define HOOK_AREPL(addr,dest) ((HOOK_TYPE_AREPL << HOOK_SHIFT) + addr), dest +#define HOOK_ANSUB(addr,dest) ((HOOK_TYPE_ANSUB << HOOK_SHIFT) + addr), dest +#define HOOK_TREPL(addr,dest) ((HOOK_TYPE_TREPL << HOOK_SHIFT) + addr), dest +#define HOOK_TNSUB(addr,dest) HOOK_DATA16(addr, 0xB500), HOOK_TREPL((addr) + 2, dest), HOOK_DATA16((addr) + 6, 0xBD00) + +#endif //__ASSEMBLER__ + + //NCP-like synonyms #define HOOK_JUMP_AA HOOK_ANSUB #define HOOK_JUMP_TA HOOK_TNSUB @@ -91,4 +113,13 @@ typedef void (*RCM_UNLOAD_CALLBACK) (u32 imageBase); #define HOOK_SET16 HOOK_DATA16 #define HOOK_SET32 HOOK_DATA32 + +#ifndef __ASSEMBLER__ + #define HOOK_TABLE(...) static volatile void *__attribute__((section(".ftbl"))) __attribute__((__used__)) __ftbl[] = {__VA_ARGS__} + +#else //__ASSEMBLER__ + +#define HOOK_TABLE(...) .section .ftbl ; .word __VA_ARGS__ ; .section .text + +#endif //__ASSEMBLER__ diff --git a/rcm_sample/Makefile b/rcm_sample/Makefile index 3aa298b..865be17 100644 --- a/rcm_sample/Makefile +++ b/rcm_sample/Makefile @@ -75,7 +75,7 @@ CFLAGS := -g -Wall -Os\ CFLAGS += $(INCLUDE) CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -ASFLAGS := -g $(ARCH) +ASFLAGS := -g $(ARCH) $(INCLUDE) LDFLAGS = -r -T $(CURDIR)/../../symbols.x -T $(CURDIR)/../linker.x -g $(ARCH) -Map newcode.map #---------------------------------------------------------------------------------