.section .text .globl _start .align 4 _start: cspecialr c1, pcc # Use csetaddr to build a stack capability li t0, 0x80001000 # fixed top-of-stack address csetaddr csp, ct0, t0 # bound it to 8 bytes (size of dword) # li t2, 8 # csetbounds csp, csp, t2 # li t5, 4 # cincoffsetimm csp, csp, 5 # Read bounds # cgetbase t3, csp # ld t0, 0(csp) # derive capability from PCC # csetaddr c1, ct0, t0 # cspecialr ca0, pcc # Get the root data capability # li t0, 0x80002000 # Set top of stack address # csetaddr csp, ca0, t0 # Set address # li t1, -2048 # 2KB size # csetbounds csp, csp, t1 # Restrict bounds so main can't wander # cincoffsetimm csp, csp, 12 # Call main # sw ra, 12(sp) call main # a0 contains return value mv t1, a0 # la t0, tohost # Signal success la t0, 0 li t1, 1 sd t1, 0(t0)