.option norvc .option norelax .section .text .globl _start .globl vm_boot # -------------------------------------------------- # Entry point # -------------------------------------------------- _start: vm_boot: # Only hart 0 csrr a0, mhartid bnez a0, hang. # -------------------------------------------------- # Build page table entries # -------------------------------------------------- # root_pt[0] -> l1_pt la t0, l1_pt srli t0, t0, 12 slli t0, t0, 10 ori t0, t0, 0x1 # V la t1, root_pt sd t0, 0(t1) # l1_pt[0] -> l0_pt la t0, l0_pt srli t0, t0, 12 slli t0, t0, 10 ori t0, t0, 0x1 # V la t1, l1_pt sd t0, 0(t1) # l0_pt[0] -> identity RWX mapping li t0, (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<6) la t1, l0_pt sd t0, 0(t1) # -------------------------------------------------- # Enable Sv39 paging # -------------------------------------------------- la t0, root_pt srli t0, t0, 12 # PPN li t1, (8 << 60) # MODE = Sv39 or t0, t0, t1 csrw satp, t0 sfence.vma zero, zero # Signal success la t0, tohost li t1, 1 sd t1, 0(t0) hang: wfi j hang # -------------------------------------------------- # Required ISA test symbols # -------------------------------------------------- .globl exit exit: j exit # -------------------------------------------------- # Data section (NO .bss) # -------------------------------------------------- .section .data .align 3 .globl tohost .globl fromhost tohost: .dword 0 fromhost: .dword 0 # -------------------------------------------------- # Page tables (must be in .data) # -------------------------------------------------- .align 12 root_pt: .zero 4096 .align 12 l1_pt: .zero 4096 .align 12 l0_pt: .zero 4096