Remove handling of kernel panics for SAFE_FIRM k9, fix it for LGY FIRMs.
This commit is contained in:
parent
f81c92e35b
commit
25811e2b52
@ -358,7 +358,7 @@ static inline void patchNativeFirm(u32 firmVersion, FirmwareSource nandType, u32
|
||||
//Kernel9/Process9 debugging
|
||||
patchExceptionHandlersInstall(arm9Section, section[2].size);
|
||||
patchSvcBreak9(arm9Section, section[2].size, (u32)(section[2].address));
|
||||
patchKernel9Panic(arm9Section, section[2].size);
|
||||
patchKernel9Panic(arm9Section, section[2].size, NATIVE_FIRM);
|
||||
|
||||
//Stub svcBreak11 with "bkpt 65535"
|
||||
patchSvcBreak11(arm11Section1, section[1].size);
|
||||
@ -393,7 +393,7 @@ static inline void patchLegacyFirm(FirmwareType firmType)
|
||||
//Kernel9/Process9 debugging
|
||||
patchExceptionHandlersInstall(arm9Section, section[3].size);
|
||||
patchSvcBreak9(arm9Section, section[3].size, (u32)(section[3].address));
|
||||
patchKernel9Panic(arm9Section, section[3].size);
|
||||
patchKernel9Panic(arm9Section, section[3].size, firmType);
|
||||
}
|
||||
|
||||
applyLegacyFirmPatches((u8 *)firm, firmType);
|
||||
@ -418,7 +418,6 @@ static inline void patchSafeFirm(void)
|
||||
//Kernel9/Process9 debugging
|
||||
patchExceptionHandlersInstall(arm9Section, section[2].size);
|
||||
patchSvcBreak9(arm9Section, section[2].size, (u32)(section[2].address));
|
||||
patchKernel9Panic(arm9Section, section[2].size);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -190,13 +190,24 @@ void patchSvcBreak11(u8 *pos, u32 size)
|
||||
*addr = 0xE12FFF7F;
|
||||
}
|
||||
|
||||
void patchKernel9Panic(u8 *pos, u32 size)
|
||||
void patchKernel9Panic(u8 *pos, u32 size, FirmwareType firmType)
|
||||
{
|
||||
if(firmType == TWL_FIRM || firmType == AGB_FIRM)
|
||||
{
|
||||
u8 *off = pos + ((isN3DS) ? 0x723C : 0x69A8);
|
||||
*(u16 *)off = 0x4778; //bx pc
|
||||
*(u16 *)(off + 2) = 0x46C0; //nop
|
||||
*(u32 *)(off + 4) = 0xE12FFF7E; //bkpt 65534
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
const u8 pattern[] = {0x00, 0x20, 0xA0, 0xE3, 0x02, 0x30, 0xA0, 0xE1, 0x02, 0x10, 0xA0, 0xE1, 0x05, 0x00, 0xA0, 0xE3};
|
||||
|
||||
u32 *off = (u32 *)memsearch(pos, pattern, size, 16);
|
||||
*off = 0xE12FFF7E;
|
||||
}
|
||||
}
|
||||
|
||||
void patchKernel11Panic(u8 *pos, u32 size)
|
||||
{
|
||||
|
@ -45,7 +45,7 @@ void patchFirmWriteSafe(u8 *pos, u32 size);
|
||||
void patchExceptionHandlersInstall(u8 *pos, u32 size);
|
||||
void patchSvcBreak9(u8 *pos, u32 size, u32 k9addr);
|
||||
void patchSvcBreak11(u8 *pos, u32 size);
|
||||
void patchKernel9Panic(u8 *pos, u32 size);
|
||||
void patchKernel9Panic(u8 *pos, u32 size, FirmwareType firmType);
|
||||
void patchKernel11Panic(u8 *pos, u32 size);
|
||||
void patchArm11SvcAccessChecks(u8 *pos, u32 size);
|
||||
void patchK11ModuleChecks(u8 *pos, u32 size);
|
||||
|
Reference in New Issue
Block a user