99 lines
1.9 KiB
ArmAsm
99 lines
1.9 KiB
ArmAsm
.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
|