diff --git a/arm11/arm11.ld b/arm11/arm11.ld index 2348f37..56e3929 100644 --- a/arm11/arm11.ld +++ b/arm11/arm11.ld @@ -16,7 +16,7 @@ PROVIDE(__start__ = 0x1FF89000); . = __start__; - .text ALIGN(4) : + .text ALIGN(0x1000) : { /* .init */ KEEP( *(.crt0) ) @@ -40,8 +40,10 @@ /* =========== RODATA section =========== */ - . = ALIGN(4); + . = ALIGN(0x1000); + __text_pages__ = (. - __start__) / 0x1000; + __rodata_start__ = .; .rodata : { *(.rodata) @@ -60,8 +62,10 @@ /* =========== DATA section =========== */ - . = ALIGN(4); + . = ALIGN(0x1000); + __rodata_pages__ = (. - __rodata_start__) / 0x1000; + __data_start__ = .; .data : { *(.data) diff --git a/source/arm11/hardware/mmu.c b/source/arm11/hardware/mmu.c index d69fa27..2d81120 100644 --- a/source/arm11/hardware/mmu.c +++ b/source/arm11/hardware/mmu.c @@ -146,10 +146,23 @@ PERM_PRIV_RO_USR_NO_ACC, 1, true, L1_TO_L2(ATTR_NORM_NONCACHABLE)); extern u32 __start__[]; + extern u32 __text_pages__[]; + extern u32 __rodata_start__[]; + extern u32 __rodata_pages__[]; + extern u32 __data_start__[]; + const u32 dataPages = (FCRAM_BASE - (u32)__data_start__) / 0x1000; - // Remaining AXIWRAM pages - mmuMapPages((u32)__start__, (u32)__start__, 119, (u32*)(A11_MMU_TABLES_BASE + 0x4400u), - true, PERM_PRIV_RW_USR_NO_ACC, 1, false, + // text + mmuMapPages((u32)__start__, (u32)__start__, (u32)__text_pages__, (u32*)(A11_MMU_TABLES_BASE + 0x4400u), + true, PERM_PRIV_RO_USR_NO_ACC, 1, false, + L1_TO_L2(MAKE_CUSTOM_NORM_ATTR(POLICY_WRITE_BACK_ALLOC_BUFFERED, POLICY_WRITE_BACK_ALLOC_BUFFERED))); + // rodata + mmuMapPages((u32)__rodata_start__, (u32)__rodata_start__, (u32)__rodata_pages__, (u32*)(A11_MMU_TABLES_BASE + 0x4400u), + true, PERM_PRIV_RO_USR_NO_ACC, 1, true, + L1_TO_L2(MAKE_CUSTOM_NORM_ATTR(POLICY_WRITE_BACK_ALLOC_BUFFERED, POLICY_WRITE_BACK_ALLOC_BUFFERED))); + // data, bss and heap + mmuMapPages((u32)__data_start__, (u32)__data_start__, dataPages, (u32*)(A11_MMU_TABLES_BASE + 0x4400u), + true, PERM_PRIV_RW_USR_NO_ACC, 1, true, L1_TO_L2(MAKE_CUSTOM_NORM_ATTR(POLICY_WRITE_BACK_ALLOC_BUFFERED, POLICY_WRITE_BACK_ALLOC_BUFFERED))); // Map fastboot executable start to boot11 mirror (exception vectors)