/* Skip applying relocations if addend is zero */
beqz a0, apply_relocs_done
+ progress " reloc"
apply_relocs_loop:
/* Read new relocation record */
.globl enable_paging
.equ enable_paging, _C2 ( enable_paging_, __riscv_xlen )
+ /* Paging mode names (for debug messages) */
+ .section ".rodata.paging_mode_names", "a", @progbits
+paging_mode_names:
+ .asciz "none"
+ .org ( paging_mode_names + 5 * SATP_MODE_SV32 )
+ .asciz "Sv32"
+ .org ( paging_mode_names + 5 * SATP_MODE_SV39 )
+ .asciz "Sv39"
+ .org ( paging_mode_names + 5 * SATP_MODE_SV48 )
+ .asciz "Sv48"
+ .org ( paging_mode_names + 5 * SATP_MODE_SV57 )
+ .asciz "Sv57"
+ .size paging_mode_names, . - paging_mode_names
+
+ /*
+ * Display paging mode name (if debugging is enabled)
+ */
+ .macro paging_mode_name reg
+#ifndef NDEBUG
+ slli t0, \reg, 2
+ add t0, t0, \reg
+ la t1, paging_mode_names
+ add t1, t1, t0
+ jal t0, print_message_alt
+#endif
+ .endm
+
/*****************************************************************************
*
* Enable 64-bit paging
* a3 - PTE pointer
* a4 - PTE stride
*/
+ progress " paging:"
mv a2, a0
li a1, SATP_MODE_SV57
enable_paging_64_loop:
enable_paging_64_done:
/* Return, with or without paging enabled */
+ paging_mode_name a0
ret
.size enable_paging_64, . - enable_paging_64
* a3 - PTE pointer
* a4 - saved content of temporarily modified PTE
*/
+ progress " paging:"
mv a2, a0
/* Calculate virtual address offset */
enable_paging_32_done:
/* Return, with or without paging enabled */
+ paging_mode_name a0
ret
.size enable_paging_32, . - enable_paging_32