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
|
//Kernel9/Process9 debugging
|
||||||
patchExceptionHandlersInstall(arm9Section, section[2].size);
|
patchExceptionHandlersInstall(arm9Section, section[2].size);
|
||||||
patchSvcBreak9(arm9Section, section[2].size, (u32)(section[2].address));
|
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"
|
//Stub svcBreak11 with "bkpt 65535"
|
||||||
patchSvcBreak11(arm11Section1, section[1].size);
|
patchSvcBreak11(arm11Section1, section[1].size);
|
||||||
@ -393,7 +393,7 @@ static inline void patchLegacyFirm(FirmwareType firmType)
|
|||||||
//Kernel9/Process9 debugging
|
//Kernel9/Process9 debugging
|
||||||
patchExceptionHandlersInstall(arm9Section, section[3].size);
|
patchExceptionHandlersInstall(arm9Section, section[3].size);
|
||||||
patchSvcBreak9(arm9Section, section[3].size, (u32)(section[3].address));
|
patchSvcBreak9(arm9Section, section[3].size, (u32)(section[3].address));
|
||||||
patchKernel9Panic(arm9Section, section[3].size);
|
patchKernel9Panic(arm9Section, section[3].size, firmType);
|
||||||
}
|
}
|
||||||
|
|
||||||
applyLegacyFirmPatches((u8 *)firm, firmType);
|
applyLegacyFirmPatches((u8 *)firm, firmType);
|
||||||
@ -418,7 +418,6 @@ static inline void patchSafeFirm(void)
|
|||||||
//Kernel9/Process9 debugging
|
//Kernel9/Process9 debugging
|
||||||
patchExceptionHandlersInstall(arm9Section, section[2].size);
|
patchExceptionHandlersInstall(arm9Section, section[2].size);
|
||||||
patchSvcBreak9(arm9Section, section[2].size, (u32)(section[2].address));
|
patchSvcBreak9(arm9Section, section[2].size, (u32)(section[2].address));
|
||||||
patchKernel9Panic(arm9Section, section[2].size);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,12 +190,23 @@ void patchSvcBreak11(u8 *pos, u32 size)
|
|||||||
*addr = 0xE12FFF7F;
|
*addr = 0xE12FFF7F;
|
||||||
}
|
}
|
||||||
|
|
||||||
void patchKernel9Panic(u8 *pos, u32 size)
|
void patchKernel9Panic(u8 *pos, u32 size, FirmwareType firmType)
|
||||||
{
|
{
|
||||||
const u8 pattern[] = {0x00, 0x20, 0xA0, 0xE3, 0x02, 0x30, 0xA0, 0xE1, 0x02, 0x10, 0xA0, 0xE1, 0x05, 0x00, 0xA0, 0xE3};
|
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
|
||||||
|
}
|
||||||
|
|
||||||
u32 *off = (u32 *)memsearch(pos, pattern, size, 16);
|
else
|
||||||
*off = 0xE12FFF7E;
|
{
|
||||||
|
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)
|
void patchKernel11Panic(u8 *pos, u32 size)
|
||||||
|
@ -45,7 +45,7 @@ void patchFirmWriteSafe(u8 *pos, u32 size);
|
|||||||
void patchExceptionHandlersInstall(u8 *pos, u32 size);
|
void patchExceptionHandlersInstall(u8 *pos, u32 size);
|
||||||
void patchSvcBreak9(u8 *pos, u32 size, u32 k9addr);
|
void patchSvcBreak9(u8 *pos, u32 size, u32 k9addr);
|
||||||
void patchSvcBreak11(u8 *pos, u32 size);
|
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 patchKernel11Panic(u8 *pos, u32 size);
|
||||||
void patchArm11SvcAccessChecks(u8 *pos, u32 size);
|
void patchArm11SvcAccessChecks(u8 *pos, u32 size);
|
||||||
void patchK11ModuleChecks(u8 *pos, u32 size);
|
void patchK11ModuleChecks(u8 *pos, u32 size);
|
||||||
|
Reference in New Issue
Block a user