test/runtime/machine.ras 1.1 KiB raw
1
//! Boot one hart and check user termination through production dispatch.
2
.text;
3
    call @kernel::boot::initialize;
4
    call @kernel::dispatchcheck::setup;
5
    call @kernel::boot::run;
6
.export @kernel::dispatchcheck::memory;
7
.export @kernel::dispatchcheck::kernelGp;
8
.export @kernel::dispatchcheck::completion;
9
.export @kernel::dispatchcheck::finish;
10
@kernel::dispatchcheck::memory
11
    ret;
12
@kernel::dispatchcheck::kernelGp
13
    mv %a0 %gp;
14
    ret;
15
@kernel::dispatchcheck::completion
16
    la %a0 @complete;
17
    ret;
18
@complete
19
    call @kernel::dispatchcheck::verify;
20
    ebreak;
21
@kernel::dispatchcheck::finish
22
    li %t0 0x10001000;
23
    li %t1 0x5555;
24
    sw %t1 0(%t0);
25
    ebreak;
26
27
.export @kernel::dispatchcheck::put;
28
@kernel::dispatchcheck::put
29
    li %t0 0x10000000;
30
    sb %a0 0(%t0);
31
    ret;
32
33
.export @kernel::dispatchcheck::invoke;
34
// Preserve kernel state while calling one private instance of shared code.
35
@kernel::dispatchcheck::invoke
36
    addi %sp %sp -16;
37
    sd %ra 8(%sp);
38
    sd %gp 0(%sp);
39
    mv %gp %a1;
40
    jalr %ra %a0 0;
41
    ld %gp 0(%sp);
42
    ld %ra 8(%sp);
43
    addi %sp %sp 16;
44
    ret;