54 lines
786 B
ArmAsm
54 lines
786 B
ArmAsm
|
.option norvc
|
||
|
|
||
|
.text
|
||
|
.global _start
|
||
|
_start:
|
||
|
lla t0, trap
|
||
|
csrw mtvec, t0
|
||
|
|
||
|
# These are all illegal instructions
|
||
|
csrw time, x0
|
||
|
.insn i CUSTOM_0, 0, x0, x0, 0x321
|
||
|
csrw time, x0
|
||
|
.insn i CUSTOM_0, 0, x0, x0, 0x123
|
||
|
csrw cycle, x0
|
||
|
|
||
|
# Success!
|
||
|
li a0, 0
|
||
|
j _exit
|
||
|
|
||
|
trap:
|
||
|
# When an instruction traps, compare it to the insn in memory.
|
||
|
csrr t0, mepc
|
||
|
csrr t1, mtval
|
||
|
lwu t2, 0(t0)
|
||
|
bne t1, t2, fail
|
||
|
|
||
|
# Skip the insn and continue.
|
||
|
addi t0, t0, 4
|
||
|
csrw mepc, t0
|
||
|
mret
|
||
|
|
||
|
fail:
|
||
|
li a0, 1
|
||
|
|
||
|
# Exit code in a0
|
||
|
_exit:
|
||
|
lla a1, semiargs
|
||
|
li t0, 0x20026 # ADP_Stopped_ApplicationExit
|
||
|
sd t0, 0(a1)
|
||
|
sd a0, 8(a1)
|
||
|
li a0, 0x20 # TARGET_SYS_EXIT_EXTENDED
|
||
|
|
||
|
# Semihosting call sequence
|
||
|
.balign 16
|
||
|
slli zero, zero, 0x1f
|
||
|
ebreak
|
||
|
srai zero, zero, 0x7
|
||
|
j .
|
||
|
|
||
|
.data
|
||
|
.balign 16
|
||
|
semiargs:
|
||
|
.space 16
|