1
0
Fork 0
mirror of https://github.com/Atmosphere-NX/Atmosphere.git synced 2024-11-22 20:06:40 +00:00

emummc: fix nintendo path redir on 4.1.0

This commit is contained in:
Michael Scire 2019-06-16 15:01:10 -07:00
parent 2c46ec9638
commit 0bf7df0426
25 changed files with 111 additions and 111 deletions

View file

@ -24,6 +24,7 @@
typedef struct {
int opcode_reg;
uint32_t adrp_offset;
uint32_t add_rel_offset;
} fs_offsets_nintendo_path_t;
typedef struct {

View file

@ -47,11 +47,11 @@
// Nintendo Paths
#define FS_OFFSET_100_NINTENDO_PATHS \
{ \
{.opcode_reg = 9, .adrp_offset = 0x00032C58}, \
{.opcode_reg = 8, .adrp_offset = 0x00032C60}, \
{.opcode_reg = 9, .adrp_offset = 0x00032F3C}, \
{.opcode_reg = 8, .adrp_offset = 0x00032F44}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 9, .adrp_offset = 0x00032C58, .add_rel_offset = 4}, \
{.opcode_reg = 8, .adrp_offset = 0x00032C60, .add_rel_offset = 4}, \
{.opcode_reg = 9, .adrp_offset = 0x00032F3C, .add_rel_offset = 4}, \
{.opcode_reg = 8, .adrp_offset = 0x00032F44, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_100_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_200_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x00033F08}, \
{.opcode_reg = 3, .adrp_offset = 0x00035084}, \
{.opcode_reg = 3, .adrp_offset = 0x0003537C}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x00033F08, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00035084, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003537C, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_200_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_200_EXFAT_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x00033F08}, \
{.opcode_reg = 3, .adrp_offset = 0x00035084}, \
{.opcode_reg = 3, .adrp_offset = 0x0003537C}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x00033F08, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00035084, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003537C, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_200_EXFAT_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_210_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x000342E0}, \
{.opcode_reg = 3, .adrp_offset = 0x0003545C}, \
{.opcode_reg = 3, .adrp_offset = 0x00035754}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x000342E0, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003545C, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00035754, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_210_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_210_EXFAT_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x000342E0}, \
{.opcode_reg = 3, .adrp_offset = 0x0003545C}, \
{.opcode_reg = 3, .adrp_offset = 0x00035754}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x000342E0, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003545C, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00035754, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_210_EXFAT_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_300_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x000391F4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A480}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A778}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x000391F4, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A480, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A778, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_300_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_300_EXFAT_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x000391F4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A480}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A778}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x000391F4, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A480, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A778, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_300_EXFAT_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_301_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x00039260}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A4EC}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A7E4}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x00039260, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A4EC, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A7E4, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_301_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_301_EXFAT_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x00039260}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A4EC}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A7E4}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x00039260, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A4EC, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0003A7E4, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_301_EXFAT_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_400_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x0002023C}, \
{.opcode_reg = 3, .adrp_offset = 0x00021BE8}, \
{.opcode_reg = 3, .adrp_offset = 0x00021EC4}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x0002023C, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00021BE8, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00021EC4, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_400_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_400_EXFAT_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x0002023C}, \
{.opcode_reg = 3, .adrp_offset = 0x00021BE8}, \
{.opcode_reg = 3, .adrp_offset = 0x00021EC4}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x0002023C, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00021BE8, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00021EC4, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_400_EXFAT_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_410_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x0002023C}, \
{.opcode_reg = 3, .adrp_offset = 0x00021BE8}, \
{.opcode_reg = 3, .adrp_offset = 0x00021EC4}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x0002023C, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00021BE8, .add_rel_offset = 12}, \
{.opcode_reg = 3, .adrp_offset = 0x00021EC4, .add_rel_offset = 12}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_410_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_410_EXFAT_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x0002023C}, \
{.opcode_reg = 3, .adrp_offset = 0x00021BE8}, \
{.opcode_reg = 3, .adrp_offset = 0x00021EC4}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x0002023C, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00021BE8, .add_rel_offset = 12}, \
{.opcode_reg = 3, .adrp_offset = 0x00021EC4, .add_rel_offset = 12}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_410_EXFAT_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_500_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x00028980}, \
{.opcode_reg = 3, .adrp_offset = 0x0002ACE4}, \
{.opcode_reg = 3, .adrp_offset = 0x0002B220}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x00028980, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0002ACE4, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0002B220, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_500_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_500_EXFAT_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x00028980}, \
{.opcode_reg = 3, .adrp_offset = 0x0002ACE4}, \
{.opcode_reg = 3, .adrp_offset = 0x0002B220}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x00028980, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0002ACE4, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0002B220, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_500_EXFAT_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_510_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x000289B0}, \
{.opcode_reg = 3, .adrp_offset = 0x0002AD14}, \
{.opcode_reg = 3, .adrp_offset = 0x0002B250}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x000289B0, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0002AD14, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0002B250, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_510_H__

View file

@ -47,10 +47,10 @@
// Nintendo Paths
#define FS_OFFSET_510_EXFAT_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x000289B0}, \
{.opcode_reg = 3, .adrp_offset = 0x0002AD14}, \
{.opcode_reg = 3, .adrp_offset = 0x0002B250}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x000289B0, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0002AD14, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0002B250, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_510_EXFAT_H__

View file

@ -47,11 +47,11 @@
// Nintendo Paths
#define FS_OFFSET_600_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x000790DC}, \
{.opcode_reg = 3, .adrp_offset = 0x0007A924}, \
{.opcode_reg = 3, .adrp_offset = 0x0007AB18}, \
{.opcode_reg = 3, .adrp_offset = 0x0007AEF4}, \
{.opcode_reg = 0, .adrp_offset = 0} \
{.opcode_reg = 3, .adrp_offset = 0x000790DC, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0007A924, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0007AB18, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0007AEF4, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0} \
}
#endif // __FS_600_H__

View file

@ -47,11 +47,11 @@
// Nintendo Paths
#define FS_OFFSET_600_EXFAT_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x000847DC}, \
{.opcode_reg = 3, .adrp_offset = 0x00086024}, \
{.opcode_reg = 3, .adrp_offset = 0x00086218}, \
{.opcode_reg = 3, .adrp_offset = 0x000865F4}, \
{.opcode_reg = 0, .adrp_offset = 0} \
{.opcode_reg = 3, .adrp_offset = 0x000847DC, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00086024, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00086218, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x000865F4, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0} \
}
#endif // __FS_600_EXFAT_H__

View file

@ -47,12 +47,12 @@
// Nintendo Paths
#define FS_OFFSET_700_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x0007DA90}, \
{.opcode_reg = 3, .adrp_offset = 0x0007F344}, \
{.opcode_reg = 3, .adrp_offset = 0x0007F538}, \
{.opcode_reg = 3, .adrp_offset = 0x0007F914}, \
{.opcode_reg = 4, .adrp_offset = 0x0007FAD8}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x0007DA90, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0007F344, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0007F538, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0007F914, .add_rel_offset = 4}, \
{.opcode_reg = 4, .adrp_offset = 0x0007FAD8, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_700_H__

View file

@ -47,12 +47,12 @@
// Nintendo Paths
#define FS_OFFSET_700_EXFAT_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x00089040}, \
{.opcode_reg = 3, .adrp_offset = 0x0008A8F4}, \
{.opcode_reg = 3, .adrp_offset = 0x0008AAE8}, \
{.opcode_reg = 3, .adrp_offset = 0x0008AEC4}, \
{.opcode_reg = 4, .adrp_offset = 0x0008B088}, \
{.opcode_reg = 0, .adrp_offset = 0}, \
{.opcode_reg = 3, .adrp_offset = 0x00089040, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0008A8F4, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0008AAE8, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0008AEC4, .add_rel_offset = 4}, \
{.opcode_reg = 4, .adrp_offset = 0x0008B088, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
}
#endif // __FS_700_EXFAT_H__

View file

@ -47,12 +47,12 @@
// Nintendo Paths
#define FS_OFFSET_800_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x0007F5F0}, \
{.opcode_reg = 3, .adrp_offset = 0x00081084}, \
{.opcode_reg = 3, .adrp_offset = 0x00081278}, \
{.opcode_reg = 3, .adrp_offset = 0x00081654}, \
{.opcode_reg = 4, .adrp_offset = 0x00081818}, \
{.opcode_reg = 0, .adrp_offset = 0} \
{.opcode_reg = 3, .adrp_offset = 0x0007F5F0, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00081084, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00081278, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x00081654, .add_rel_offset = 4}, \
{.opcode_reg = 4, .adrp_offset = 0x00081818, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0} \
}
#endif // __FS_800_H__

View file

@ -47,12 +47,12 @@
// Nintendo Paths
#define FS_OFFSET_800_EXFAT_NINTENDO_PATHS \
{ \
{.opcode_reg = 3, .adrp_offset = 0x0008ABA0}, \
{.opcode_reg = 3, .adrp_offset = 0x0008C634}, \
{.opcode_reg = 3, .adrp_offset = 0x0008C828}, \
{.opcode_reg = 3, .adrp_offset = 0x0008CC04}, \
{.opcode_reg = 4, .adrp_offset = 0x0008CDC8}, \
{.opcode_reg = 0, .adrp_offset = 0} \
{.opcode_reg = 3, .adrp_offset = 0x0008ABA0, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0008C634, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0008C828, .add_rel_offset = 4}, \
{.opcode_reg = 3, .adrp_offset = 0x0008CC04, .add_rel_offset = 4}, \
{.opcode_reg = 4, .adrp_offset = 0x0008CDC8, .add_rel_offset = 4}, \
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0} \
}
#endif // __FS_800_EXFAT_H__

View file

@ -154,15 +154,14 @@ void write_nop(uintptr_t source)
smcWriteAddress32((void *)source, GENERATE_NOP());
}
void write_adrp_add(int reg, uintptr_t pc, intptr_t destination)
void write_adrp_add(int reg, uintptr_t pc, uintptr_t add_rel_offset, intptr_t destination)
{
uintptr_t add_opcode_location = pc + sizeof(uint32_t);
uintptr_t add_opcode_location = pc + add_rel_offset;
intptr_t offset = (destination & 0xFFFFF000) - (pc & 0xFFFFF000);
uint32_t opcode_adrp = GENERATE_ADRP(reg, offset);
uint32_t opcode_add = GENERATE_ADD(reg, reg, (destination & 0x00000FFF));
// TODO: use 64 write?
smcWriteAddress32((void *)pc, opcode_adrp);
smcWriteAddress32((void *)add_opcode_location, opcode_add);
}
@ -268,7 +267,7 @@ void setup_nintendo_paths(void)
{
intptr_t nintendo_path_location = (intptr_t)&nintendo_path;
uintptr_t fs_adrp_opcode_location = INJECT_OFFSET(uintptr_t, fs_offsets->nintendo_paths[i].adrp_offset);
write_adrp_add(fs_offsets->nintendo_paths[i].opcode_reg, fs_adrp_opcode_location, nintendo_path_location);
write_adrp_add(fs_offsets->nintendo_paths[i].opcode_reg, fs_adrp_opcode_location, fs_offsets->nintendo_paths[i].add_rel_offset, nintendo_path_location);
}
}
else
@ -281,8 +280,8 @@ void setup_nintendo_paths(void)
intptr_t album_path_location = nintendo_album_path_location + path_len - 6; // "/Album"
uintptr_t fs_n_adrp_opcode_location = INJECT_OFFSET(uintptr_t, fs_offsets->nintendo_paths[0].adrp_offset);
uintptr_t fs_adrp_opcode_location = INJECT_OFFSET(uintptr_t, fs_offsets->nintendo_paths[1].adrp_offset);
write_adrp_add(fs_offsets->nintendo_paths[0].opcode_reg, fs_n_adrp_opcode_location, nintendo_album_path_location);
write_adrp_add(fs_offsets->nintendo_paths[1].opcode_reg, fs_adrp_opcode_location, album_path_location);
write_adrp_add(fs_offsets->nintendo_paths[0].opcode_reg, fs_n_adrp_opcode_location, fs_offsets->nintendo_paths[0].add_rel_offset, nintendo_album_path_location);
write_adrp_add(fs_offsets->nintendo_paths[1].opcode_reg, fs_adrp_opcode_location, fs_offsets->nintendo_paths[1].add_rel_offset, album_path_location);
}
// Do contents path
{
@ -291,8 +290,8 @@ void setup_nintendo_paths(void)
intptr_t contents_path_location = nintendo_contents_path_location + path_len - 9; // "/Contents"
uintptr_t fs_n_adrp_opcode_location = INJECT_OFFSET(uintptr_t, fs_offsets->nintendo_paths[2].adrp_offset);
uintptr_t fs_adrp_opcode_location = INJECT_OFFSET(uintptr_t, fs_offsets->nintendo_paths[3].adrp_offset);
write_adrp_add(fs_offsets->nintendo_paths[2].opcode_reg, fs_n_adrp_opcode_location, nintendo_contents_path_location);
write_adrp_add(fs_offsets->nintendo_paths[3].opcode_reg, fs_adrp_opcode_location, contents_path_location);
write_adrp_add(fs_offsets->nintendo_paths[2].opcode_reg, fs_n_adrp_opcode_location, fs_offsets->nintendo_paths[2].add_rel_offset, nintendo_contents_path_location);
write_adrp_add(fs_offsets->nintendo_paths[3].opcode_reg, fs_adrp_opcode_location, fs_offsets->nintendo_paths[3].add_rel_offset, contents_path_location);
}
}
}