Port the patch to all versions

This commit is contained in:
roblabla 2019-02-07 19:11:41 +00:00
parent b80dfc682f
commit f295f1f921

View file

@ -62,8 +62,20 @@ extern gfx_con_t gfx_con;
#define ID_RCV_OFF_600 0x29B6C
#define OUTPUT_DEBUG_OFF_100 0x2AD64
#define OUTPUT_DEBUG_OFF_200 0x02FB8
#define OUTPUT_DEBUG_OFF_300 0x03840
#define OUTPUT_DEBUG_OFF_302 0x03840
#define OUTPUT_DEBUG_OFF_400 0x0381C
#define OUTPUT_DEBUG_OFF_500 0x00DE0
#define OUTPUT_DEBUG_OFF_600 0x00DE0
#define PRINTK_OFF_100 0x3BB4
#define PRINTK_OFF_200 0x4178
#define PRINTK_OFF_300 0x4A00
#define PRINTK_OFF_302 0x4A00
#define PRINTK_OFF_400 0x474C
#define PRINTK_OFF_500 0x1DD4
#define PRINTK_OFF_600 0x1F44
static u32 PRC_ID_SND_100[] =
{
@ -95,6 +107,13 @@ static u32 PRC_ID_RCV_200[] =
0xA9BF2FEA, 0x2A0F03EA, 0xD37EF54A, 0xF9405FEB, 0xF86A696A, 0xF9407BEB, 0x92FFFFE9, 0x8A090148,
0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9413168, 0xA8C12FEA
};
#define FREE_CODE_OFF_3RD_200 (FREE_CODE_OFF_2ND_200 + sizeof(PRC_ID_RCV_200) + 4)
static u32 DEBUG_OUTPUT_TRAMPOLINE_200[] =
{
0x252E2A73, 0x00000000, // "%.*s"
0xE20300AA, 0xA0FFFF58, 0xFD7BBFA9, _BL(FREE_CODE_OFF_3RD_200 + 5 * 4, PRINTK_OFF_200), 0x000080D2,
0xFD7BC1A8, 0xC0035FD6
};
static u32 PRC_ID_SND_300[] =
{
@ -107,6 +126,13 @@ static u32 PRC_ID_RCV_300[] =
0xA9BF2FEA, 0x2A0F03EA, 0xD37EF54A, 0xF9405FEB, 0xF86A696A, 0xF9407BEB, 0x92FFFFE9, 0x8A090148,
0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9415568, 0xA8C12FEA
};
#define FREE_CODE_OFF_3RD_300 (FREE_CODE_OFF_2ND_300 + sizeof(PRC_ID_RCV_300) + 4)
static u32 DEBUG_OUTPUT_TRAMPOLINE_300[] =
{
0x252E2A73, 0x00000000, // "%.*s"
0xE20300AA, 0xA0FFFF58, 0xFD7BBFA9, _BL(FREE_CODE_OFF_3RD_300 + 5 * 4, PRINTK_OFF_300), 0x000080D2,
0xFD7BC1A8, 0xC0035FD6
};
static u32 PRC_ID_SND_302[] =
{
@ -119,6 +145,13 @@ static u32 PRC_ID_RCV_302[] =
0xA9BF2FEA, 0x2A0F03EA, 0xD37EF54A, 0xF9405FEB, 0xF86A696A, 0xF9407BEB, 0x92FFFFE9, 0x8A090148,
0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9415568, 0xA8C12FEA
};
#define FREE_CODE_OFF_3RD_302 (FREE_CODE_OFF_2ND_302 + sizeof(PRC_ID_RCV_302) + 4)
static u32 DEBUG_OUTPUT_TRAMPOLINE_302[] =
{
0x252E2A73, 0x00000000, // "%.*s"
0xE20300AA, 0xA0FFFF58, 0xFD7BBFA9, _BL(FREE_CODE_OFF_3RD_302 + 5 * 4, PRINTK_OFF_302), 0x000080D2,
0xFD7BC1A8, 0xC0035FD6
};
static u32 PRC_ID_SND_400[] =
{
@ -131,6 +164,13 @@ static u32 PRC_ID_RCV_400[] =
0xF9403BED, 0x2A0E03EA, 0xD37EF54A, 0xF86A69AA, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A,
0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9415B28, 0xD503201F
};
#define FREE_CODE_OFF_3RD_400 (FREE_CODE_OFF_2ND_400 + sizeof(PRC_ID_RCV_400) + 4)
static u32 DEBUG_OUTPUT_TRAMPOLINE_400[] =
{
0x252E2A73, 0x00000000, // "%.*s"
0xE20300AA, 0xA0FFFF58, 0xFD7BBFA9, _BL(FREE_CODE_OFF_3RD_400 + 5 * 4, PRINTK_OFF_400), 0x000080D2,
0xFD7BC1A8, 0xC0035FD6
};
static u32 PRC_ID_SND_500[] =
{
@ -143,6 +183,13 @@ static u32 PRC_ID_RCV_500[] =
0xF9403BED, 0x2A1503EA, 0xD37EF54A, 0xF86A69AA, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A,
0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9415B08, 0xF9406FEA
};
#define FREE_CODE_OFF_3RD_500 (FREE_CODE_OFF_2ND_500 + sizeof(PRC_ID_RCV_500) + 4)
static u32 DEBUG_OUTPUT_TRAMPOLINE_500[] =
{
0x252E2A73, 0x00000000, // "%.*s"
0xE20300AA, 0xA0FFFF58, 0xFD7BBFA9, _BL(FREE_CODE_OFF_3RD_500 + 5 * 4, PRINTK_OFF_500), 0x000080D2,
0xFD7BC1A8, 0xC0035FD6
};
static u32 PRC_ID_SND_600[] =
{
@ -157,6 +204,13 @@ static u32 PRC_ID_RCV_600[] =
0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000100, 0xA9BF27E8, 0xF9400308, 0xF9401D08, 0xAA1803E0,
0xD63F0100, 0xA8C127E8, 0xAA0003E8, 0xA8C12FEA, 0xAA0803E0
};
#define FREE_CODE_OFF_3RD_600 (FREE_CODE_OFF_2ND_600 + sizeof(PRC_ID_RCV_600) + 4)
static u32 DEBUG_OUTPUT_TRAMPOLINE_600[] =
{
0x252E2A73, 0x00000000, // "%.*s"
0xE20300AA, 0xA0FFFF58, 0xFD7BBFA9, _BL(FREE_CODE_OFF_3RD_600 + 5 * 4, PRINTK_OFF_600), 0x000080D2,
0xFD7BC1A8, 0xC0035FD6
};
// Include kernel patches here, so we can utilize pkg1 id
KERNEL_PATCHSET_DEF(_kernel_1_patchset,
@ -178,6 +232,8 @@ KERNEL_PATCHSET_DEF(_kernel_1_patchset,
KERNEL_PATCHSET_DEF(_kernel_2_patchset,
{ SVC_VERIFY_DS, 0x54834, _NOP(), NULL }, // Disable SVC verifications
{ DEBUG_MODE_EN, 0x6086C, _MOVZX(8, 1, 0), NULL }, // Enable Debug Patch
{ DEBUG_OUTPUT_GEN, OUTPUT_DEBUG_OFF_200, _B(OUTPUT_DEBUG_OFF_200, FREE_CODE_OFF_3RD_200), NULL }, // Branch to the printk trampoline
{ DEBUG_OUTPUT_ARR, FREE_CODE_OFF_3RD_200, sizeof(DEBUG_OUTPUT_TRAMPOLINE_200) >> 2, DEBUG_OUTPUT_TRAMPOLINE_200 }, // Call printk with the right arguments.
// Atmosphère kernel patches.
{ ATM_GEN_PATCH, ID_SND_OFF_200, _B(ID_SND_OFF_200, FREE_CODE_OFF_1ST_200), NULL}, // Send process id branch.
{ ATM_ARR_PATCH, FREE_CODE_OFF_1ST_200, sizeof(PRC_ID_SND_200) >> 2, PRC_ID_SND_200}, // Send process id code.
@ -192,6 +248,8 @@ KERNEL_PATCHSET_DEF(_kernel_2_patchset,
KERNEL_PATCHSET_DEF(_kernel_3_patchset,
{ SVC_VERIFY_DS, 0x3BD24, _NOP(), NULL }, // Disable SVC verifications
{ DEBUG_MODE_EN, 0x483FC, _MOVZX(8, 1, 0), NULL }, // Enable Debug Patch
{ DEBUG_OUTPUT_GEN, OUTPUT_DEBUG_OFF_300, _B(OUTPUT_DEBUG_OFF_300, FREE_CODE_OFF_3RD_300), NULL }, // Branch to the printk trampoline
{ DEBUG_OUTPUT_ARR, FREE_CODE_OFF_3RD_300, sizeof(DEBUG_OUTPUT_TRAMPOLINE_300) >> 2, DEBUG_OUTPUT_TRAMPOLINE_300 }, // Call printk with the right arguments.
// Atmosphère kernel patches.
{ ATM_GEN_PATCH, ID_SND_OFF_300, _B(ID_SND_OFF_300, FREE_CODE_OFF_1ST_300), NULL}, // Send process id branch.
{ ATM_ARR_PATCH, FREE_CODE_OFF_1ST_300, sizeof(PRC_ID_SND_300) >> 2, PRC_ID_SND_300}, // Send process id code.
@ -206,6 +264,8 @@ KERNEL_PATCHSET_DEF(_kernel_3_patchset,
KERNEL_PATCHSET_DEF(_kernel_302_patchset,
{ SVC_VERIFY_DS, 0x3BD24, _NOP(), NULL }, // Disable SVC verifications
{ DEBUG_MODE_EN, 0x48414, _MOVZX(8, 1, 0), NULL }, // Enable Debug Patch
{ DEBUG_OUTPUT_GEN, OUTPUT_DEBUG_OFF_302, _B(OUTPUT_DEBUG_OFF_302, FREE_CODE_OFF_3RD_302), NULL }, // Branch to the printk trampoline
{ DEBUG_OUTPUT_ARR, FREE_CODE_OFF_3RD_302, sizeof(DEBUG_OUTPUT_TRAMPOLINE_302) >> 2, DEBUG_OUTPUT_TRAMPOLINE_302 }, // Call printk with the right arguments.
// Atmosphère kernel patches.
{ ATM_GEN_PATCH, ID_SND_OFF_302, _B(ID_SND_OFF_302, FREE_CODE_OFF_1ST_302), NULL}, // Send process id branch.
{ ATM_ARR_PATCH, FREE_CODE_OFF_1ST_302, sizeof(PRC_ID_SND_302) >> 2, PRC_ID_SND_302}, // Send process id code.
@ -220,6 +280,8 @@ KERNEL_PATCHSET_DEF(_kernel_302_patchset,
KERNEL_PATCHSET_DEF(_kernel_4_patchset,
{ SVC_VERIFY_DS, 0x41EB4, _NOP(), NULL }, // Disable SVC verifications
{ DEBUG_MODE_EN, 0x4EBFC, _MOVZX(8, 1, 0), NULL }, // Enable Debug Patch
{ DEBUG_OUTPUT_GEN, OUTPUT_DEBUG_OFF_400, _B(OUTPUT_DEBUG_OFF_400, FREE_CODE_OFF_3RD_400), NULL }, // Branch to the printk trampoline
{ DEBUG_OUTPUT_ARR, FREE_CODE_OFF_3RD_400, sizeof(DEBUG_OUTPUT_TRAMPOLINE_400) >> 2, DEBUG_OUTPUT_TRAMPOLINE_400 }, // Call printk with the right arguments.
// Atmosphère kernel patches.
{ ATM_GEN_PATCH, ID_SND_OFF_400, _B(ID_SND_OFF_400, FREE_CODE_OFF_1ST_400), NULL}, // Send process id branch.
{ ATM_ARR_PATCH, FREE_CODE_OFF_1ST_400, sizeof(PRC_ID_SND_400) >> 2, PRC_ID_SND_400}, // Send process id code.
@ -234,6 +296,8 @@ KERNEL_PATCHSET_DEF(_kernel_4_patchset,
KERNEL_PATCHSET_DEF(_kernel_5_patchset,
{ SVC_VERIFY_DS, 0x45E6C, _NOP(), NULL }, // Disable SVC verifications
{ DEBUG_MODE_EN, 0x5513C, _MOVZX(8, 1, 0), NULL }, // Enable Debug Patch
{ DEBUG_OUTPUT_GEN, OUTPUT_DEBUG_OFF_500, _B(OUTPUT_DEBUG_OFF_500, FREE_CODE_OFF_3RD_500), NULL }, // Branch to the printk trampoline
{ DEBUG_OUTPUT_ARR, FREE_CODE_OFF_3RD_500, sizeof(DEBUG_OUTPUT_TRAMPOLINE_500) >> 2, DEBUG_OUTPUT_TRAMPOLINE_500 }, // Call printk with the right arguments.
// Atmosphère kernel patches.
{ ATM_GEN_PATCH, ID_SND_OFF_500, _B(ID_SND_OFF_500, FREE_CODE_OFF_1ST_500), NULL}, // Send process id branch.
{ ATM_ARR_PATCH, FREE_CODE_OFF_1ST_500, sizeof(PRC_ID_SND_500) >> 2, PRC_ID_SND_500}, // Send process id code.
@ -248,6 +312,8 @@ KERNEL_PATCHSET_DEF(_kernel_5_patchset,
KERNEL_PATCHSET_DEF(_kernel_6_patchset,
{ SVC_VERIFY_DS, 0x47EA0, _NOP(), NULL }, // Disable SVC verifications
{ DEBUG_MODE_EN, 0x57548, _MOVZX(8, 1, 0), NULL }, // Enable Debug Patch
{ DEBUG_OUTPUT_GEN, OUTPUT_DEBUG_OFF_600, _B(OUTPUT_DEBUG_OFF_600, FREE_CODE_OFF_3RD_600), NULL }, // Branch to the printk trampoline
{ DEBUG_OUTPUT_ARR, FREE_CODE_OFF_3RD_600, sizeof(DEBUG_OUTPUT_TRAMPOLINE_600) >> 2, DEBUG_OUTPUT_TRAMPOLINE_600 }, // Call printk with the right arguments.
// Atmosphère kernel patches.
{ ATM_GEN_PATCH, ID_SND_OFF_600, _B(ID_SND_OFF_600, FREE_CODE_OFF_1ST_600), NULL}, // Send process id branch.
{ ATM_ARR_PATCH, FREE_CODE_OFF_1ST_600, sizeof(PRC_ID_SND_600) >> 2, PRC_ID_SND_600}, // Send process id code.